feat: improve handling of shared chat messages (#5606)

Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
iProdigy
2024-10-05 10:31:52 +00:00
committed by GitHub
parent 81d72db76b
commit 06d9a37709
11 changed files with 199 additions and 33 deletions
@@ -456,6 +456,27 @@ std::vector<MessagePtr> parseUserNoticeMessage(Channel *channel,
auto parameters = message->parameters();
QString msgType = tags.value("msg-id").toString();
bool mirrored = msgType == "sharedchatnotice";
if (mirrored)
{
msgType = tags.value("source-msg-id").toString();
}
else
{
auto rIt = tags.find("room-id");
auto sIt = tags.find("source-room-id");
if (rIt != tags.end() && sIt != tags.end())
{
mirrored = rIt.value().toString() != sIt.value().toString();
}
}
if (mirrored && msgType != "announcement")
{
// avoid confusing broadcasters with user payments to other channels
return {};
}
QString content;
if (parameters.size() >= 2)
{
@@ -483,6 +504,10 @@ std::vector<MessagePtr> parseUserNoticeMessage(Channel *channel,
MessageBuilder builder(channel, message, args, content, false);
builder->flags.set(MessageFlag::Subscription);
builder->flags.unset(MessageFlag::Highlighted);
if (mirrored)
{
builder->flags.set(MessageFlag::SharedMessage);
}
builtMessages.emplace_back(builder.build());
}
}
@@ -546,6 +571,10 @@ std::vector<MessagePtr> parseUserNoticeMessage(Channel *channel,
calculateMessageTime(message).time());
b->flags.set(MessageFlag::Subscription);
if (mirrored)
{
b->flags.set(MessageFlag::SharedMessage);
}
auto newMessage = b.release();
builtMessages.emplace_back(newMessage);
}
@@ -954,6 +983,27 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message,
auto target = parameters[0];
QString msgType = tags.value("msg-id").toString();
bool mirrored = msgType == "sharedchatnotice";
if (mirrored)
{
msgType = tags.value("source-msg-id").toString();
}
else
{
auto rIt = tags.find("room-id");
auto sIt = tags.find("source-room-id");
if (rIt != tags.end() && sIt != tags.end())
{
mirrored = rIt.value().toString() != sIt.value().toString();
}
}
if (mirrored && msgType != "announcement")
{
// avoid confusing broadcasters with user payments to other channels
return;
}
QString content;
if (parameters.size() >= 2)
{
@@ -1039,6 +1089,10 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message,
calculateMessageTime(message).time());
b->flags.set(MessageFlag::Subscription);
if (mirrored)
{
b->flags.set(MessageFlag::SharedMessage);
}
auto newMessage = b.release();
QString channelName;