X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodules%2Fm_delaymsg.cpp;h=6acaa9a2f2947b7f51f7bacf92813a7120e1faf7;hb=e59cb85871f75b7603c63c6cd274d57536cf6794;hp=b39fb1d0a07a3cc58d03304d9872c5ab7fa10708;hpb=c6e40d36b42a7ebf832c3a57d2816a47ee9c9a76;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_delaymsg.cpp b/src/modules/m_delaymsg.cpp index b39fb1d0a..6acaa9a2f 100644 --- a/src/modules/m_delaymsg.cpp +++ b/src/modules/m_delaymsg.cpp @@ -18,6 +18,7 @@ #include "inspircd.h" +#include "modules/ctctags.h" class DelayMsgMode : public ParamMode { @@ -36,34 +37,42 @@ class DelayMsgMode : public ParamMode } ModeAction OnSet(User* source, Channel* chan, std::string& parameter) CXX11_OVERRIDE; - void OnUnset(User* source, Channel* chan); + void OnUnset(User* source, Channel* chan) CXX11_OVERRIDE; - void SerializeParam(Channel* chan, int n, std::string& out) + void SerializeParam(Channel* chan, intptr_t n, std::string& out) { out += ConvToStr(n); } }; -class ModuleDelayMsg : public Module +class ModuleDelayMsg + : public Module + , public CTCTags::EventListener { + private: DelayMsgMode djm; bool allownotice; + ModResult HandleMessage(User* user, const MessageTarget& target, bool notice); + public: - ModuleDelayMsg() : djm(this) + ModuleDelayMsg() + : CTCTags::EventListener(this) + , djm(this) { } Version GetVersion() CXX11_OVERRIDE; void OnUserJoin(Membership* memb, bool sync, bool created, CUList&) CXX11_OVERRIDE; ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE; + ModResult OnUserPreTagMessage(User* user, const MessageTarget& target, CTCTags::TagMessageDetails& details) CXX11_OVERRIDE; void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE; }; ModeAction DelayMsgMode::OnSet(User* source, Channel* chan, std::string& parameter) { // Setting a new limit, sanity check - unsigned int limit = ConvToInt(parameter); - if (limit == 0) + intptr_t limit = ConvToNum(parameter); + if (limit <= 0) limit = 1; ext.set(chan, limit); @@ -82,7 +91,7 @@ void DelayMsgMode::OnUnset(User* source, Channel* chan) Version ModuleDelayMsg::GetVersion() { - return Version("Provides channelmode +d , to deny messages to a channel until seconds.", VF_VENDOR); + return Version("Provides channel mode +d , to deny messages to a channel until seconds have passed", VF_VENDOR); } void ModuleDelayMsg::OnUserJoin(Membership* memb, bool sync, bool created, CUList&) @@ -94,11 +103,21 @@ void ModuleDelayMsg::OnUserJoin(Membership* memb, bool sync, bool created, CULis } ModResult ModuleDelayMsg::OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) +{ + return HandleMessage(user, target, details.type == MSG_NOTICE); +} + +ModResult ModuleDelayMsg::OnUserPreTagMessage(User* user, const MessageTarget& target, CTCTags::TagMessageDetails& details) +{ + return HandleMessage(user, target, false); +} + +ModResult ModuleDelayMsg::HandleMessage(User* user, const MessageTarget& target, bool notice) { if (!IS_LOCAL(user)) return MOD_RES_PASSTHRU; - if ((target.type != MessageTarget::TYPE_CHANNEL) || ((!allownotice) && (details.type == MSG_NOTICE))) + if ((target.type != MessageTarget::TYPE_CHANNEL) || ((!allownotice) && (notice))) return MOD_RES_PASSTHRU; Channel* channel = target.Get(); @@ -118,7 +137,7 @@ ModResult ModuleDelayMsg::OnUserPreMessage(User* user, const MessageTarget& targ { if (channel->GetPrefixValue(user) < VOICE_VALUE) { - user->WriteNumeric(ERR_CANNOTSENDTOCHAN, channel->name, InspIRCd::Format("You must wait %d seconds after joining to send to channel (+d)", len)); + user->WriteNumeric(ERR_CANNOTSENDTOCHAN, channel->name, InspIRCd::Format("You must wait %d seconds after joining to send to the channel (+d is set)", len)); return MOD_RES_DENY; } }