]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_delaymsg.cpp
Merge pull request #971 from SaberUK/master+numeric-xline
[user/henk/code/inspircd.git] / src / modules / m_delaymsg.cpp
index e782b807ac1bb02f528c7059af941023af9cc6f6..f64297e15b8c678ce29d0969b8583400175e2ebf 100644 (file)
@@ -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)
@@ -74,7 +76,7 @@ void DelayMsgMode::OnUnset(User* source, Channel* chan)
         * Clean up metadata
         */
        const Channel::MemberMap& users = chan->GetUsers();
-       for (UserMembCIter n = users.begin(); n != users.end(); ++n)
+       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;
@@ -130,4 +131,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)