fix: properly stack/merge PubSub & IRC timeouts again (#5855)

This commit is contained in:
pajlada
2025-01-25 12:13:33 +01:00
committed by GitHub
parent 3214e0a80b
commit 8554bd4d65
6 changed files with 64 additions and 8 deletions
+1 -1
View File
@@ -17,7 +17,7 @@
- Bugfix: Fixed deleted messages not immediately disappearing when "Hide deleted messages" is enabled. (#5844, #5854)
- Dev: Highlight checks now use non-capturing groups for the boundaries. (#5784)
- Dev: Updated Conan dependencies. (#5776)
- Dev: Replaced usage of `parseTime` with `serverReceivedTime` for clearchat messages. (#5824)
- Dev: Replaced usage of `parseTime` with `serverReceivedTime` for clearchat messages. (#5824, #5855)
- Dev: Support Boost 1.87. (#5832)
- Dev: Words from `TextElement`s are now combined where possible. (#5847)
@@ -1,12 +1,17 @@
#include "controllers/commands/builtin/chatterino/Debugging.hpp"
#include "Application.hpp"
#include "common/Channel.hpp"
#include "common/Env.hpp"
#include "common/Literals.hpp"
#include "controllers/commands/CommandContext.hpp"
#include "messages/Image.hpp"
#include "messages/Message.hpp"
#include "messages/MessageBuilder.hpp"
#include "messages/MessageElement.hpp"
#include "providers/twitch/PubSubActions.hpp"
#include "providers/twitch/TwitchChannel.hpp"
#include "providers/twitch/TwitchIrcServer.hpp"
#include "singletons/Theme.hpp"
#include "util/PostToThread.hpp"
@@ -140,7 +145,46 @@ QString debugTest(const CommandContext &ctx)
return "";
}
ctx.channel->addSystemMessage("debug-test called");
const auto command = ctx.words.value(1);
if (command == "timeout-pubsub")
{
QJsonObject data;
data["created_by_user_id"] = ctx.twitchChannel->roomId();
data["created_by"] = ctx.twitchChannel->getName();
BanAction action(data, ctx.twitchChannel->roomId());
action.source.id = ctx.twitchChannel->roomId();
action.source.login = ctx.twitchChannel->getName();
action.target.id = "11148817";
action.target.login = "pajlada";
action.duration = 10;
MessageBuilder msg(action, QDateTime::currentDateTime());
msg->flags.set(MessageFlag::PubSub);
ctx.channel->addOrReplaceTimeout(msg.release(),
QDateTime::currentDateTime());
}
else if (command == "timeout-irc")
{
auto nowMillis = QDateTime::currentDateTime().toSecsSinceEpoch();
const auto ircText =
QString(
"@tmi-sent-ts=%1;room-id=117166826;user-id=11148817;badges=;"
"badge-info=;flags=;user-type=;emotes=;target-user-id=11148817;"
"ban-"
"duration=1 :tmi.twitch.tv CLEARCHAT #testaccount_420 pajlada")
.arg(nowMillis);
getApp()->getTwitch()->addFakeMessage(ircText);
}
else
{
ctx.channel->addSystemMessage(
QString("debug-test called with command: '%1'").arg(command));
}
return "";
}
+7 -2
View File
@@ -719,7 +719,8 @@ MessageBuilder::MessageBuilder(TimeoutMessageTag, const QString &username,
this->message().serverReceivedTime = time;
}
MessageBuilder::MessageBuilder(const BanAction &action, uint32_t count)
MessageBuilder::MessageBuilder(const BanAction &action, const QDateTime &time,
uint32_t count)
: MessageBuilder()
{
auto current = getApp()->getAccounts()->twitch.getCurrent();
@@ -817,9 +818,11 @@ MessageBuilder::MessageBuilder(const BanAction &action, uint32_t count)
this->message().messageText = text;
this->message().searchText = text;
this->message().serverReceivedTime = time;
}
MessageBuilder::MessageBuilder(const UnbanAction &action)
MessageBuilder::MessageBuilder(const UnbanAction &action, const QDateTime &time)
: MessageBuilder()
{
this->emplace<TimestampElement>();
@@ -839,6 +842,8 @@ MessageBuilder::MessageBuilder(const UnbanAction &action)
this->message().messageText = text;
this->message().searchText = text;
this->message().serverReceivedTime = time;
}
MessageBuilder::MessageBuilder(const WarnAction &action)
+3 -2
View File
@@ -112,8 +112,9 @@ public:
MessageBuilder(TimeoutMessageTag, const QString &username,
const QString &durationInSeconds, bool multipleTimes,
const QDateTime &time);
MessageBuilder(const BanAction &action, uint32_t count = 1);
MessageBuilder(const UnbanAction &action);
MessageBuilder(const BanAction &action, const QDateTime &time,
uint32_t count = 1);
MessageBuilder(const UnbanAction &action, const QDateTime &time);
MessageBuilder(const WarnAction &action);
MessageBuilder(const RaidAction &action);
MessageBuilder(const UnraidAction &action);
+6 -2
View File
@@ -319,7 +319,9 @@ void TwitchIrcServer::initialize()
}
postToThread([chan, action] {
MessageBuilder msg(action);
// TODO: Can we utilize some pubsub time field? maybe not worth
auto time = QDateTime::currentDateTime();
MessageBuilder msg(action, time);
msg->flags.set(MessageFlag::PubSub);
chan->addOrReplaceTimeout(msg.release(),
QDateTime::currentDateTime());
@@ -399,7 +401,9 @@ void TwitchIrcServer::initialize()
return;
}
auto msg = MessageBuilder(action).release();
// TODO: Can we utilize some pubsub time field? maybe not worth
auto time = QDateTime::currentDateTime();
auto msg = MessageBuilder(action, time).release();
postToThread([chan, msg] {
chan->addMessage(msg, MessageContext::Original);
+2
View File
@@ -5,6 +5,8 @@
#include "messages/MessageBuilder.hpp"
#include "singletons/Settings.hpp"
#include <QDateTime>
namespace chatterino {
/// Adds a timeout or replaces a previous one sent in the last 20 messages and in the last 5s.