X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_silence.cpp;h=dc703f9b01ead5462ec20bd8b7a16472bcdf731a;hb=318d50bc868fb64a7d5e1edeff3ec23e38925638;hp=cb065d2fc3cf3e29be2ee700f0e7aa252837c119;hpb=c6a508a3da977041909f18f77d6e8fea942512cf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_silence.cpp b/src/modules/m_silence.cpp index cb065d2fc..dc703f9b0 100644 --- a/src/modules/m_silence.cpp +++ b/src/modules/m_silence.cpp @@ -24,7 +24,7 @@ #include "inspircd.h" /* Improved drop-in replacement for the /SILENCE command - * syntax: /SILENCE [+|-] as in + * syntax: /SILENCE [(+|-) [p|c|i|n|t|a|x]] as in [privatemessages|channelmessages|invites|privatenotices|channelnotices|all|exclude] * * example that blocks all except private messages * /SILENCE +*!*@* a @@ -57,17 +57,28 @@ static int SILENCE_CNOTICE = 0x0010; /* t channel notices */ static int SILENCE_ALL = 0x0020; /* a all, (pcint) */ static int SILENCE_EXCLUDE = 0x0040; /* x exclude this pattern */ +enum +{ + // From ircu? + RPL_SILELIST = 271, + RPL_ENDOFSILELIST = 272, + + // InspIRCd-specific. + RPL_UNSILENCED = 950, + RPL_SILENCED = 951, + ERR_NOTSILENCED = 952 +}; class CommandSVSSilence : public Command { public: CommandSVSSilence(Module* Creator) : Command(Creator,"SVSSILENCE", 2) { - syntax = " {[+|-] }"; + syntax = " (+|-) [p|c|i|n|t|a|x]"; TRANSLATE3(TR_NICK, TR_TEXT, TR_TEXT); } - CmdResult Handle (const std::vector& parameters, User *user) + CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE { /* * XXX: thought occurs to me @@ -85,13 +96,14 @@ class CommandSVSSilence : public Command if (IS_LOCAL(u)) { - ServerInstance->Parser.CallHandler("SILENCE", std::vector(parameters.begin() + 1, parameters.end()), u); + CommandBase::Params params(parameters.begin() + 1, parameters.end()); + ServerInstance->Parser.CallHandler("SILENCE", params, u); } return CMD_SUCCESS; } - RouteDescriptor GetRouting(User* user, const std::vector& parameters) + RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE { return ROUTE_OPT_UCAST(parameters[0]); } @@ -107,12 +119,12 @@ class CommandSilence : public Command , ext("silence_list", ExtensionItem::EXT_USER, Creator) { allow_empty_last_param = false; - syntax = "{[+|-] }"; + syntax = "[(+|-) [p|c|i|n|t|a|x]]"; } - CmdResult Handle (const std::vector& parameters, User *user) + CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE { - if (!parameters.size()) + if (parameters.empty()) { // no parameters, show the current silence list. silencelist* sl = ext.get(user); @@ -122,14 +134,14 @@ class CommandSilence : public Command for (silencelist::const_iterator c = sl->begin(); c != sl->end(); c++) { std::string decomppattern = DecompPattern(c->second); - user->WriteNumeric(271, user->nick, c->first, decomppattern); + user->WriteNumeric(RPL_SILELIST, user->nick, c->first, decomppattern); } } - user->WriteNumeric(272, "End of Silence List"); + user->WriteNumeric(RPL_ENDOFSILELIST, "End of Silence List"); return CMD_SUCCESS; } - else if (parameters.size() > 0) + else { // one or more parameters, add or delete entry from the list (only the first parameter is used) std::string mask(parameters[0], 1); @@ -171,7 +183,7 @@ class CommandSilence : public Command if ((irc::equals(listitem, mask)) && (i->second == pattern)) { sl->erase(i); - user->WriteNumeric(950, user->nick, InspIRCd::Format("Removed %s %s from silence list", mask.c_str(), decomppattern.c_str())); + user->WriteNumeric(RPL_UNSILENCED, user->nick, InspIRCd::Format("Removed %s %s from silence list", mask.c_str(), decomppattern.c_str())); if (!sl->size()) { ext.unset(user); @@ -180,7 +192,7 @@ class CommandSilence : public Command } } } - user->WriteNumeric(952, user->nick, InspIRCd::Format("%s %s does not exist on your silence list", mask.c_str(), decomppattern.c_str())); + user->WriteNumeric(ERR_NOTSILENCED, user->nick, InspIRCd::Format("%s %s does not exist on your silence list", mask.c_str(), decomppattern.c_str())); } else if (action == '+') { @@ -193,7 +205,7 @@ class CommandSilence : public Command } if (sl->size() > maxsilence) { - user->WriteNumeric(952, user->nick, "Your silence list is full"); + user->WriteNumeric(ERR_NOTSILENCED, user->nick, "Your silence list is full"); return CMD_FAILURE; } @@ -203,7 +215,7 @@ class CommandSilence : public Command const std::string& listitem = n->first; if ((irc::equals(listitem, mask)) && (n->second == pattern)) { - user->WriteNumeric(952, user->nick, InspIRCd::Format("%s %s is already on your silence list", mask.c_str(), decomppattern.c_str())); + user->WriteNumeric(ERR_NOTSILENCED, user->nick, InspIRCd::Format("%s %s is already on your silence list", mask.c_str(), decomppattern.c_str())); return CMD_FAILURE; } } @@ -215,7 +227,7 @@ class CommandSilence : public Command { sl->push_back(silenceset(mask,pattern)); } - user->WriteNumeric(951, user->nick, InspIRCd::Format("Added %s %s to silence list", mask.c_str(), decomppattern.c_str())); + user->WriteNumeric(RPL_SILENCED, user->nick, InspIRCd::Format("Added %s %s to silence list", mask.c_str(), decomppattern.c_str())); return CMD_SUCCESS; } } @@ -302,10 +314,7 @@ class ModuleSilence : public Module { ConfigTag* tag = ServerInstance->Config->ConfValue("silence"); - maxsilence = tag->getInt("maxentries", 32); - if (!maxsilence) - maxsilence = 32; - + maxsilence = tag->getUInt("maxentries", 32, 1); ExemptULine = tag->getBool("exemptuline", true); } @@ -332,16 +341,16 @@ class ModuleSilence : public Module } } - ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string& text, char status, CUList& exempt_list, MessageType msgtype) CXX11_OVERRIDE + ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE { - if (target_type == TYPE_USER && IS_LOCAL(((User*)dest))) + if (target.type == MessageTarget::TYPE_USER && IS_LOCAL(target.Get())) { - return MatchPattern((User*)dest, user, ((msgtype == MSG_PRIVMSG) ? SILENCE_PRIVATE : SILENCE_NOTICE)); + return MatchPattern(target.Get(), user, ((details.type == MSG_PRIVMSG) ? SILENCE_PRIVATE : SILENCE_NOTICE)); } - else if (target_type == TYPE_CHANNEL) + else if (target.type == MessageTarget::TYPE_CHANNEL) { - Channel* chan = (Channel*)dest; - BuildExemptList(msgtype, chan, user, exempt_list); + Channel* chan = target.Get(); + BuildExemptList(details.type, chan, user, details.exemptions); } return MOD_RES_PASSTHRU; }