]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_shun.cpp
Hide the server name/desc better when <options:hideserver> is set.
[user/henk/code/inspircd.git] / src / modules / m_shun.cpp
index 6be91ce671b23d1a70c193919bdcd73607b97f8c..1c64fd76c272d4bafe82f717649fef8e90babcfb 100644 (file)
@@ -5,17 +5,16 @@
  *   Copyright (C) 2018 linuxdaemon <linuxdaemon.irc@gmail.com>
  *   Copyright (C) 2017-2018 B00mX0r <b00mx0r@aureus.pw>
  *   Copyright (C) 2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
- *   Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012-2013, 2015-2016 Attila Molnar <attilamolnar@hush.com>
  *   Copyright (C) 2012, 2018-2019 Robby <robby@chatbelgie.be>
  *   Copyright (C) 2012 Jens Voss <DukePyrolator@anope.org>
  *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
- *   Copyright (C) 2009 Matt Smith <dz@inspircd.org>
  *   Copyright (C) 2009 John Brooks <special@inspircd.org>
  *   Copyright (C) 2009 Dennis Friis <peavey@inspircd.org>
  *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
  *   Copyright (C) 2008-2010 Craig Edwards <brain@inspircd.org>
- *   Copyright (C) 2008-2009 Robin Burchell <robin+git@viroteck.net>
  *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
+ *   Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
  *
  * 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
@@ -154,6 +153,7 @@ class ModuleShun : public Module, public Stats::EventListener
  private:
        CommandShun cmd;
        ShunFactory shun;
+       insp::flat_set<std::string, irc::insensitive_swo> cleanedcommands;
        insp::flat_set<std::string, irc::insensitive_swo> enabledcommands;
        bool affectopers;
        bool allowtags;
@@ -210,6 +210,11 @@ class ModuleShun : public Module, public Stats::EventListener
        {
                ConfigTag* tag = ServerInstance->Config->ConfValue("shun");
 
+               cleanedcommands.clear();
+               irc::spacesepstream cleanedcmds(tag->getString("cleanedcommands", "AWAY PART QUIT"));
+               for (std::string cleanedcmd; cleanedcmds.GetToken(cleanedcmd); )
+                       cleanedcommands.insert(cleanedcmd);
+
                enabledcommands.clear();
                irc::spacesepstream enabledcmds(tag->getString("enabledcommands", "ADMIN OPER PING PONG QUIT", 1));
                for (std::string enabledcmd; enabledcmds.GetToken(enabledcmd); )
@@ -244,18 +249,26 @@ class ModuleShun : public Module, public Stats::EventListener
                                        tag++;
                        }
                }
-               if (command == "QUIT")
-               {
-                       /* Allow QUIT but dont show any quit message */
-                       parameters.clear();
-               }
-               else if ((command == "PART") && (parameters.size() > 1))
+
+               if (cleanedcommands.count(command))
                {
-                       /* same for PART */
-                       parameters.pop_back();
+                       if (command == "AWAY" && !parameters.empty())
+                       {
+                               // Allow away but only for unsetting.
+                               parameters.clear();
+                       }
+                       else if (command == "PART" && parameters.size() > 1)
+                       {
+                               // Allow part but strip the message.
+                               parameters.pop_back();
+                       }
+                       else if (command == "QUIT" && !parameters.empty())
+                       {
+                               // Allow quit but strip the message.
+                               parameters.clear();
+                       }
                }
 
-               /* if we're here, allow the command. */
                return MOD_RES_PASSTHRU;
        }