X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_ircv3_ctctags.cpp;h=2856579870839a2441b0f2a0b9e9b466ce932ad3;hb=3151d60c1ecc9462e4c335282ee6c31672f45111;hp=6123d3b31ebe320d8e2bf83d89887422a1517408;hpb=9ebda853f5bc470858501897442610699a5fd5de;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_ircv3_ctctags.cpp b/src/modules/m_ircv3_ctctags.cpp index 6123d3b31..285657987 100644 --- a/src/modules/m_ircv3_ctctags.cpp +++ b/src/modules/m_ircv3_ctctags.cpp @@ -109,7 +109,10 @@ class CommandTagMsg : 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); @@ -261,6 +264,7 @@ class C2CTags : public ClientProtocol::MessageTagProvider Cap::Capability& cap; public: + bool allowclientonlytags; C2CTags(Module* Creator, Cap::Capability& Cap) : ClientProtocol::MessageTagProvider(Creator) , cap(Cap) @@ -271,7 +275,7 @@ class C2CTags : public ClientProtocol::MessageTagProvider { // A client-only tag is prefixed with a plus sign (+) and otherwise conforms // to the format specified in IRCv3.2 tags. - if (tagname[0] != '+' || tagname.length() < 2) + if (tagname[0] != '+' || tagname.length() < 2 || !allowclientonlytags) return MOD_RES_PASSTHRU; // If the user is local then we check whether they have the message-tags cap @@ -323,6 +327,17 @@ class ModuleIRCv3CTCTags { } + void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE + { + c2ctags.allowclientonlytags = ServerInstance->Config->ConfValue("ctctags")->getBool("allowclientonlytags", true); + } + + void On005Numeric(std::map& tokens) CXX11_OVERRIDE + { + if (!c2ctags.allowclientonlytags) + tokens["CLIENTTAGDENY"] = "*"; + } + ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE { return CopyClientTags(details.tags_in, details.tags_out); @@ -336,7 +351,7 @@ class ModuleIRCv3CTCTags 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; } @@ -344,7 +359,7 @@ class ModuleIRCv3CTCTags 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", *noextmsgmode)); return MOD_RES_DENY; } @@ -352,7 +367,7 @@ class ModuleIRCv3CTCTags { // 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; } } @@ -362,7 +377,7 @@ class ModuleIRCv3CTCTags Version GetVersion() CXX11_OVERRIDE { - return Version("Provides the message-tags IRCv3 extension", VF_VENDOR | VF_COMMON); + return Version("Provides the IRCv3 message-tags client capability.", VF_VENDOR | VF_COMMON); } };