]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_silence.cpp
m_spanningtree Call the collision handler with the proper parameter (client ip instea...
[user/henk/code/inspircd.git] / src / modules / m_silence.cpp
index 3b07095398279cc39fbeef572087909ac2827c2b..089d599316dd277bb75dc6a437d271fe0905e787 100644 (file)
@@ -1,16 +1,26 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
  *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2005-2007 Craig Edwards <craigedwards@brainbox.cc>
+ *   Copyright (C) 2006 John Brooks <john.brooks@dereferenced.net>
  *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
+ * This file is part of InspIRCd.  InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
  *
- * ---------------------------------------------------
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+
 #include "inspircd.h"
 
 /* $ModDesc: Provides support for the /SILENCE command */
@@ -53,10 +63,10 @@ static int SILENCE_EXCLUDE  = 0x0040; /* x  exclude this pattern  */
 class CommandSVSSilence : public Command
 {
  public:
-       CommandSVSSilence(InspIRCd* Instance, Module* Creator) : Command(Instance, Creator,"SVSSILENCE", 0, 2)
+       CommandSVSSilence(Module* Creator) : Command(Creator,"SVSSILENCE", 2)
        {
                syntax = "<target> {[+|-]<mask> <p|c|i|n|t|a|x>}";
-               TRANSLATE3(TR_NICK, TR_TEXT, TR_END); /* we watch for a nick. not a UID. */
+               TRANSLATE4(TR_NICK, TR_TEXT, TR_TEXT, TR_END); /* we watch for a nick. not a UID. */
        }
 
        CmdResult Handle (const std::vector<std::string>& parameters, User *user)
@@ -85,7 +95,10 @@ class CommandSVSSilence : public Command
 
        RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
        {
-               return ROUTE_BROADCAST;
+               User* target = ServerInstance->FindNick(parameters[0]);
+               if (target)
+                       return ROUTE_OPT_UCAST(target->server);
+               return ROUTE_LOCALONLY;
        }
 };
 
@@ -94,7 +107,7 @@ class CommandSilence : public Command
        unsigned int& maxsilence;
  public:
        SimpleExtItem<silencelist> ext;
-       CommandSilence (InspIRCd* Instance, Module* Creator, unsigned int &max) : Command(Instance, Creator, "SILENCE", 0, 0),
+       CommandSilence(Module* Creator, unsigned int &max) : Command(Creator, "SILENCE", 0),
                maxsilence(max), ext("silence_list", Creator)
        {
                syntax = "{[+|-]<mask> <p|c|i|n|t|a|x>}";
@@ -132,6 +145,12 @@ class CommandSilence : public Command
                                pattern = CompilePattern(parameters[1].c_str());
                        }
 
+                       if (pattern == 0)
+                       {
+                               user->WriteServ("NOTICE %s :Bad SILENCE pattern",user->nick.c_str());
+                               return CMD_INVALID;
+                       }
+
                        if (!mask.length())
                        {
                                // 'SILENCE +' or 'SILENCE -', assume *!*@*
@@ -244,21 +263,24 @@ class CommandSilence : public Command
        std::string DecompPattern (const int pattern)
        {
                std::string out;
-               if ((pattern & SILENCE_PRIVATE) > 0)
+               if (pattern & SILENCE_PRIVATE)
                        out += ",privatemessages";
-               if ((pattern & SILENCE_CHANNEL) > 0)
+               if (pattern & SILENCE_CHANNEL)
                        out += ",channelmessages";
-               if ((pattern & SILENCE_INVITE) > 0)
+               if (pattern & SILENCE_INVITE)
                        out += ",invites";
-               if ((pattern & SILENCE_NOTICE) > 0)
+               if (pattern & SILENCE_NOTICE)
                        out += ",privatenotices";
-               if ((pattern & SILENCE_CNOTICE) > 0)
+               if (pattern & SILENCE_CNOTICE)
                        out += ",channelnotices";
-               if ((pattern & SILENCE_ALL) > 0)
+               if (pattern & SILENCE_ALL)
                        out = ",all";
-               if ((pattern & SILENCE_EXCLUDE) > 0)
+               if (pattern & SILENCE_EXCLUDE)
                        out += ",exclude";
-               return "<" + out.substr(1) + ">";
+               if (out.length())
+                       return "<" + out.substr(1) + ">";
+               else
+                       return "<none>";
        }
 
 };
@@ -270,20 +292,21 @@ class ModuleSilence : public Module
        CommandSVSSilence cmdsvssilence;
  public:
 
-       ModuleSilence(InspIRCd* Me)
-               : Module(Me), maxsilence(32), cmdsilence(Me, this, maxsilence), cmdsvssilence(Me, this)
+       ModuleSilence()
+               : maxsilence(32), cmdsilence(this, maxsilence), cmdsvssilence(this)
        {
                OnRehash(NULL);
                ServerInstance->AddCommand(&cmdsilence);
                ServerInstance->AddCommand(&cmdsvssilence);
+               ServerInstance->Extensions.Register(&cmdsilence.ext);
 
-               Implementation eventlist[] = { I_OnRehash, I_OnBuildExemptList, I_On005Numeric, I_OnUserPreNotice, I_OnUserPreMessage, I_OnUserPreInvite };
-               ServerInstance->Modules->Attach(eventlist, this, 6);
+               Implementation eventlist[] = { I_OnRehash, I_On005Numeric, I_OnUserPreNotice, I_OnUserPreMessage, I_OnUserPreInvite };
+               ServerInstance->Modules->Attach(eventlist, this, 5);
        }
 
        void OnRehash(User* user)
        {
-               ConfigReader Conf(ServerInstance);
+               ConfigReader Conf;
                maxsilence = Conf.ReadInteger("silence", "maxentries", 0, true);
                if (!maxsilence)
                        maxsilence = 32;
@@ -304,7 +327,7 @@ class ModuleSilence : public Module
                {
                        if (IS_LOCAL(i->first))
                        {
-                               if (MatchPattern(i->first, sender, public_silence) == MOD_RES_ALLOW)
+                               if (MatchPattern(i->first, sender, public_silence) == MOD_RES_DENY)
                                {
                                        exempt_list.insert(i->first);
                                }
@@ -368,7 +391,7 @@ class ModuleSilence : public Module
 
        Version GetVersion()
        {
-               return Version("$Id$", VF_COMMON | VF_VENDOR, API_VERSION);
+               return Version("Provides support for the /SILENCE command", VF_OPTCOMMON | VF_VENDOR);
        }
 };