X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_delaymsg.cpp;h=cfc06866a90996ac7991f44d66305433fffd4e46;hb=9cdf47629faeec64edc77ff0729dc55946ed753c;hp=6ef955a9f1526d9830e15e5c07047195a455a97c;hpb=553a8da754c8cd308bad2008018849714e70f9b7;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_delaymsg.cpp b/src/modules/m_delaymsg.cpp index 6ef955a9f..cfc06866a 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) @@ -49,13 +46,15 @@ class ModuleDelayMsg : public Module public: ModuleDelayMsg() : djm(this) { - if (!ServerInstance->Modes->AddMode(&djm)) - throw ModuleException("Could not add new modes!"); - ServerInstance->Extensions.Register(&djm.jointime); + } + + void init() + { + 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); @@ -65,6 +64,9 @@ ModeAction DelayMsgMode::OnModeChange(User* source, User* dest, Channel* channel { 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 +78,9 @@ ModeAction DelayMsgMode::OnModeChange(User* source, User* dest, Channel* channel } else { + if (!channel->IsModeSet('d')) + return MODEACTION_DENY; + /* * Clean up metadata */ @@ -87,10 +92,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 +99,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 +108,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 +119,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)