]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_silence.cpp
Added ability to update the helpop file on rehash (Bug #69)
[user/henk/code/inspircd.git] / src / modules / m_silence.cpp
index 3ac1719e9695e92e3c27f6920c7b23878f006173..c423506a0c5338aebf68c8b2198b6acaa15772ef 100644 (file)
  * ---------------------------------------------------
  */
 
+using namespace std;
+
 #include <stdio.h>
 #include <string>
 #include <vector>
 #include "users.h"
 #include "channels.h"
 #include "modules.h"
+#include "helperfuncs.h"
+#include "hashcomp.h"
 
 /* $ModDesc: Provides support for the /SILENCE command */
 
@@ -65,7 +69,9 @@ void handle_silence(char **parameters, int pcnt, userrec *user)
                                        for (silencelist::iterator i = sl->begin(); i != sl->end(); i++)
                                                {
                                                // search through for the item
-                                                       if (!strcasecmp(i->c_str(),nick))
+                                               irc::string listitem = i->c_str();
+                                               irc::string target = nick;
+                                               if (listitem == target)
                                                        {
                                                                sl->erase(i);
                                                        WriteServ(user->fd,"950 %s %s :Removed %s!*@* from silence list",user->nick, user->nick,nick);
@@ -95,6 +101,16 @@ void handle_silence(char **parameters, int pcnt, userrec *user)
                                user->Extend(std::string("silence_list"),(char*)sl);
                        }
                        // add the nick to it -- silence only takes nicks for some reason even though its list shows masks
+                       for (silencelist::iterator n = sl->begin(); n != sl->end();  n++)
+                       {
+                               irc::string listitem = n->c_str();
+                               irc::string target = nick;
+                               if (listitem == target)
+                               {
+                                       WriteServ(user->fd,"952 %s %s :%s is already on your silence list",user->nick, user->nick,nick);
+                                       return;
+                               }
+                       }
                        sl->push_back(std::string(nick));
                        WriteServ(user->fd,"951 %s %s :Added %s!*@* to silence list",user->nick, user->nick,nick);
                        return;
@@ -112,7 +128,7 @@ class ModuleSilence : public Module
        ModuleSilence()
        {
                Srv = new Server;
-               Srv->AddCommand("SILENCE",handle_silence,0,0);
+               Srv->AddCommand("SILENCE",handle_silence,0,0,"m_silence.so");
        }
 
        virtual void OnUserQuit(userrec* user)
@@ -126,6 +142,12 @@ class ModuleSilence : public Module
                        user->Shrink("silence_list");
                }
        }
+
+       virtual void On005Numeric(std::string &output)
+       {
+               // we don't really have a limit...
+               output = output + " SILENCE=999";
+       }
        
        virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text)
        {
@@ -141,7 +163,9 @@ class ModuleSilence : public Module
                        {
                                for (silencelist::const_iterator c = sl->begin(); c != sl->end(); c++)
                                {
-                                       if (!strcasecmp(c->c_str(),user->nick))
+                                        irc::string listitem = c->c_str();
+                                        irc::string target = user->nick;
+                                        if (listitem == target)
                                        {
                                                return 1;
                                        }
@@ -161,7 +185,9 @@ class ModuleSilence : public Module
                         {
                                 for (silencelist::const_iterator c = sl->begin(); c != sl->end(); c++)
                                 {
-                                        if (!strcasecmp(c->c_str(),user->nick))
+                                        irc::string listitem = c->c_str();
+                                        irc::string target = user->nick;
+                                        if (listitem == target)
                                         {
                                                 return 1;
                                         }
@@ -178,7 +204,7 @@ class ModuleSilence : public Module
        
        virtual Version GetVersion()
        {
-               return Version(1,0,0,0);
+               return Version(1,0,0,1,VF_VENDOR);
        }
 };