mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-12 12:09:03 -04:00
Add <helpchan> for granting privs to helpers on join.
This commit is contained in:
parent
41124e1ad1
commit
ad85c6cb42
@ -830,7 +830,7 @@ using their cloak when they quit.
|
|||||||
g In combination with /ACCEPT, provides for server-side
|
g In combination with /ACCEPT, provides for server-side
|
||||||
ignore (requires the callerid module).
|
ignore (requires the callerid module).
|
||||||
h Marks as 'available for help' in WHOIS (server operators
|
h Marks as 'available for help' in WHOIS (server operators
|
||||||
only, requires the helpmsg module).
|
only, requires the helpmode module).
|
||||||
i Makes invisible to /WHO if the user using /WHO is not in
|
i Makes invisible to /WHO if the user using /WHO is not in
|
||||||
a common channel.
|
a common channel.
|
||||||
k Prevents the user from being kicked from channels, or
|
k Prevents the user from being kicked from channels, or
|
||||||
|
@ -57,6 +57,8 @@ private:
|
|||||||
HelpOp helpop;
|
HelpOp helpop;
|
||||||
UserModeReference hideoper;
|
UserModeReference hideoper;
|
||||||
bool markhelpers;
|
bool markhelpers;
|
||||||
|
std::string helpchanmodes;
|
||||||
|
insp::flat_map<std::string, std::string> helpchans;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ModuleHelpMode()
|
ModuleHelpMode()
|
||||||
@ -70,6 +72,15 @@ public:
|
|||||||
|
|
||||||
void ReadConfig(ConfigStatus& status) override
|
void ReadConfig(ConfigStatus& status) override
|
||||||
{
|
{
|
||||||
|
for (const auto& [_, tag] : ServerInstance->Config->ConfTags("helpchan"))
|
||||||
|
{
|
||||||
|
const auto name = tag->getString("name");
|
||||||
|
if (name.empty())
|
||||||
|
throw ModuleException(this, "<helpchan:name> must not be empty at " + tag->source.str());
|
||||||
|
|
||||||
|
helpchans[name] = tag->getString("prefix", "o", 1);
|
||||||
|
}
|
||||||
|
|
||||||
const auto& tag = ServerInstance->Config->ConfValue("helpmode");
|
const auto& tag = ServerInstance->Config->ConfValue("helpmode");
|
||||||
ignorehideoper = tag->getBool("ignorehideoper");
|
ignorehideoper = tag->getBool("ignorehideoper");
|
||||||
markhelpers = tag->getBool("markhelpers", true);
|
markhelpers = tag->getBool("markhelpers", true);
|
||||||
@ -114,6 +125,22 @@ public:
|
|||||||
return MOD_RES_PASSTHRU;
|
return MOD_RES_PASSTHRU;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override
|
||||||
|
{
|
||||||
|
if (!user->IsModeSet(helpop))
|
||||||
|
return MOD_RES_PASSTHRU;
|
||||||
|
|
||||||
|
for (const auto& [helpchan, prefix] : helpchans)
|
||||||
|
{
|
||||||
|
if (InspIRCd::Match(cname, helpchan))
|
||||||
|
{
|
||||||
|
privs.append(prefix);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return MOD_RES_PASSTHRU;
|
||||||
|
}
|
||||||
|
|
||||||
void OnUserQuit(User* user, const std::string& message, const std::string& opermessage) override
|
void OnUserQuit(User* user, const std::string& message, const std::string& opermessage) override
|
||||||
{
|
{
|
||||||
if (user->IsModeSet(helpop))
|
if (user->IsModeSet(helpop))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user