mirror of
https://github.com/anope/anope.git
synced 2026-06-12 15:44:46 +02:00
Allow protocol modules to apply tags to sent messages.
This is useful because for some IRCv3 specifications we need to apply tags to all messages and its annoying to have to do this inline when sending each message.
This commit is contained in:
@@ -58,6 +58,14 @@ public:
|
||||
*/
|
||||
virtual bool Parse(const Anope::string &message, Anope::map<Anope::string> &tags, Anope::string &source, Anope::string &command, std::vector<Anope::string> ¶ms);
|
||||
|
||||
/* Populates the tags that should be sent on all messages.
|
||||
* @param tags The location to store tags.
|
||||
* @param source Source of the message.
|
||||
* @param command Command name.
|
||||
* @param params Any extra parameters.
|
||||
*/
|
||||
virtual void PopulateTags(Anope::map<Anope::string> &tags, const MessageSource &source, const Anope::string &command, const std::vector<Anope::string> ¶ms);
|
||||
|
||||
/* Formats an outgoing message so it can be sent to the IRC server.
|
||||
* @param message The location to store the formatted message.
|
||||
* @param tags IRCv3 message tags.
|
||||
|
||||
@@ -100,6 +100,13 @@ void Anope::ProcessInternal(MessageSource &src, const Anope::string &command, co
|
||||
}
|
||||
}
|
||||
|
||||
void IRCDProto::PopulateTags(Anope::map<Anope::string> &tags, const MessageSource &source, const Anope::string &command, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
auto it = tags.find("time"); // https://ircv3.net/specs/extensions/server-time
|
||||
if (it == tags.end())
|
||||
tags["time"] = Anope::FormatISO8601(Anope::CurTime, Anope::CurTimeNs / 1'000'000);
|
||||
}
|
||||
|
||||
bool IRCDProto::Parse(const Anope::string &buffer, Anope::map<Anope::string> &tags, Anope::string &source, Anope::string &command, std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
MessageTokenizer tokens(buffer);
|
||||
|
||||
+5
-2
@@ -73,8 +73,11 @@ void Uplink::SendInternal(const Anope::map<Anope::string> &tags, const MessageSo
|
||||
return;
|
||||
}
|
||||
|
||||
Anope::map<Anope::string> fulltags(tags);
|
||||
IRCD->PopulateTags(fulltags, source, command, params);
|
||||
|
||||
Anope::string message;
|
||||
if (!IRCD->Format(message, tags, source, command, params))
|
||||
if (!IRCD->Format(message, fulltags, source, command, params))
|
||||
return;
|
||||
|
||||
UplinkSock->sent_msgs++;
|
||||
@@ -84,7 +87,7 @@ void Uplink::SendInternal(const Anope::map<Anope::string> &tags, const MessageSo
|
||||
if (Anope::ProtocolDebug)
|
||||
{
|
||||
auto sent_tag = false;
|
||||
for (const auto &[tname, tvalue] : tags)
|
||||
for (const auto &[tname, tvalue] : fulltags)
|
||||
{
|
||||
if (IRCD->IsTagValid(tname, tvalue))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user