X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcoremods%2Fcore_message.cpp;h=26573c8bf9262b07fb8c78ac83a087bb6766b6c4;hb=c71361e8e4f22cb4f72881399bce2832eb080b0e;hp=1093aad678fa06c77b97117aaba3f7c7673a3a06;hpb=9a0046a709e1fe9236d54838e2de530813972400;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_message.cpp b/src/coremods/core_message.cpp index 1093aad67..26573c8bf 100644 --- a/src/coremods/core_message.cpp +++ b/src/coremods/core_message.cpp @@ -1,7 +1,7 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2017-2019 Sadie Powell + * Copyright (C) 2017-2020 Sadie Powell * Copyright (C) 2013, 2017-2018 Attila Molnar * Copyright (C) 2012, 2019 Robby * Copyright (C) 2009 Daniel De Graaf @@ -174,7 +174,10 @@ class CommandMessage : public Command // If the source isn't allowed to mass message users then reject // the attempt to mass-message users. if (!source->HasPrivPermission("users/mass-message")) + { + source->WriteNumeric(ERR_NOPRIVILEGES, "Permission Denied - You do not have the required operator privileges"); return CMD_FAILURE; + } // Extract the server glob match from the target parameter. std::string servername(parameters[0], 1); @@ -247,21 +250,21 @@ class CommandMessage : public Command return CMD_FAILURE; } - // If the target is away then inform the user. - if (target->IsAway() && msgtype == MSG_PRIVMSG) - source->WriteNumeric(RPL_AWAY, target->nick, target->awaymsg); - // Fire the pre-message events. MessageTarget msgtarget(target); MessageDetailsImpl msgdetails(msgtype, parameters[1], parameters.GetTags()); if (!FirePreEvents(source, msgtarget, msgdetails)) return CMD_FAILURE; + // If the target is away then inform the user. + if (target->IsAway() && msgdetails.type == MSG_PRIVMSG) + source->WriteNumeric(RPL_AWAY, target->nick, target->awaymsg); + LocalUser* const localtarget = IS_LOCAL(target); if (localtarget) { // Send to the target if they are a local user. - ClientProtocol::Messages::Privmsg privmsg(ClientProtocol::Messages::Privmsg::nocopy, source, localtarget->nick, msgdetails.text, msgtype); + ClientProtocol::Messages::Privmsg privmsg(ClientProtocol::Messages::Privmsg::nocopy, source, localtarget->nick, msgdetails.text, msgdetails.type); privmsg.AddTags(msgdetails.tags_out); privmsg.SetSideEffect(true); localtarget->Send(ServerInstance->GetRFCEvents().privmsg, privmsg); @@ -408,7 +411,7 @@ class ModuleCoreMessage : public Module if (chan->IsModeSet(noextmsgmode) && !chan->HasUser(user)) { // The noextmsg mode is set and the user is not in the channel. - user->WriteNumeric(ERR_CANNOTSENDTOCHAN, chan->name, "Cannot send to channel (no external messages)"); + user->WriteNumeric(Numerics::CannotSendTo(chan, "external messages", *noextmsgmode)); return MOD_RES_DENY; } @@ -416,7 +419,7 @@ class ModuleCoreMessage : public Module if (no_chan_priv && chan->IsModeSet(moderatedmode)) { // The moderated mode is set and the user has no status rank. - user->WriteNumeric(ERR_CANNOTSENDTOCHAN, chan->name, "Cannot send to channel (+m is set)"); + user->WriteNumeric(Numerics::CannotSendTo(chan, "messages", *moderatedmode)); return MOD_RES_DENY; } @@ -424,7 +427,7 @@ class ModuleCoreMessage : public Module { // The user is banned in the channel and restrictbannedusers is enabled. if (ServerInstance->Config->RestrictBannedUsers == ServerConfig::BUT_RESTRICT_NOTIFY) - user->WriteNumeric(ERR_CANNOTSENDTOCHAN, chan->name, "Cannot send to channel (you're banned)"); + user->WriteNumeric(Numerics::CannotSendTo(chan, "You cannot send messages to this channel whilst banned.")); return MOD_RES_DENY; }