Allow moderators to see who deleted a message (#2874)
Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
This commit is contained in:
@@ -75,6 +75,15 @@ struct BanAction : PubSubAction {
|
||||
}
|
||||
};
|
||||
|
||||
struct DeleteAction : PubSubAction {
|
||||
using PubSubAction::PubSubAction;
|
||||
|
||||
ActionUser target;
|
||||
|
||||
QString messageId;
|
||||
QString messageText;
|
||||
};
|
||||
|
||||
struct UnbanAction : PubSubAction {
|
||||
using PubSubAction::PubSubAction;
|
||||
|
||||
|
||||
@@ -428,6 +428,46 @@ PubSub::PubSub()
|
||||
}
|
||||
};
|
||||
|
||||
this->moderationActionHandlers["delete"] = [this](const auto &data,
|
||||
const auto &roomID) {
|
||||
DeleteAction action(data, roomID);
|
||||
|
||||
getCreatedByUser(data, action.source);
|
||||
getTargetUser(data, action.target);
|
||||
|
||||
try
|
||||
{
|
||||
const auto &args = getArgs(data);
|
||||
|
||||
if (args.Size() < 3)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!rj::getSafe(args[0], action.target.name))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!rj::getSafe(args[1], action.messageText))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!rj::getSafe(args[2], action.messageId))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this->signals_.moderation.messageDeleted.invoke(action);
|
||||
}
|
||||
catch (const std::runtime_error &ex)
|
||||
{
|
||||
qCDebug(chatterinoPubsub)
|
||||
<< "Error parsing moderation action:" << ex.what();
|
||||
}
|
||||
};
|
||||
|
||||
this->moderationActionHandlers["ban"] = [this](const auto &data,
|
||||
const auto &roomID) {
|
||||
BanAction action(data, roomID);
|
||||
|
||||
@@ -124,6 +124,7 @@ public:
|
||||
struct {
|
||||
struct {
|
||||
Signal<ClearChatAction> chatCleared;
|
||||
Signal<DeleteAction> messageDeleted;
|
||||
Signal<ModeChangedAction> modeChanged;
|
||||
Signal<ModerationStateAction> moderationStateChanged;
|
||||
|
||||
|
||||
@@ -1352,6 +1352,8 @@ void TwitchMessageBuilder::hostingSystemMessage(const QString &channelName,
|
||||
MessageColor::System, FontStyle::ChatMediumBold)
|
||||
->setLink({Link::UserInfo, channelName});
|
||||
}
|
||||
|
||||
// irc variant
|
||||
void TwitchMessageBuilder::deletionMessage(const MessagePtr originalMessage,
|
||||
MessageBuilder *builder)
|
||||
{
|
||||
@@ -1373,7 +1375,7 @@ void TwitchMessageBuilder::deletionMessage(const MessagePtr originalMessage,
|
||||
if (originalMessage->messageText.length() > 50)
|
||||
{
|
||||
builder->emplace<TextElement>(
|
||||
originalMessage->messageText.left(50) + "...",
|
||||
originalMessage->messageText.left(50) + "…",
|
||||
MessageElementFlag::Text, MessageColor::Text);
|
||||
}
|
||||
else
|
||||
@@ -1382,6 +1384,44 @@ void TwitchMessageBuilder::deletionMessage(const MessagePtr originalMessage,
|
||||
MessageElementFlag::Text,
|
||||
MessageColor::Text);
|
||||
}
|
||||
builder->message().timeoutUser = "msg:" + originalMessage->id;
|
||||
}
|
||||
|
||||
// pubsub variant
|
||||
void TwitchMessageBuilder::deletionMessage(const DeleteAction &action,
|
||||
MessageBuilder *builder)
|
||||
{
|
||||
builder->emplace<TimestampElement>();
|
||||
builder->message().flags.set(MessageFlag::System);
|
||||
builder->message().flags.set(MessageFlag::DoNotTriggerNotification);
|
||||
builder->message().flags.set(MessageFlag::Timeout);
|
||||
|
||||
builder
|
||||
->emplace<TextElement>(action.source.name, MessageElementFlag::Username,
|
||||
MessageColor::System, FontStyle::ChatMediumBold)
|
||||
->setLink({Link::UserInfo, action.source.name});
|
||||
// TODO(mm2pl): If or when jumping to a single message gets implemented a link,
|
||||
// add a link to the originalMessage
|
||||
builder->emplace<TextElement>(
|
||||
"deleted message from", MessageElementFlag::Text, MessageColor::System);
|
||||
builder
|
||||
->emplace<TextElement>(action.target.name, MessageElementFlag::Username,
|
||||
MessageColor::System, FontStyle::ChatMediumBold)
|
||||
->setLink({Link::UserInfo, action.target.name});
|
||||
builder->emplace<TextElement>("saying:", MessageElementFlag::Text,
|
||||
MessageColor::System);
|
||||
if (action.messageText.length() > 50)
|
||||
{
|
||||
builder->emplace<TextElement>(action.messageText.left(50) + "…",
|
||||
MessageElementFlag::Text,
|
||||
MessageColor::Text);
|
||||
}
|
||||
else
|
||||
{
|
||||
builder->emplace<TextElement>(
|
||||
action.messageText, MessageElementFlag::Text, MessageColor::Text);
|
||||
}
|
||||
builder->message().timeoutUser = "msg:" + action.messageId;
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "common/Outcome.hpp"
|
||||
#include "messages/SharedMessageBuilder.hpp"
|
||||
#include "providers/twitch/ChannelPointReward.hpp"
|
||||
#include "providers/twitch/PubsubActions.hpp"
|
||||
#include "providers/twitch/TwitchBadge.hpp"
|
||||
|
||||
#include <IrcMessage>
|
||||
@@ -60,6 +61,8 @@ public:
|
||||
MessageBuilder *builder);
|
||||
static void deletionMessage(const MessagePtr originalMessage,
|
||||
MessageBuilder *builder);
|
||||
static void deletionMessage(const DeleteAction &action,
|
||||
MessageBuilder *builder);
|
||||
|
||||
private:
|
||||
void parseUsernameColor() override;
|
||||
|
||||
Reference in New Issue
Block a user