diff --git a/CHANGELOG.md b/CHANGELOG.md index 52cb3343..82deca12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/src/controllers/commands/builtin/chatterino/Debugging.cpp b/src/controllers/commands/builtin/chatterino/Debugging.cpp index 7a33dac8..3dad9f68 100644 --- a/src/controllers/commands/builtin/chatterino/Debugging.cpp +++ b/src/controllers/commands/builtin/chatterino/Debugging.cpp @@ -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 ""; } diff --git a/src/messages/MessageBuilder.cpp b/src/messages/MessageBuilder.cpp index 124220ae..b28ed1a5 100644 --- a/src/messages/MessageBuilder.cpp +++ b/src/messages/MessageBuilder.cpp @@ -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(); @@ -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) diff --git a/src/messages/MessageBuilder.hpp b/src/messages/MessageBuilder.hpp index 0a5e43ad..258d7534 100644 --- a/src/messages/MessageBuilder.hpp +++ b/src/messages/MessageBuilder.hpp @@ -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); diff --git a/src/providers/twitch/TwitchIrcServer.cpp b/src/providers/twitch/TwitchIrcServer.cpp index 3f8bc534..c2505502 100644 --- a/src/providers/twitch/TwitchIrcServer.cpp +++ b/src/providers/twitch/TwitchIrcServer.cpp @@ -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); diff --git a/src/util/ChannelHelpers.hpp b/src/util/ChannelHelpers.hpp index 6c455b8d..7c5124c8 100644 --- a/src/util/ChannelHelpers.hpp +++ b/src/util/ChannelHelpers.hpp @@ -5,6 +5,8 @@ #include "messages/MessageBuilder.hpp" #include "singletons/Settings.hpp" +#include + namespace chatterino { /// Adds a timeout or replaces a previous one sent in the last 20 messages and in the last 5s.