]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_wallops.cpp
Add support for blocking tag messages with the deaf mode.
[user/henk/code/inspircd.git] / src / coremods / core_wallops.cpp
index 0210df8ee869d185be7f52e79a38a893d697f2f4..3855f319d6efcd659e213fe904408e64e72bb94d 100644 (file)
@@ -1,8 +1,13 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2018-2019 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013-2014, 2018 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
  *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- *   Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2006, 2010 Craig Edwards <brain@inspircd.org>
  *
  * 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
@@ -25,6 +30,7 @@
 class CommandWallops : public Command
 {
        SimpleUserModeHandler wallopsmode;
+       ClientProtocol::EventProvider protoevprov;
 
  public:
        /** Constructor for wallops.
@@ -32,9 +38,10 @@ class CommandWallops : public Command
        CommandWallops(Module* parent)
                : Command(parent, "WALLOPS", 1, 1)
                , wallopsmode(parent, "wallops", 'w')
+               , protoevprov(parent, name)
        {
                flags_needed = 'o';
-               syntax = "<any-text>";
+               syntax = ":<message>";
        }
 
        /** Handle command.
@@ -42,28 +49,52 @@ class CommandWallops : public Command
         * @param user The user issuing the command
         * @return A value from CmdResult to indicate command success or failure.
         */
-       CmdResult Handle(const std::vector<std::string>& parameters, User *user);
+       CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE;
 
-       RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
+       RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE
        {
                return ROUTE_BROADCAST;
        }
 };
 
-CmdResult CommandWallops::Handle (const std::vector<std::string>& parameters, User *user)
+CmdResult CommandWallops::Handle(User* user, const Params& parameters)
 {
-       std::string wallop("WALLOPS :");
-       wallop.append(parameters[0]);
+       if (parameters[0].empty())
+       {
+               user->WriteNumeric(ERR_NOTEXTTOSEND, "No text to send");
+               return CMD_FAILURE;
+       }
+
+       ClientProtocol::Message msg("WALLOPS", user);
+       msg.PushParamRef(parameters[0]);
+       ClientProtocol::Event wallopsevent(protoevprov, msg);
 
        const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers();
        for (UserManager::LocalList::const_iterator i = list.begin(); i != list.end(); ++i)
        {
-               User* t = *i;
-               if (t->IsModeSet(wallopsmode))
-                       t->WriteFrom(user, wallop);
+               LocalUser* curr = *i;
+               if (curr->IsModeSet(wallopsmode))
+                       curr->Send(wallopsevent);
        }
 
        return CMD_SUCCESS;
 }
 
-COMMAND_INIT(CommandWallops)
+class CoreModWallops : public Module
+{
+ private:
+       CommandWallops cmd;
+
+ public:
+       CoreModWallops()
+               : cmd(this)
+       {
+       }
+
+       Version GetVersion() CXX11_OVERRIDE
+       {
+               return Version("Provides the WALLOPS command", VF_CORE | VF_VENDOR);
+       }
+};
+
+MODULE_INIT(CoreModWallops)