]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_restrictbanned.cpp
TRE regex provider (the same engine used by Unreal 3.2)
[user/henk/code/inspircd.git] / src / modules / m_restrictbanned.cpp
index 51ff39772bf3d8f4dcaaf91d4dcdaa439a9fe556..ca8c3a426a2003500090d5e6e59758e441948d91 100644 (file)
@@ -2,24 +2,15 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
- *                       E-mail:
- *                <brain@chatspike.net>
- *               <Craig@chatspike.net>
- *     
- * Written by Craig Edwards, Craig McLure, and others.
+ *  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.
  *
  * ---------------------------------------------------
  */
 
-using namespace std;
-
-#include "users.h"
-#include "channels.h"
-#include "modules.h"
-
 #include "inspircd.h"
 
 /* $ModDesc: Restricts banned users in a channel. May not speak, etc. */
@@ -28,31 +19,29 @@ class ModuleRestrictBanned : public Module
 {
  private:
  public:
-       ModuleRestrictBanned(InspIRCd* Me) : Module::Module(Me)
+       ModuleRestrictBanned(InspIRCd* Me) : Module(Me)
        {
+               Implementation eventlist[] = { I_OnLocalTopicChange, I_OnUserPreNick, I_OnUserPreNotice, I_OnUserPreMessage };
+               ServerInstance->Modules->Attach(eventlist, this, 4);
        }
-       
+
        virtual ~ModuleRestrictBanned()
        {
        }
-       
+
        virtual Version GetVersion()
        {
-               return Version(1,1,0,1,VF_VENDOR,API_VERSION);
+               return Version("$Id$",VF_VENDOR,API_VERSION);
        }
 
-       void Implements(char* List)
-       {
-               List[I_OnLocalTopicChange] = List[I_OnUserPreNick] = List[I_OnUserPreNotice] = List[I_OnUserPreMessage] = 1;
-       }
 
-       int CheckRestricted(userrec *user, chanrec *channel, const std::string &action)
+       int CheckRestricted(User *user, Channel *channel, const std::string &action)
        {
                /* aren't local? we don't care. */
                if (!IS_LOCAL(user))
                        return 0;
 
-               if (channel->IsBanned(user) && channel->GetStatus(user) < STATUS_VOICE)
+               if (channel->GetStatus(user) < STATUS_VOICE && channel->IsBanned(user))
                {
                        /* banned, boned. drop the message. */
                        user->WriteServ("NOTICE "+std::string(user->nick)+" :*** You may not " + action + ", as you are banned on channel " + channel->name);
@@ -62,42 +51,41 @@ class ModuleRestrictBanned : public Module
                return 0;
        }
 
-       virtual int OnUserPreNick(userrec *user, const std::string &newnick)
+       virtual int OnUserPreNick(User *user, const std::string &newnick)
        {
                /* if they aren't local, we don't care */
                if (!IS_LOCAL(user))
                        return 0;
 
+               /* Allow changes to UID */
+               if (isdigit(newnick[0]))
+                       return 0;
+
                /* bit of a special case. */
-               for (std::vector<ucrec*>::iterator i = user->chans.begin(); i != user->chans.end(); i++)
+               for (UCListIter i = user->chans.begin(); i != user->chans.end(); i++)
                {
-                       if (((ucrec*)(*i))->channel != NULL)
-                       {
-                               chanrec *channel = ((ucrec*)(*i))->channel;
-
-                               if (CheckRestricted(user, channel, "change your nickname") == 1)
-                                       return 1;
-                       }
+                       if (CheckRestricted(user, i->first, "change your nickname") == 1)
+                               return 1;
                }
 
                return 0;
        }
 
-       virtual int OnLocalTopicChange(userrec *user, chanrec *channel, const std::string &topic)
+       virtual int OnLocalTopicChange(User *user, Channel *channel, const std::string &topic)
        {
                return CheckRestricted(user, channel, "change the topic");
        }
-       
-       virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
+
+       virtual int OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
        {
                return OnUserPreNotice(user,dest,target_type,text,status,exempt_list);
        }
 
-       virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
+       virtual int OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
        {
                if (target_type == TYPE_CHANNEL)
                {
-                       chanrec *channel = (chanrec *)dest;
+                       Channel *channel = (Channel *)dest;
 
                        return CheckRestricted(user, channel, "message the channel");
                }
@@ -106,28 +94,4 @@ class ModuleRestrictBanned : public Module
        }
 };
 
-
-class ModuleRestrictBannedFactory : public ModuleFactory
-{
- public:
-       ModuleRestrictBannedFactory()
-       {
-       }
-       
-       ~ModuleRestrictBannedFactory()
-       {
-       }
-       
-       virtual Module * CreateModule(InspIRCd* Me)
-       {
-               return new ModuleRestrictBanned(Me);
-       }
-       
-};
-
-
-extern "C" void * init_module( void )
-{
-       return new ModuleRestrictBannedFactory;
-}
-
+MODULE_INIT(ModuleRestrictBanned)