// 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);
Cap::Capability& cap;
public:
+ bool allowclientonlytags;
C2CTags(Module* Creator, Cap::Capability& Cap)
: ClientProtocol::MessageTagProvider(Creator)
, cap(Cap)
{
// 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
{
}
+ void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
+ {
+ c2ctags.allowclientonlytags = ServerInstance->Config->ConfValue("ctctags")->getBool("allowclientonlytags", true);
+ }
+
+ void On005Numeric(std::map<std::string, std::string>& 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);
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;
}
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;
}
{
// 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;
}
}
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);
}
};