]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_nicklock.cpp
Now with added ANGRY MONKEYS.
[user/henk/code/inspircd.git] / src / modules / m_nicklock.cpp
index 731704d6850c9ddeb25e46c83739dee503698a65..315f8390e2a9b225c6b50e3f4ec78b0578d0a96e 100644 (file)
@@ -26,17 +26,19 @@ 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
 {
+       char* dummy;
  public:
-        cmd_nicklock () : command_t("NICKLOCK", 'o', 2)
-        {
+       cmd_nicklock () : command_t("NICKLOCK", 'o', 2)
+       {
                this->source = "m_nicklock.so";
-        }
+               syntax = "<oldnick> <newnick>";
+       }
 
-       void Handle(char **parameters, int pcnt, userrec *user)
+       void Handle(const char** parameters, int pcnt, userrec *user)
        {
                userrec* source = Srv->FindNick(std::string(parameters[0]));
                irc::string server;
@@ -44,7 +46,7 @@ class cmd_nicklock : public command_t
 
                if (source)
                {
-                       if (source->GetExt("nick_locked"))
+                       if (source->GetExt("nick_locked", dummy))
                        {
                                WriteServ(user->fd,"946 %s %s :This user's nickname is already locked.",user->nick,source->nick);
                                return;
@@ -69,9 +71,10 @@ class cmd_nickunlock : public command_t
        cmd_nickunlock () : command_t("NICKUNLOCK", 'o', 1)
        {
                this->source = "m_nickunlock.so";
+               syntax = "<locked-nick>";
        }
 
-       void Handle (char **parameters, int pcnt, userrec *user)
+       void Handle (const char** parameters, int pcnt, userrec *user)
        {
                userrec* source = Srv->FindNick(std::string(parameters[0]));
                if (source)
@@ -88,6 +91,7 @@ class ModuleNickLock : public Module
 {
        cmd_nicklock*   cmd1;
        cmd_nickunlock* cmd2;
+       char* n;
  public:
        ModuleNickLock(Server* Me)
                : Module::Module(Me)
@@ -110,12 +114,12 @@ 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"))
+               if (user->GetExt("nick_locked", n))
                {
                        WriteServ(user->fd,"447 %s :You cannot change your nickname (your nick is locked)",user->nick);
                        return 1;
@@ -123,11 +127,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.