diff --git a/include/modules/ctctags.h b/include/modules/ctctags.h index 6433720bd..71ae9e44e 100644 --- a/include/modules/ctctags.h +++ b/include/modules/ctctags.h @@ -27,6 +27,7 @@ namespace CTCTags class EventListener; class TagMessage; class TagMessageDetails; + class TagProvider; } class CTCTags::CapReference final @@ -163,3 +164,26 @@ public: */ virtual void OnUserTagMessageBlocked(User* user, const MessageTarget& target, const TagMessageDetails& details) { } }; + +class CTCTags::TagProvider + : public ClientProtocol::MessageTagProvider +{ +private: + CapReference ctctagcap; + +public: + TagProvider(Module* mod) + : ClientProtocol::MessageTagProvider(mod) + , ctctagcap(mod) + { + } + + /** Retrieves the underlying message-tags capability. */ + const CapReference& GetCap() const { return ctctagcap; } + + /** @copydoc ClientProtocol::MessageTagProvider::ShouldSendTag */ + bool ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTagData& tagdata) override + { + return ctctagcap.IsEnabled(user); + } +}; diff --git a/src/modules/m_botmode.cpp b/src/modules/m_botmode.cpp index 1a24a5c65..caf7ca323 100644 --- a/src/modules/m_botmode.cpp +++ b/src/modules/m_botmode.cpp @@ -30,17 +30,15 @@ #include "modules/whois.h" class BotTag final - : public ClientProtocol::MessageTagProvider + : public CTCTags::TagProvider { private: SimpleUserMode& botmode; - CTCTags::CapReference ctctagcap; public: BotTag(Module* mod, SimpleUserMode& bm) - : ClientProtocol::MessageTagProvider(mod) + : CTCTags::TagProvider(mod) , botmode(bm) - , ctctagcap(mod) { } @@ -50,11 +48,6 @@ public: if (user && user->IsModeSet(botmode)) msg.AddTag("bot", this, ""); } - - bool ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTagData& tagdata) override - { - return ctctagcap.IsEnabled(user); - } }; class ModuleBotMode final diff --git a/src/modules/m_ircv3_msgid.cpp b/src/modules/m_ircv3_msgid.cpp index 0dacb91f0..d6c603a6b 100644 --- a/src/modules/m_ircv3_msgid.cpp +++ b/src/modules/m_ircv3_msgid.cpp @@ -21,15 +21,11 @@ #include "modules/ctctags.h" class MsgIdTag final - : public ClientProtocol::MessageTagProvider + : public CTCTags::TagProvider { -private: - CTCTags::CapReference ctctagcap; - public: MsgIdTag(Module* mod) - : ClientProtocol::MessageTagProvider(mod) - , ctctagcap(mod) + : CTCTags::TagProvider(mod) { } @@ -41,11 +37,6 @@ public: // We should only allow this tag if it is added by a remote server. return IS_LOCAL(user) ? MOD_RES_DENY : MOD_RES_ALLOW; } - - bool ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTagData& tagdata) override - { - return ctctagcap.IsEnabled(user); - } }; class MsgIdGenerator final diff --git a/src/modules/m_spanningtree/tags.cpp b/src/modules/m_spanningtree/tags.cpp index 9d0150fee..1eba0e5d4 100644 --- a/src/modules/m_spanningtree/tags.cpp +++ b/src/modules/m_spanningtree/tags.cpp @@ -40,8 +40,7 @@ bool ServerTags::ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTag } ServiceTag::ServiceTag(Module* mod) - : ClientProtocol::MessageTagProvider(mod) - , ctctagcap(mod) + : CTCTags::TagProvider(mod) { } @@ -51,8 +50,3 @@ void ServiceTag::OnPopulateTags(ClientProtocol::Message& msg) if (user && user->server->IsService()) msg.AddTag("inspircd.org/service", this, ""); } - -bool ServiceTag::ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTagData& tagdata) -{ - return ctctagcap.IsEnabled(user); -} diff --git a/src/modules/m_spanningtree/tags.h b/src/modules/m_spanningtree/tags.h index 89c5c3dc2..2fb99ccdd 100644 --- a/src/modules/m_spanningtree/tags.h +++ b/src/modules/m_spanningtree/tags.h @@ -22,7 +22,7 @@ #include "modules/ctctags.h" class ServerTags final - : public ClientProtocol::MessageTagProvider + : public ClientProtocol::MessageTagProvider { public: ServerTags(Module* Creator); @@ -31,13 +31,9 @@ public: }; class ServiceTag final - : public ClientProtocol::MessageTagProvider + : public CTCTags::TagProvider { -private: - CTCTags::CapReference ctctagcap; - public: ServiceTag(Module* mod); void OnPopulateTags(ClientProtocol::Message& msg) override; - bool ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTagData& tagdata) override; };