From 1f6ba902a6c45d84fcaf534d429ca1084ef35911 Mon Sep 17 00:00:00 2001 From: attilamolnar Date: Sun, 1 Sep 2013 14:58:02 +0200 Subject: Convert cmd_modenotice into an optional module --- docs/conf/modules.conf.example | 5 +++ src/commands/cmd_modenotice.cpp | 55 --------------------------- src/modules/m_modenotice.cpp | 71 +++++++++++++++++++++++++++++++++++ src/modules/m_spanningtree/compat.cpp | 7 ++++ 4 files changed, 83 insertions(+), 55 deletions(-) delete mode 100644 src/commands/cmd_modenotice.cpp create mode 100644 src/modules/m_modenotice.cpp diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index d329ab522..639e3e1bd 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -1058,6 +1058,11 @@ # would likely be immediately bounced by services. # +#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# +# Modenotice module: Adds the /MODENOTICE command that allows opers to +# send notices to all users having the given user mode(s) set. +# + #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # MsSQL module: Allows other SQL modules to access MS SQL Server # through a unified API. diff --git a/src/commands/cmd_modenotice.cpp b/src/commands/cmd_modenotice.cpp deleted file mode 100644 index 852b72f6a..000000000 --- a/src/commands/cmd_modenotice.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * InspIRCd -- Internet Relay Chat Daemon - * - * Copyright (C) 2009 Daniel De Graaf - * - * 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 . - */ - - -#include "inspircd.h" - -class CommandModeNotice : public Command -{ - public: - CommandModeNotice(Module* parent) : Command(parent,"MODENOTICE",2,2) - { - syntax = " "; - flags_needed = 'o'; - } - - CmdResult Handle(const std::vector& parameters, User *src) - { - int mlen = parameters[0].length(); - for (LocalUserList::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) - { - User* user = *i; - for (int n = 0; n < mlen; n++) - { - if (!user->IsModeSet(parameters[0][n])) - goto next_user; - } - user->Write(":%s NOTICE %s :*** From %s: %s", ServerInstance->Config->ServerName.c_str(), - user->nick.c_str(), src->nick.c_str(), parameters[1].c_str()); -next_user: ; - } - return CMD_SUCCESS; - } - - RouteDescriptor GetRouting(User* user, const std::vector& parameters) - { - return ROUTE_BROADCAST; - } -}; - -COMMAND_INIT(CommandModeNotice) diff --git a/src/modules/m_modenotice.cpp b/src/modules/m_modenotice.cpp new file mode 100644 index 000000000..8998ea8b1 --- /dev/null +++ b/src/modules/m_modenotice.cpp @@ -0,0 +1,71 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009 Daniel De Graaf + * + * 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 . + */ + + +#include "inspircd.h" + +class CommandModeNotice : public Command +{ + public: + CommandModeNotice(Module* parent) : Command(parent,"MODENOTICE",2,2) + { + syntax = " "; + flags_needed = 'o'; + } + + CmdResult Handle(const std::vector& parameters, User *src) + { + int mlen = parameters[0].length(); + for (LocalUserList::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) + { + User* user = *i; + for (int n = 0; n < mlen; n++) + { + if (!user->IsModeSet(parameters[0][n])) + goto next_user; + } + user->Write(":%s NOTICE %s :*** From %s: %s", ServerInstance->Config->ServerName.c_str(), + user->nick.c_str(), src->nick.c_str(), parameters[1].c_str()); +next_user: ; + } + return CMD_SUCCESS; + } + + RouteDescriptor GetRouting(User* user, const std::vector& parameters) + { + return ROUTE_OPT_BCAST; + } +}; + +class ModuleModeNotice : public Module +{ + CommandModeNotice cmd; + + public: + ModuleModeNotice() + : cmd(this) + { + } + + Version GetVersion() CXX11_OVERRIDE + { + return Version("Provides the /MODENOTICE command", VF_VENDOR); + } +}; + +MODULE_INIT(ModuleModeNotice) diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp index 02e11c849..f3d6ac66a 100644 --- a/src/modules/m_spanningtree/compat.cpp +++ b/src/modules/m_spanningtree/compat.cpp @@ -286,6 +286,13 @@ bool TreeSocket::PreProcessOldProtocolMessage(User*& who, std::string& cmd, std: params.insert(params.begin()+2, ConvToStr(ServerInstance->Time())); } + else if (cmd == "MODENOTICE") + { + // MODENOTICE is always supported by 2.0 but it's optional in 2.2. + params.insert(params.begin(), "*"); + params.insert(params.begin()+1, cmd); + cmd = "ENCAP"; + } return true; // Passthru } -- cgit v1.2.3