X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_chanhistory.cpp;h=540fa29087cbb548307826967d6429e5ae7c1ee7;hb=e59cb85871f75b7603c63c6cd274d57536cf6794;hp=fe4bd94777374897551940fef5c0b058e43d4b0b;hpb=584d4569031d9e5d699d72eb3e09307fc84ea2f8;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_chanhistory.cpp b/src/modules/m_chanhistory.cpp index fe4bd9477..540fa2908 100644 --- a/src/modules/m_chanhistory.cpp +++ b/src/modules/m_chanhistory.cpp @@ -20,6 +20,7 @@ #include "inspircd.h" #include "modules/ircv3_servertime.h" #include "modules/ircv3_batch.h" +#include "modules/server.h" struct HistoryItem { @@ -47,20 +48,6 @@ struct HistoryList class HistoryMode : public ParamMode > { - bool IsValidDuration(const std::string& duration) - { - for (std::string::const_iterator i = duration.begin(); i != duration.end(); ++i) - { - unsigned char c = *i; - if (((c >= '0') && (c <= '9')) || (c == 's') || (c == 'S')) - continue; - - if (duration_multi[c] == 1) - return false; - } - return true; - } - public: unsigned int maxlines; HistoryMode(Module* Creator) @@ -78,15 +65,15 @@ class HistoryMode : public ParamMode > } std::string duration(parameter, colon+1); - if ((IS_LOCAL(source)) && ((duration.length() > 10) || (!IsValidDuration(duration)))) + if ((IS_LOCAL(source)) && ((duration.length() > 10) || (!InspIRCd::IsValidDuration(duration)))) { source->WriteNumeric(Numerics::InvalidModeParameter(channel, this, parameter)); return MODEACTION_DENY; } - unsigned int len = ConvToInt(parameter.substr(0, colon)); - unsigned int time = InspIRCd::Duration(duration); - if (len == 0 || (len > maxlines && IS_LOCAL(source))) + unsigned int len = ConvToNum(parameter.substr(0, colon)); + 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; @@ -118,7 +105,9 @@ class HistoryMode : public ParamMode > } }; -class ModuleChanHistory : public Module +class ModuleChanHistory + : public Module + , public ServerEventListener { HistoryMode m; bool sendnotice; @@ -131,7 +120,8 @@ class ModuleChanHistory : public Module public: ModuleChanHistory() - : m(this) + : ServerEventListener(this) + , m(this) , botmode(this, "bot") , batchcap(this) , batchmanager(this) @@ -148,6 +138,11 @@ class ModuleChanHistory : public Module dobots = tag->getBool("bots", true); } + ModResult OnBroadcastMessage(Channel* channel, const Server* server) CXX11_OVERRIDE + { + return channel->IsModeSet(m) ? MOD_RES_ALLOW : MOD_RES_PASSTHRU; + } + void OnUserPostMessage(User* user, const MessageTarget& target, const MessageDetails& details) CXX11_OVERRIDE { if ((target.type == MessageTarget::TYPE_CHANNEL) && (target.status == 0) && (details.type == MSG_PRIVMSG)) @@ -212,7 +207,7 @@ class ModuleChanHistory : public Module 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); } };