diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_chanhistory.cpp | 10 | ||||
-rw-r--r-- | src/modules/m_ircv3_servertime.cpp | 72 |
2 files changed, 81 insertions, 1 deletions
diff --git a/src/modules/m_chanhistory.cpp b/src/modules/m_chanhistory.cpp index 0c3945346..57db002a8 100644 --- a/src/modules/m_chanhistory.cpp +++ b/src/modules/m_chanhistory.cpp @@ -18,6 +18,7 @@ #include "inspircd.h" +#include "modules/ircv3_servertime.h" struct HistoryItem { @@ -122,8 +123,13 @@ class ModuleChanHistory : public Module bool sendnotice; UserModeReference botmode; bool dobots; + IRCv3::ServerTime::API servertimemanager; + public: - ModuleChanHistory() : m(this), botmode(this, "bot") + ModuleChanHistory() + : m(this) + , botmode(this, "bot") + , servertimemanager(this) { } @@ -180,6 +186,8 @@ class ModuleChanHistory : public Module if (item.ts >= mintime) { ClientProtocol::Messages::Privmsg msg(ClientProtocol::Messages::Privmsg::nocopy, item.sourcemask, memb->chan, item.text); + if (servertimemanager) + servertimemanager->Set(msg, item.ts); localuser->Send(ServerInstance->GetRFCEvents().privmsg, msg); } } diff --git a/src/modules/m_ircv3_servertime.cpp b/src/modules/m_ircv3_servertime.cpp new file mode 100644 index 000000000..1c35c422b --- /dev/null +++ b/src/modules/m_ircv3_servertime.cpp @@ -0,0 +1,72 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2016 Attila Molnar <attilamolnar@hush.com> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" +#include "modules/ircv3.h" +#include "modules/ircv3_servertime.h" + +class ServerTimeTag : public IRCv3::ServerTime::Manager, public IRCv3::CapTag<ServerTimeTag> +{ + time_t lasttime; + std::string lasttimestring; + + void RefreshTimeString() + { + const time_t currtime = ServerInstance->Time(); + if (currtime != lasttime) + { + lasttime = currtime; + // Cache the string so it's not recreated every time a message is sent + lasttimestring = IRCv3::ServerTime::FormatTime(currtime); + } + } + + public: + ServerTimeTag(Module* mod) + : IRCv3::ServerTime::Manager(mod) + , IRCv3::CapTag<ServerTimeTag>(mod, "server-time", "time") + , lasttime(0) + { + tagprov = this; + } + + const std::string* GetValue(const ClientProtocol::Message& msg) + { + RefreshTimeString(); + return &lasttimestring; + } +}; + +class ModuleIRCv3ServerTime : public Module +{ + ServerTimeTag tag; + + public: + ModuleIRCv3ServerTime() + : tag(this) + { + } + + Version GetVersion() CXX11_OVERRIDE + { + return Version("Provides the server-time IRCv3 extension", VF_VENDOR); + } +}; + +MODULE_INIT(ModuleIRCv3ServerTime) |