summaryrefslogtreecommitdiff
path: root/src/modules/m_services_account.cpp
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-09-13 20:33:11 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-09-13 20:33:11 +0000
commit2d732f4dbf4ccd22c8a4424692cc72a89ffd49b7 (patch)
treefb1ff3f341b5ee7e801ad7ad00216a40ca131ede /src/modules/m_services_account.cpp
parent36a6e7f22e5510d12bd8e11a5b25f29360fbd75c (diff)
Change match direction of extbans to allow stacking
This allows you create stacked bans like: +b m:r:*bot* to mute anyone with bot in their gecos +e S:j:+#staff to allow voices in #staff to use color It also deprecates extban M, which can be implemented using m:R: git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11711 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_services_account.cpp')
-rw-r--r--src/modules/m_services_account.cpp42
1 files changed, 17 insertions, 25 deletions
diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp
index 30077e408..ac71a1215 100644
--- a/src/modules/m_services_account.cpp
+++ b/src/modules/m_services_account.cpp
@@ -123,14 +123,13 @@ class ModuleServicesAccount : public Module
ServerInstance->Modules->Attach(eventlist, this, 10);
}
- virtual void On005Numeric(std::string &t)
+ void On005Numeric(std::string &t)
{
ServerInstance->AddExtBanChar('R');
- ServerInstance->AddExtBanChar('M');
}
/* <- :twisted.oscnet.org 330 w00t2 w00t2 w00t :is logged in as */
- virtual void OnWhois(User* source, User* dest)
+ void OnWhois(User* source, User* dest)
{
std::string *account = accountname.get(dest);
@@ -146,7 +145,7 @@ class ModuleServicesAccount : public Module
}
}
- virtual void OnUserPostNick(User* user, const std::string &oldnick)
+ void OnUserPostNick(User* user, const std::string &oldnick)
{
/* On nickchange, if they have +r, remove it */
if (user->IsModeSet('r') && assign(user->nick) != oldnick)
@@ -158,7 +157,7 @@ class ModuleServicesAccount : public Module
}
}
- virtual ModResult OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
+ ModResult OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
{
if (!IS_LOCAL(user))
return MOD_RES_PASSTHRU;
@@ -182,16 +181,6 @@ class ModuleServicesAccount : public Module
user->WriteNumeric(477, ""+std::string(user->nick)+" "+std::string(c->name)+" :You need to be identified to a registered account to message this channel");
return MOD_RES_DENY;
}
-
- if (account)
- {
- if (c->GetExtBanStatus(*account, 'M') == MOD_RES_DENY)
- {
- // may not speak (text is deliberately vague, so they don't know which restriction to evade)
- user->WriteNumeric(477, ""+std::string(user->nick)+" "+std::string(c->name)+" :You may not speak in this channel");
- return MOD_RES_DENY;
- }
- }
}
else if (target_type == TYPE_USER)
{
@@ -207,20 +196,23 @@ class ModuleServicesAccount : public Module
return MOD_RES_PASSTHRU;
}
- virtual ModResult OnCheckBan(User* user, Channel* chan)
+ ModResult OnCheckBan(User* user, Channel* chan, const std::string& mask)
{
- std::string *account = accountname.get(user);
- if (!account)
- return MOD_RES_PASSTHRU;
- return chan->GetExtBanStatus(*account, 'R');
+ if (mask[0] == 'R' && mask[1] == ':')
+ {
+ std::string *account = accountname.get(user);
+ if (account && InspIRCd::Match(*account, mask.substr(2)))
+ return MOD_RES_DENY;
+ }
+ return MOD_RES_PASSTHRU;
}
- virtual ModResult OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
+ ModResult OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
{
return OnUserPreMessage(user, dest, target_type, text, status, exempt_list);
}
- virtual ModResult OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
+ ModResult OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (!IS_LOCAL(user))
return MOD_RES_PASSTHRU;
@@ -256,7 +248,7 @@ class ModuleServicesAccount : public Module
// In our case we're only sending a single string around, so we just construct a std::string.
// Some modules will probably get much more complex and format more detailed structs and classes
// in a textual way for sending over the link.
- virtual void OnDecodeMetaData(Extensible* target, const std::string &extname, const std::string &extdata)
+ void OnDecodeMetaData(Extensible* target, const std::string &extname, const std::string &extdata)
{
User* dest = dynamic_cast<User*>(target);
// check if its our metadata key, and its associated with a user
@@ -280,7 +272,7 @@ class ModuleServicesAccount : public Module
}
}
- virtual ~ModuleServicesAccount()
+ ~ModuleServicesAccount()
{
ServerInstance->Modes->DelMode(&m1);
ServerInstance->Modes->DelMode(&m2);
@@ -289,7 +281,7 @@ class ModuleServicesAccount : public Module
ServerInstance->Modes->DelMode(&m5);
}
- virtual Version GetVersion()
+ Version GetVersion()
{
return Version("$Id$",VF_COMMON|VF_VENDOR,API_VERSION);
}