]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_chanhistory.cpp
Only show UHNAMES and NAMESX in 005 if the cap module is loaded.
[user/henk/code/inspircd.git] / src / modules / m_chanhistory.cpp
index 47e27172c4bb1c69a72feef35dacb72c7e84352c..7db851ee37316d61a6cc315b9de2394f9583495c 100644 (file)
@@ -39,11 +39,14 @@ struct HistoryItem
 struct HistoryList
 {
        std::deque<HistoryItem> lines;
-       unsigned int maxlen, maxtime;
-       std::string param;
+       unsigned int maxlen;
+       unsigned int maxtime;
 
-       HistoryList(unsigned int len, unsigned int time, const std::string& oparam)
-               : maxlen(len), maxtime(time), param(oparam) { }
+       HistoryList(unsigned int len, unsigned int time)
+               : maxlen(len)
+               , maxtime(time)
+       {
+       }
 };
 
 class HistoryMode : public ParamMode<HistoryMode, SimpleExtItem<HistoryList> >
@@ -53,6 +56,7 @@ class HistoryMode : public ParamMode<HistoryMode, SimpleExtItem<HistoryList> >
        HistoryMode(Module* Creator)
                : ParamMode<HistoryMode, SimpleExtItem<HistoryList> >(Creator, "history", 'H')
        {
+               syntax = "<max-messages>:<max-duration>";
        }
 
        ModeAction OnSet(User* source, Channel* channel, std::string& parameter) CXX11_OVERRIDE
@@ -72,8 +76,8 @@ class HistoryMode : public ParamMode<HistoryMode, SimpleExtItem<HistoryList> >
                }
 
                unsigned int len = ConvToNum<unsigned int>(parameter.substr(0, colon));
-               unsigned int time = InspIRCd::Duration(duration);
-               if (len == 0 || (len > maxlines && IS_LOCAL(source)))
+               unsigned long time;
+               if (!InspIRCd::Duration(duration, time) || len == 0 || (len > maxlines && IS_LOCAL(source)))
                {
                        source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter));
                        return MODEACTION_DENY;
@@ -90,18 +94,19 @@ class HistoryMode : public ParamMode<HistoryMode, SimpleExtItem<HistoryList> >
 
                        history->maxlen = len;
                        history->maxtime = time;
-                       history->param = parameter;
                }
                else
                {
-                       ext.set(channel, new HistoryList(len, time, parameter));
+                       ext.set(channel, new HistoryList(len, time));
                }
                return MODEACTION_ALLOW;
        }
 
        void SerializeParam(Channel* chan, const HistoryList* history, std::string& out)
        {
-               out.append(history->param);
+               out.append(ConvToStr(history->maxlen));
+               out.append(":");
+               out.append(InspIRCd::DurationString(history->maxtime));
        }
 };
 
@@ -207,7 +212,7 @@ class ModuleChanHistory
 
        Version GetVersion() CXX11_OVERRIDE
        {
-               return Version("Provides channel history replayed on join", VF_VENDOR);
+               return Version("Provides channel mode +H, allows for the channel message history to be replayed on join", VF_VENDOR);
        }
 };