From 224952435591734d8308fd2b612d51c030416e53 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Mon, 13 Aug 2018 21:44:11 +0100 Subject: Add support for the IRCv3 server-time specification. Co-authored-by: Attila Molnar --- src/modules/m_chanhistory.cpp | 10 +++++- src/modules/m_ircv3_servertime.cpp | 72 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/modules/m_ircv3_servertime.cpp (limited to 'src/modules') 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 + * + * 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 . + */ + + +#include "inspircd.h" +#include "modules/ircv3.h" +#include "modules/ircv3_servertime.h" + +class ServerTimeTag : public IRCv3::ServerTime::Manager, public IRCv3::CapTag +{ + 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(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) -- cgit v1.2.3