Extract the logic for tags that need message-tags to its own type.

This commit is contained in:
Sadie Powell 2022-11-29 05:12:42 +00:00
parent f9ef385b89
commit d5759d1de2
5 changed files with 31 additions and 33 deletions

View File

@ -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);
}
};

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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;
};