]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Merge m_nickban into m_nonicks
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Mon, 14 Jul 2008 12:09:40 +0000 (12:09 +0000)
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Mon, 14 Jul 2008 12:09:40 +0000 (12:09 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10018 e03df62e-2008-0410-955e-edbf42e46eb7

conf/modules.conf.example
src/modules/m_nickban.cpp [deleted file]
src/modules/m_nonicks.cpp

index 687d45d6167eecd16b982c7bc3788580a807ff60..d30aac30ee9b5b77a9d7bca6ba969c427d145633 100644 (file)
 # This is supported by mIRC, x-chat, klient, and maybe more.
 #<module name="m_namesx.so">
 
-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-# Nickban: Implements extended ban n:, which stops anyone matching
-# a mask like +b n:nick!user@host from changing their nick on channel.
-#<module name="m_nickban.so">
-#
-
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # Nickchange flood protection module: Allows up to X nick changes in Y seconds.
 # Provides channel mode +F.
 #<module name="m_nokicks.so">
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-# No nicks module: Adds the +N channel mode
+# No nicks module: Adds the +N channel mode, as well as the +b N:
+# extended bantype. +N stops all users from changing their nick,
+# the +b N: extban stops anyone from matching a +b N:nick!user@host
+# mask from changing their nick.
 #<module name="m_nonicks.so">
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
diff --git a/src/modules/m_nickban.cpp b/src/modules/m_nickban.cpp
deleted file mode 100644 (file)
index c2bd883..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#include "inspircd.h"
-
-/* $ModDesc: Implements extban +b n: - nick change bans */
-
-class ModuleNickBan : public Module
-{
- private:
- public:
-       ModuleNickBan(InspIRCd* Me) : Module(Me)
-       {
-               Implementation eventlist[] = { I_OnUserPreNick, I_On005Numeric };
-               ServerInstance->Modules->Attach(eventlist, this, 2);
-       }
-
-       virtual ~ModuleNickBan()
-       {
-       }
-
-       virtual Version GetVersion()
-       {
-               return Version(1,2,0,0,VF_VENDOR,API_VERSION);
-       }
-
-       virtual int OnUserPreNick(User *user, const std::string &newnick)
-       {
-               if (!IS_LOCAL(user))
-                       return 0;
-
-               for (UCListIter i = user->chans.begin(); i != user->chans.end(); i++)
-               {
-                       if (i->first->IsExtBanned(user, 'n'))
-                       {
-                               user->WriteServ("NOTICE "+std::string(user->nick)+" :*** Cannot change nick on " + i->first->name + ", as you match a nickname-change ban");
-                               return 1;
-                       }
-               }
-
-               return 0;
-       }
-
-       virtual void On005Numeric(std::string &output)
-       {
-               if (output.find(" EXTBAN=:") == std::string::npos)
-                       output.append(" EXTBAN=:n");
-               else
-                       output.insert(output.find(" EXTBAN=:") + 9, "n");
-       }
-};
-
-
-MODULE_INIT(ModuleNickBan)
-
index ed02af39f2b315ec95af005c454c2dc1de0ae8d9..7405c714969ad015fdd1980292eb9de64b89e55a 100644 (file)
@@ -13,7 +13,7 @@
 
 #include "inspircd.h"
 
-/* $ModDesc: Provides support for channel mode +N which prevents nick changes on channel */
+/* $ModDesc: Provides support for channel mode +N & extban +b N: which prevents nick changes on channel */
 
 class NoNicks : public ModeHandler
 {
@@ -47,14 +47,13 @@ class ModuleNoNickChange : public Module
 {
        NoNicks* nn;
  public:
-       ModuleNoNickChange(InspIRCd* Me)
-               : Module(Me)
+       ModuleNoNickChange(InspIRCd* Me) : Module(Me)
        {
 
                nn = new NoNicks(ServerInstance);
                ServerInstance->Modes->AddMode(nn);
-               Implementation eventlist[] = { I_OnUserPreNick };
-               ServerInstance->Modules->Attach(eventlist, this, 1);
+               Implementation eventlist[] = { I_OnUserPreNick, I_On005Numeric };
+               ServerInstance->Modules->Attach(eventlist, this, 2);
        }
 
        virtual ~ModuleNoNickChange()
@@ -69,25 +68,36 @@ class ModuleNoNickChange : public Module
        }
 
 
+       virtual void On005Numeric(std::string &output)
+       {
+               ServerInstance->AddExtBanChar("n");
+       }
+
        virtual int OnUserPreNick(User* user, const std::string &newnick)
        {
-               if (IS_LOCAL(user))
+               if (!IS_LOCAL(user))
+                       return 0;
+
+               if (isdigit(newnick[0])) /* don't even think about touching a switch to uid! */
+                       return 0;
+
+               for (UCListIter i = user->chans.begin(); i != user->chans.end(); i++)
                {
-                       if (isdigit(newnick[0])) /* don't even think about touching a switch to uid! */
-                               return 0;
+                       Channel* curr = i->first;
 
-                       for (UCListIter i = user->chans.begin(); i != user->chans.end(); i++)
+                       if (curr->IsModeSet('N'))
                        {
-                               Channel* curr = i->first;
+                               if (CHANOPS_EXEMPT(ServerInstance, 'N') && curr->GetStatus(user) == STATUS_OP)
+                                       continue;
 
-                               if (curr->IsModeSet('N'))
-                               {
-                                       if (CHANOPS_EXEMPT(ServerInstance, 'N') && curr->GetStatus(user) == STATUS_OP)
-                                               continue;
+                               user->WriteNumeric(ERR_CANTCHANGENICK, "%s :Can't change nickname while on %s (+N is set)", user->nick.c_str(), curr->name.c_str());
+                               return 1;
+                       }
 
-                                       user->WriteNumeric(ERR_CANTCHANGENICK, "%s :Can't change nickname while on %s (+N is set)", user->nick.c_str(), curr->name.c_str());
-                                       return 1;
-                               }
+                       if (curr->IsExtBanned(user, 'N'))
+                       {
+                               user->WriteNumeric(ERR_CANTCHANGENICK, "%s :Can't change nickname while on %s (+N is set)", user->nick.c_str(), curr->name.c_str());
+                               return 1;
                        }
                }