]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_noinvite.cpp
WHEEEEE!!!!!
[user/henk/code/inspircd.git] / src / modules / m_noinvite.cpp
index a0caade2a23e3df719f4ceb649edfbc555c21077..11a4e9493daa73794deff82f6d067556de7a5013 100644 (file)
@@ -24,22 +24,51 @@ using namespace std;
 
 /* $ModDesc: Provides support for unreal-style channel mode +V */
 
+class NoInvite : public ModeHandler
+{
+ public:
+       NoInvite() : ModeHandler('V', 0, 0, false, MODETYPE_CHANNEL, false) { }
+
+       ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string &parameter, bool adding)
+       {
+               if (adding)
+               {
+                       if (!channel->IsModeSet('V'))
+                       {
+                               channel->SetMode('V',true);
+                               return MODEACTION_ALLOW;
+                       }
+               }
+               else
+               {
+                       if (channel->IsModeSet('V'))
+                       {
+                               channel->SetMode('V',false);
+                               return MODEACTION_ALLOW;
+                       }
+               }
+
+               return MODEACTION_DENY;
+       }
+};
+
 class ModuleNoInvite : public Module
 {
        Server *Srv;
+       NoInvite *ni;
        
        public:
  
-               ModuleNoInvite(Server* Me)
-                       : Module::Module(Me)
+               ModuleNoInvite(Server* Me) : Module::Module(Me)
                {
                        Srv = Me;
-                       Srv->AddExtendedMode('V',MT_CHANNEL,false,0,0);
+                       ni = new NoInvite();
+                       Srv->AddMode(ni, 'V');
                }
 
                void Implements(char* List)
                {
-                       List[I_On005Numeric] = List[I_OnUserPreInvite] = List[I_OnExtendedMode] = 1;
+                       List[I_On005Numeric] = List[I_OnUserPreInvite] = 1;
                }
 
                virtual void On005Numeric(std::string &output)
@@ -52,27 +81,15 @@ class ModuleNoInvite : public Module
                {
                        if (channel->IsModeSet('V'))
                        {
-                               WriteServ(user->fd,"492 %s %s :Can't invite %s to channel (+V set)",user->nick, channel->name, dest->nick);
+                               user->WriteServ("492 %s %s :Can't invite %s to channel (+V set)",user->nick, channel->name, dest->nick);
                                return 1;
                        }
                        return 0;
                }
-       
-               virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params)
-               {
-                       // check if this is our mode character...
-                       if ((modechar == 'V') && (type == MT_CHANNEL))
-                       {
-                               return 1;
-                       }
-                       else
-                       {
-                               return 0;
-                       }
-               }
 
                virtual ~ModuleNoInvite()
                {
+                       DELETE(ni);
                }
        
                virtual Version GetVersion()