X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_ircv3_ctctags.cpp;h=e46646703622a700d090ed27837e5301f2b263ee;hb=43e31bba5429849fdebeddc65f7e6f267211181f;hp=6052051b9a23787f91f3e761522f92885c92af0f;hpb=87b1461e2a4710a38b32186c2582da9fe9bb3804;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_ircv3_ctctags.cpp b/src/modules/m_ircv3_ctctags.cpp index 6052051b9..e46646703 100644 --- a/src/modules/m_ircv3_ctctags.cpp +++ b/src/modules/m_ircv3_ctctags.cpp @@ -26,8 +26,6 @@ class CommandTagMsg : public Command { private: Cap::Capability& cap; - ChanModeReference moderatedmode; - ChanModeReference noextmsgmode; Events::ModuleEventProvider tagevprov; ClientProtocol::EventProvider msgevprov; @@ -70,32 +68,6 @@ class CommandTagMsg : public Command return CMD_FAILURE; } - if (IS_LOCAL(source)) - { - if (chan->IsModeSet(noextmsgmode) && !chan->HasUser(source)) - { - // The noextmsg mode is set and the source is not in the channel. - source->WriteNumeric(ERR_CANNOTSENDTOCHAN, chan->name, "Cannot send to channel (no external messages)"); - return CMD_FAILURE; - } - - bool no_chan_priv = chan->GetPrefixValue(source) < VOICE_VALUE; - if (no_chan_priv && chan->IsModeSet(moderatedmode)) - { - // The moderated mode is set and the source has no status rank. - source->WriteNumeric(ERR_CANNOTSENDTOCHAN, chan->name, "Cannot send to channel (+m is set)"); - return CMD_FAILURE; - } - - if (no_chan_priv && ServerInstance->Config->RestrictBannedUsers != ServerConfig::BUT_NORMAL && chan->IsBanned(source)) - { - // The source is banned in the channel and restrictbannedusers is enabled. - if (ServerInstance->Config->RestrictBannedUsers == ServerConfig::BUT_RESTRICT_NOTIFY) - source->WriteNumeric(ERR_CANNOTSENDTOCHAN, chan->name, "Cannot send to channel (you're banned)"); - return CMD_FAILURE; - } - } - // Fire the pre-message events. MessageTarget msgtarget(chan, pm ? pm->GetPrefix() : 0); CTCTags::TagMessageDetails msgdetails(parameters.GetTags()); @@ -223,8 +195,6 @@ class CommandTagMsg : public Command CommandTagMsg(Module* Creator, Cap::Capability& Cap) : Command(Creator, "TAGMSG", 1) , cap(Cap) - , moderatedmode(Creator, "moderated") - , noextmsgmode(Creator, "noextmsg") , tagevprov(Creator, "event/tagmsg") , msgevprov(Creator, "TAGMSG") { @@ -307,6 +277,8 @@ class ModuleIRCv3CTCTags Cap::Capability cap; CommandTagMsg cmd; C2CTags c2ctags; + ChanModeReference moderatedmode; + ChanModeReference noextmsgmode; ModResult CopyClientTags(const ClientProtocol::TagMap& tags_in, ClientProtocol::TagMap& tags_out) { @@ -325,6 +297,8 @@ class ModuleIRCv3CTCTags , cap(this, "message-tags") , cmd(this, cap) , c2ctags(this, cap) + , moderatedmode(this, "moderated") + , noextmsgmode(this, "noextmsg") { } @@ -335,12 +309,39 @@ class ModuleIRCv3CTCTags ModResult OnUserPreTagMessage(User* user, const MessageTarget& target, CTCTags::TagMessageDetails& details) CXX11_OVERRIDE { + if (IS_LOCAL(user) && target.type == MessageTarget::TYPE_CHANNEL) + { + Channel* chan = target.Get(); + 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)"); + return MOD_RES_DENY; + } + + bool no_chan_priv = chan->GetPrefixValue(user) < VOICE_VALUE; + 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)"); + return MOD_RES_DENY; + } + + if (no_chan_priv && ServerInstance->Config->RestrictBannedUsers != ServerConfig::BUT_NORMAL && chan->IsBanned(user)) + { + // 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)"); + return MOD_RES_DENY; + } + } + return CopyClientTags(details.tags_in, details.tags_out); } Version GetVersion() CXX11_OVERRIDE { - return Version("Provides the DRAFT message-tags IRCv3 extension", VF_VENDOR | VF_COMMON); + return Version("Provides the message-tags IRCv3 extension", VF_VENDOR | VF_COMMON); } };