refactor(eventsub): Respect "Hide moderation actions" explicitly (#6041)

This commit is contained in:
pajlada
2025-03-08 14:00:35 +01:00
committed by GitHub
parent 0835064375
commit 77c4d858f9
79 changed files with 153 additions and 125 deletions
+9 -7
View File
@@ -729,6 +729,7 @@ MessageBuilder::MessageBuilder(TimeoutMessageTag, const QString &username,
this->message().flags.set(MessageFlag::System);
this->message().flags.set(MessageFlag::Timeout);
this->message().flags.set(MessageFlag::ModerationAction);
this->message().flags.set(MessageFlag::DoNotTriggerNotification);
this->message().timeoutUser = username;
@@ -747,6 +748,7 @@ MessageBuilder::MessageBuilder(const BanAction &action, const QDateTime &time,
this->emplace<TimestampElement>();
this->message().flags.set(MessageFlag::System);
this->message().flags.set(MessageFlag::Timeout);
this->message().flags.set(MessageFlag::ModerationAction);
this->message().timeoutUser = action.target.login;
this->message().loginName = action.source.login;
this->message().count = count;
@@ -1464,7 +1466,7 @@ MessagePtr MessageBuilder::makeDeletionMessageFromIRC(
builder.emplace<TimestampElement>();
builder.message().flags.set(MessageFlag::System);
builder.message().flags.set(MessageFlag::DoNotTriggerNotification);
builder.message().flags.set(MessageFlag::Timeout);
builder.message().flags.set(MessageFlag::ModerationAction);
// TODO(mm2pl): If or when jumping to a single message gets implemented a link,
// add a link to the originalMessage
builder.emplace<TextElement>("A message from", MessageElementFlag::Text,
@@ -1503,7 +1505,7 @@ MessagePtr MessageBuilder::makeDeletionMessageFromPubSub(
builder.emplace<TimestampElement>();
builder.message().flags.set(MessageFlag::System);
builder.message().flags.set(MessageFlag::DoNotTriggerNotification);
builder.message().flags.set(MessageFlag::Timeout);
builder.message().flags.set(MessageFlag::ModerationAction);
builder
.emplace<TextElement>(action.source.login, MessageElementFlag::Username,
@@ -1710,7 +1712,7 @@ std::pair<MessagePtr, MessagePtr> MessageBuilder::makeAutomodMessage(
builder.message().loginName = "automod";
builder.message().channelName = channelName;
builder.message().flags.set(MessageFlag::PubSub);
builder.message().flags.set(MessageFlag::Timeout);
builder.message().flags.set(MessageFlag::ModerationAction);
builder.message().flags.set(MessageFlag::AutoMod);
builder.message().flags.set(MessageFlag::AutoModOffendingMessageHeader);
@@ -1761,7 +1763,7 @@ std::pair<MessagePtr, MessagePtr> MessageBuilder::makeAutomodMessage(
builder2.emplace<TwitchModerationElement>();
builder2.message().loginName = action.target.login;
builder2.message().flags.set(MessageFlag::PubSub);
builder2.message().flags.set(MessageFlag::Timeout);
builder2.message().flags.set(MessageFlag::ModerationAction);
builder2.message().flags.set(MessageFlag::AutoMod);
builder2.message().flags.set(MessageFlag::AutoModOffendingMessage);
@@ -2063,9 +2065,9 @@ MessagePtrMut MessageBuilder::makeClearChatMessage(const QDateTime &now,
builder.emplace<TimestampElement>(now.time());
builder->count = count;
builder->serverReceivedTime = now;
builder.message().flags.set(MessageFlag::System,
MessageFlag::DoNotTriggerNotification,
MessageFlag::ClearChat);
builder.message().flags.set(
MessageFlag::System, MessageFlag::DoNotTriggerNotification,
MessageFlag::ClearChat, MessageFlag::ModerationAction);
QString messageText;
if (actor.isEmpty())
+7
View File
@@ -58,6 +58,13 @@ enum class MessageFlag : std::int64_t {
ClearChat = (1LL << 39),
/// The message is built from EventSub
EventSub = (1LL << 40),
/// The message is a moderation action.
/// Example messages that would count as moderation actions:
/// - forsen has been banned
/// - forsen deleted message from forsen
/// - forsen added "blockedterm" as a blocked term
/// - Your message is being checked by mods and has not been sent
ModerationAction = (1LL << 41),
};
using MessageFlags = FlagsEnum<MessageFlag>;
+7 -8
View File
@@ -166,16 +166,14 @@ void MessageLayout::actuallyLayout(const MessageLayoutContext &ctx)
continue;
}
if (this->message_->flags.has(MessageFlag::Timeout) ||
this->message_->flags.has(MessageFlag::Untimeout))
if (this->message_->flags.has(MessageFlag::ModerationAction))
{
// NOTE: This hides the message but it will make the message re-appear if moderation message hiding is no longer active, and the layout is re-laid-out.
// This is only the case for the moderation messages that don't get filtered during creation.
// We should decide which is the correct method & apply that everywhere
if (hideModerationActions ||
(getSettings()->streamerModeHideModActions &&
getApp()->getStreamerMode()->isEnabled()))
getApp()->getStreamerMode()->shouldHideModActions())
{
// Message is being hidden because we consider the message
// a moderation action (something a streamer is unlikely to
// want to share if they briefly show their chat on stream)
continue;
}
}
@@ -515,7 +513,8 @@ bool MessageLayout::isReplyable() const
if (this->message_->flags.hasAny(
{MessageFlag::System, MessageFlag::Subscription,
MessageFlag::Timeout, MessageFlag::Whisper}))
MessageFlag::Timeout, MessageFlag::Whisper,
MessageFlag::ModerationAction}))
{
return false;
}