X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_delaymsg.cpp;h=752112a56d2bb5fc2706fe074805fb5336a5d870;hb=4ab1c43c1eee708fc50a4808f714a731891b75e8;hp=6ef955a9f1526d9830e15e5c07047195a455a97c;hpb=fcacc8e0306382bc3f938073092c3729d77e2b41;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_delaymsg.cpp b/src/modules/m_delaymsg.cpp index 6ef955a9f..752112a56 100644 --- a/src/modules/m_delaymsg.cpp +++ b/src/modules/m_delaymsg.cpp @@ -18,14 +18,11 @@ #include "inspircd.h" -#include /* $ModDesc: Provides channelmode +d , to deny messages to a channel until seconds. */ class DelayMsgMode : public ModeHandler { - private: - CUList empty; public: LocalIntExt jointime; DelayMsgMode(Module* Parent) : ModeHandler(Parent, "delaymsg", 'd', PARAM_SETONLY, MODETYPE_CHANNEL) @@ -44,27 +41,31 @@ class DelayMsgMode : public ModeHandler class ModuleDelayMsg : public Module { - private: DelayMsgMode djm; public: ModuleDelayMsg() : djm(this) { - if (!ServerInstance->Modes->AddMode(&djm)) - throw ModuleException("Could not add new modes!"); - ServerInstance->Extensions.Register(&djm.jointime); + } + + void init() CXX11_OVERRIDE + { + ServerInstance->Modules->AddService(djm); + ServerInstance->Modules->AddService(djm.jointime); Implementation eventlist[] = { I_OnUserJoin, I_OnUserPreMessage}; - ServerInstance->Modules->Attach(eventlist, this, 2); + ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); } - ~ModuleDelayMsg(); - Version GetVersion(); - void OnUserJoin(Membership* memb, bool sync, bool created, CUList&); - ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list); + Version GetVersion() CXX11_OVERRIDE; + void OnUserJoin(Membership* memb, bool sync, bool created, CUList&) CXX11_OVERRIDE; + ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list) CXX11_OVERRIDE; }; ModeAction DelayMsgMode::OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding) { if (adding) { + if ((channel->IsModeSet('d')) && (channel->GetModeParameter('d') == parameter)) + return MODEACTION_DENY; + /* Setting a new limit, sanity check */ long limit = atoi(parameter.c_str()); @@ -76,6 +77,9 @@ ModeAction DelayMsgMode::OnModeChange(User* source, User* dest, Channel* channel } else { + if (!channel->IsModeSet('d')) + return MODEACTION_DENY; + /* * Clean up metadata */ @@ -87,10 +91,6 @@ ModeAction DelayMsgMode::OnModeChange(User* source, User* dest, Channel* channel return MODEACTION_ALLOW; } -ModuleDelayMsg::~ModuleDelayMsg() -{ -} - Version ModuleDelayMsg::GetVersion() { return Version("Provides channelmode +d , to deny messages to a channel until seconds.", VF_VENDOR); @@ -98,7 +98,7 @@ Version ModuleDelayMsg::GetVersion() void ModuleDelayMsg::OnUserJoin(Membership* memb, bool sync, bool created, CUList&) { - if (memb->chan->IsModeSet('d')) + if ((IS_LOCAL(memb->user)) && (memb->chan->IsModeSet('d'))) { djm.jointime.set(memb, ServerInstance->Time()); } @@ -107,7 +107,7 @@ void ModuleDelayMsg::OnUserJoin(Membership* memb, bool sync, bool created, CULis ModResult ModuleDelayMsg::OnUserPreMessage(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list) { /* Server origin */ - if (!user) + if ((!user) || (!IS_LOCAL(user))) return MOD_RES_PASSTHRU; if (target_type != TYPE_CHANNEL) @@ -118,7 +118,7 @@ ModResult ModuleDelayMsg::OnUserPreMessage(User* user, void* dest, int target_ty if (!memb) return MOD_RES_PASSTHRU; - + time_t ts = djm.jointime.get(memb); if (ts == 0) @@ -144,4 +144,3 @@ ModResult ModuleDelayMsg::OnUserPreMessage(User* user, void* dest, int target_ty } MODULE_INIT(ModuleDelayMsg) -