diff options
author | Peter Powell <petpow@saberuk.com> | 2018-04-16 17:02:42 +0100 |
---|---|---|
committer | Peter Powell <petpow@saberuk.com> | 2018-04-16 17:02:42 +0100 |
commit | b86d7db056a778253f4a971a8be92ffffe0f3f08 (patch) | |
tree | 4413a96d9b5e83e52ba1695b758c69b4caee390e /src | |
parent | 9b8dc77585ada328a306bc12bb9827f083e7cf93 (diff) |
Call OnUserMessageBlocked when a PRIVMSG or a NOTICE is blocked.
This is necessary to allow m_ircv3_echomessage to pretend that a
message was echoed successfully. This is useful as it doesn't let
spammers know that their message was blocked.
Diffstat (limited to 'src')
-rw-r--r-- | src/coremods/core_privmsg.cpp | 9 | ||||
-rw-r--r-- | src/modules.cpp | 1 | ||||
-rw-r--r-- | src/modules/m_ircv3_echomessage.cpp | 7 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/coremods/core_privmsg.cpp b/src/coremods/core_privmsg.cpp index f1461df5f..6c5b7557e 100644 --- a/src/coremods/core_privmsg.cpp +++ b/src/coremods/core_privmsg.cpp @@ -99,7 +99,10 @@ CmdResult MessageCommandBase::HandleMessage(const std::vector<std::string>& para ModResult MOD_RESULT; FIRST_MOD_RESULT(OnUserPreMessage, MOD_RESULT, (user, msgtarget, msgdetails)); if (MOD_RESULT == MOD_RES_DENY) + { + FOREACH_MOD(OnUserMessageBlocked, (user, msgtarget, msgdetails)); return CMD_FAILURE; + } FOREACH_MOD(OnUserMessage, (user, msgtarget, msgdetails)); if (InspIRCd::Match(ServerInstance->Config->ServerName, servername, NULL)) @@ -155,7 +158,10 @@ CmdResult MessageCommandBase::HandleMessage(const std::vector<std::string>& para ModResult MOD_RESULT; FIRST_MOD_RESULT(OnUserPreMessage, MOD_RESULT, (user, msgtarget, msgdetails)); if (MOD_RESULT == MOD_RES_DENY) + { + FOREACH_MOD(OnUserMessageBlocked, (user, msgtarget, msgdetails)); return CMD_FAILURE; + } /* Check again, a module may have zapped the input string */ if (msgdetails.text.empty()) @@ -231,7 +237,10 @@ CmdResult MessageCommandBase::HandleMessage(const std::vector<std::string>& para ModResult MOD_RESULT; FIRST_MOD_RESULT(OnUserPreMessage, MOD_RESULT, (user, msgtarget, msgdetails)); if (MOD_RESULT == MOD_RES_DENY) + { + FOREACH_MOD(OnUserMessageBlocked, (user, msgtarget, msgdetails)); return CMD_FAILURE; + } FOREACH_MOD(OnUserMessage, (user, msgtarget, msgdetails)); diff --git a/src/modules.cpp b/src/modules.cpp index 5f8439c44..9359cac37 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -113,6 +113,7 @@ ModResult Module::OnPreTopicChange(User*, Channel*, const std::string&) { Detach ModResult Module::OnPassCompare(Extensible* ex, const std::string &password, const std::string &input, const std::string& hashtype) { DetachEvent(I_OnPassCompare); return MOD_RES_PASSTHRU; } void Module::OnPostConnect(User*) { DetachEvent(I_OnPostConnect); } void Module::OnUserPostMessage(User*, const MessageTarget&, const MessageDetails&) { DetachEvent(I_OnUserPostMessage); } +void Module::OnUserMessageBlocked(User*, const MessageTarget&, const MessageDetails&) { DetachEvent(I_OnUserMessageBlocked); } void Module::OnUserInvite(User*, User*, Channel*, time_t, unsigned int, CUList&) { DetachEvent(I_OnUserInvite); } void Module::OnPostTopicChange(User*, Channel*, const std::string&) { DetachEvent(I_OnPostTopicChange); } void Module::OnDecodeMetaData(Extensible*, const std::string&, const std::string&) { DetachEvent(I_OnDecodeMetaData); } diff --git a/src/modules/m_ircv3_echomessage.cpp b/src/modules/m_ircv3_echomessage.cpp index c2818700f..056b02194 100644 --- a/src/modules/m_ircv3_echomessage.cpp +++ b/src/modules/m_ircv3_echomessage.cpp @@ -61,6 +61,13 @@ class ModuleIRCv3EchoMessage : public Module user->WriteFrom(user, msg); } + void OnUserMessageBlocked(User* user, const MessageTarget& target, const MessageDetails& details) CXX11_OVERRIDE + { + // Prevent spammers from knowing that their spam was blocked. + if (details.echooriginal) + OnUserPostMessage(user, target, details); + } + Version GetVersion() CXX11_OVERRIDE { return Version("Provides the echo-message IRCv3.2 extension", VF_VENDOR); |