]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add m_channelban: implements extban +b j: - prevents user from joining a channel...
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 5 Aug 2008 11:31:03 +0000 (11:31 +0000)
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 5 Aug 2008 11:31:03 +0000 (11:31 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10090 e03df62e-2008-0410-955e-edbf42e46eb7

src/modules/m_channelban.cpp [new file with mode: 0644]

diff --git a/src/modules/m_channelban.cpp b/src/modules/m_channelban.cpp
new file mode 100644 (file)
index 0000000..0da6cef
--- /dev/null
@@ -0,0 +1,67 @@
+/*       +------------------------------------+
+ *       | 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 j: - matching channel bans */
+
+class ModuleBadChannelExtban : public Module
+{
+ private:
+ public:
+       ModuleBadChannelExtban(InspIRCd* Me) : Module(Me)
+       {
+               Implementation eventlist[] = { I_OnUserPreJoin, I_On005Numeric };
+               ServerInstance->Modules->Attach(eventlist, this, 2);
+       }
+
+       virtual ~ModuleBadChannelExtban()
+       {
+       }
+
+       virtual Version GetVersion()
+       {
+               return Version(1,2,0,0,VF_VENDOR,API_VERSION);
+       }
+
+       virtual int OnUserPreJoin(User *user, Channel *c, const char *cname, std::string &privs, const std::string &key)
+       {
+               if (!IS_LOCAL(user))
+                       return 0;
+
+               if (!c)
+                       return 0;
+
+
+               for (UCListIter i = user->chans.begin(); i != user->chans.end(); i++)
+               {
+                       if (c->IsExtBanned(i->first->name, 'j'))
+                       {
+                               // XXX: send a numeric here
+                               user->WriteServ("NOTICE "+std::string(user->nick)+" :*** Cannot join " + c->name + ", as you match a ban");
+                               return 1;
+                       }
+               }
+
+               return 0;
+       }
+
+       virtual void On005Numeric(std::string &output)
+       {
+               ServerInstance->AddExtBanChar('j');
+       }
+};
+
+
+MODULE_INIT(ModuleBadChannelExtban)
+