]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_silence.cpp
Fix m_silence looking for maxentries in <showwhois> instead of <silence>.
[user/henk/code/inspircd.git] / src / modules / m_silence.cpp
index 089d599316dd277bb75dc6a437d271fe0905e787..c82ab3f9d6052ecf7c21f571bdfee029291b119a 100644 (file)
@@ -87,7 +87,7 @@ class CommandSVSSilence : public Command
 
                if (IS_LOCAL(u))
                {
-                       ServerInstance->Parser->CallHandler("SILENCE", std::vector<std::string>(++parameters.begin(), parameters.end()), u);
+                       ServerInstance->Parser->CallHandler("SILENCE", std::vector<std::string>(parameters.begin() + 1, parameters.end()), u);
                }
 
                return CMD_SUCCESS;
@@ -110,6 +110,7 @@ class CommandSilence : public Command
        CommandSilence(Module* Creator, unsigned int &max) : Command(Creator, "SILENCE", 0),
                maxsilence(max), ext("silence_list", Creator)
        {
+               allow_empty_last_param = false;
                syntax = "{[+|-]<mask> <p|c|i|n|t|a|x>}";
                TRANSLATE3(TR_TEXT, TR_TEXT, TR_END);
        }
@@ -125,7 +126,8 @@ class CommandSilence : public Command
                        {
                                for (silencelist::const_iterator c = sl->begin(); c != sl->end(); c++)
                                {
-                                       user->WriteNumeric(271, "%s %s %s %s",user->nick.c_str(), user->nick.c_str(),c->first.c_str(), DecompPattern(c->second).c_str());
+                                       std::string decomppattern = DecompPattern(c->second);
+                                       user->WriteNumeric(271, "%s %s %s %s",user->nick.c_str(), user->nick.c_str(),c->first.c_str(), decomppattern.c_str());
                                }
                        }
                        user->WriteNumeric(272, "%s :End of Silence List",user->nick.c_str());
@@ -161,6 +163,7 @@ class CommandSilence : public Command
 
                        if (action == '-')
                        {
+                               std::string decomppattern = DecompPattern(pattern);
                                // fetch their silence list
                                silencelist* sl = ext.get(user);
                                // does it contain any entries and does it exist?
@@ -173,7 +176,7 @@ class CommandSilence : public Command
                                                if (listitem == mask && i->second == pattern)
                                                {
                                                        sl->erase(i);
-                                                       user->WriteNumeric(950, "%s %s :Removed %s %s from silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), DecompPattern(pattern).c_str());
+                                                       user->WriteNumeric(950, "%s %s :Removed %s %s from silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), decomppattern.c_str());
                                                        if (!sl->size())
                                                        {
                                                                ext.unset(user);
@@ -182,7 +185,7 @@ class CommandSilence : public Command
                                                }
                                        }
                                }
-                               user->WriteNumeric(952, "%s %s :%s %s does not exist on your silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), DecompPattern(pattern).c_str());
+                               user->WriteNumeric(952, "%s %s :%s %s does not exist on your silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), decomppattern.c_str());
                        }
                        else if (action == '+')
                        {
@@ -198,12 +201,14 @@ class CommandSilence : public Command
                                        user->WriteNumeric(952, "%s %s :Your silence list is full",user->nick.c_str(), user->nick.c_str());
                                        return CMD_FAILURE;
                                }
+
+                               std::string decomppattern = DecompPattern(pattern);
                                for (silencelist::iterator n = sl->begin(); n != sl->end();  n++)
                                {
                                        irc::string listitem = n->first.c_str();
                                        if (listitem == mask && n->second == pattern)
                                        {
-                                               user->WriteNumeric(952, "%s %s :%s %s is already on your silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), DecompPattern(pattern).c_str());
+                                               user->WriteNumeric(952, "%s %s :%s %s is already on your silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), decomppattern.c_str());
                                                return CMD_FAILURE;
                                        }
                                }
@@ -215,7 +220,7 @@ class CommandSilence : public Command
                                {
                                        sl->push_back(silenceset(mask,pattern));
                                }
-                               user->WriteNumeric(951, "%s %s :Added %s %s to silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), DecompPattern(pattern).c_str());
+                               user->WriteNumeric(951, "%s %s :Added %s %s to silence list",user->nick.c_str(), user->nick.c_str(), mask.c_str(), decomppattern.c_str());
                                return CMD_SUCCESS;
                        }
                }
@@ -294,20 +299,23 @@ class ModuleSilence : public Module
 
        ModuleSilence()
                : maxsilence(32), cmdsilence(this, maxsilence), cmdsvssilence(this)
+       {
+       }
+
+       void init()
        {
                OnRehash(NULL);
-               ServerInstance->AddCommand(&cmdsilence);
-               ServerInstance->AddCommand(&cmdsvssilence);
-               ServerInstance->Extensions.Register(&cmdsilence.ext);
+               ServerInstance->Modules->AddService(cmdsilence);
+               ServerInstance->Modules->AddService(cmdsvssilence);
+               ServerInstance->Modules->AddService(cmdsilence.ext);
 
                Implementation eventlist[] = { I_OnRehash, I_On005Numeric, I_OnUserPreNotice, I_OnUserPreMessage, I_OnUserPreInvite };
-               ServerInstance->Modules->Attach(eventlist, this, 5);
+               ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
        }
 
        void OnRehash(User* user)
        {
-               ConfigReader Conf;
-               maxsilence = Conf.ReadInteger("silence", "maxentries", 0, true);
+               maxsilence = ServerInstance->Config->ConfValue("silence")->getInt("maxentries", 32);
                if (!maxsilence)
                        maxsilence = 32;
        }