]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_nicklock.cpp
Remove an extern, partly because it's unused, partly because it then gets shadowed...
[user/henk/code/inspircd.git] / src / modules / m_nicklock.cpp
index 750b431cf66bc39f1a4e1c60abe95b46ed979c0b..cd36f17475535c049d0fb001771ad290ba7929c6 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
  *                       E-mail:
  *                <brain@chatspike.net>
  *               <Craig@chatspike.net>
@@ -26,7 +26,7 @@ using namespace std;
 
 /* $ModDesc: Provides the NICKLOCK command, allows an oper to chage a users nick and lock them to it until they quit */
 
-Server *Srv;
+static Server *Srv;
 
 class cmd_nicklock : public command_t
 {
@@ -51,23 +51,13 @@ class cmd_nicklock : public command_t
                        }
                        if (Srv->IsNick(std::string(parameters[1])))
                        {
-                               server = user->server;
-                               me = Srv->GetServerName().c_str();
-       
-                               if (server == me)
-                               {
-                                       // give them a lock flag
-                                       Srv->SendOpers(std::string(user->nick)+" used NICKLOCK to change and hold "+std::string(parameters[0])+" to "+parameters[1]);
-                                       Srv->ChangeUserNick(source,std::string(parameters[1]));
-                                       // only attempt to set their lockflag after we know the change succeeded
-                                       source = Srv->FindNick(std::string(parameters[1]));
-                                       if (source)
-                                               source->Extend("nick_locked", "ON");
-                               }
-                               else
-                               {
-                                       WriteServ(user->fd,"947 %s %s :Can't lock the nickname of a non-local user",user->nick,source->nick);
-                               }
+                               // give them a lock flag
+                               Srv->SendOpers(std::string(user->nick)+" used NICKLOCK to change and hold "+std::string(parameters[0])+" to "+parameters[1]);
+                               Srv->ChangeUserNick(source,std::string(parameters[1]));
+                               // only attempt to set their lockflag after we know the change succeeded
+                               source = Srv->FindNick(std::string(parameters[1]));
+                               if (source)
+                                       source->Extend("nick_locked", "ON");
                        }
                }
        }
@@ -120,10 +110,10 @@ class ModuleNickLock : public Module
 
        void Implements(char* List)
        {
-               List[I_OnUserPreNick] = List[I_OnUserQuit] = 1;
+               List[I_OnUserPreNick] = List[I_OnUserQuit] = List[I_OnCleanup] = 1;
        }
 
-       virtual int OnUserPreNick(userrec* user, std::string newnick)
+       virtual int OnUserPreNick(userrec* user, const std::string &newnick)
        {
                if (user->GetExt("nick_locked"))
                {
@@ -133,11 +123,19 @@ class ModuleNickLock : public Module
                return 0;
        }
 
-        virtual void OnUserQuit(userrec* user, std::string reason)
-        {
-                user->Shrink("nick_locked");
-        }
+       virtual void OnUserQuit(userrec* user, const std::string &reason)
+       {
+               user->Shrink("nick_locked");
+       }
 
+       virtual void OnCleanup(int target_type, void* item)
+       {
+               if(target_type == TYPE_USER)
+               {
+                       userrec* user = (userrec*)item;
+                       user->Shrink("nick_locked");
+               }
+       }
 };
 
 // stuff down here is the module-factory stuff. For basic modules you can ignore this.