diff options
Diffstat (limited to 'src/modules/m_delaymsg.cpp')
-rw-r--r-- | src/modules/m_delaymsg.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/modules/m_delaymsg.cpp b/src/modules/m_delaymsg.cpp index 1730663c5..1ad41cc57 100644 --- a/src/modules/m_delaymsg.cpp +++ b/src/modules/m_delaymsg.cpp @@ -25,7 +25,7 @@ class DelayMsgMode : public ParamMode<DelayMsgMode, LocalIntExt> LocalIntExt jointime; DelayMsgMode(Module* Parent) : ParamMode<DelayMsgMode, LocalIntExt>(Parent, "delaymsg", 'd') - , jointime("delaymsg", Parent) + , jointime("delaymsg", ExtensionItem::EXT_MEMBERSHIP, Parent) { levelrequired = OP_VALUE; } @@ -47,6 +47,7 @@ class DelayMsgMode : public ParamMode<DelayMsgMode, LocalIntExt> class ModuleDelayMsg : public Module { DelayMsgMode djm; + bool allownotice; public: ModuleDelayMsg() : djm(this) { @@ -55,6 +56,7 @@ class ModuleDelayMsg : public Module 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, MessageType msgtype) CXX11_OVERRIDE; + void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE; }; ModeAction DelayMsgMode::OnSet(User* source, Channel* chan, std::string& parameter) @@ -73,8 +75,8 @@ void DelayMsgMode::OnUnset(User* source, Channel* chan) /* * Clean up metadata */ - const UserMembList* names = chan->GetUsers(); - for (UserMembCIter n = names->begin(); n != names->end(); ++n) + const Channel::MemberMap& users = chan->GetUsers(); + for (Channel::MemberMap::const_iterator n = users.begin(); n != users.end(); ++n) jointime.set(n->second, 0); } @@ -93,11 +95,10 @@ 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, MessageType msgtype) { - /* Server origin */ - if ((!user) || (!IS_LOCAL(user))) + if (!IS_LOCAL(user)) return MOD_RES_PASSTHRU; - if ((target_type != TYPE_CHANNEL) || (msgtype != MSG_PRIVMSG)) + if ((target_type != TYPE_CHANNEL) || ((!allownotice) && (msgtype == MSG_NOTICE))) return MOD_RES_PASSTHRU; Channel* channel = (Channel*) dest; @@ -117,8 +118,7 @@ ModResult ModuleDelayMsg::OnUserPreMessage(User* user, void* dest, int target_ty { if (channel->GetPrefixValue(user) < VOICE_VALUE) { - user->WriteNumeric(ERR_CANNOTSENDTOCHAN, "%s :You must wait %d seconds after joining to send to channel (+d)", - channel->name.c_str(), len); + user->WriteNumeric(ERR_CANNOTSENDTOCHAN, channel->name, InspIRCd::Format("You must wait %d seconds after joining to send to channel (+d)", len)); return MOD_RES_DENY; } } @@ -130,4 +130,10 @@ ModResult ModuleDelayMsg::OnUserPreMessage(User* user, void* dest, int target_ty return MOD_RES_PASSTHRU; } +void ModuleDelayMsg::ReadConfig(ConfigStatus& status) +{ + ConfigTag* tag = ServerInstance->Config->ConfValue("delaymsg"); + allownotice = tag->getBool("allownotice", true); +} + MODULE_INIT(ModuleDelayMsg) |