Automod info (#2744)

Co-authored-by: Sidd <iProdigy@users.noreply.github.com>
This commit is contained in:
apa420 2021-05-08 14:49:30 +02:00 committed by GitHub
parent c40bdf812b
commit bb73069817
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 98 additions and 1 deletions

View file

@ -2,6 +2,7 @@
## Unversioned ## Unversioned
- Minor: Messages held by automod are now shown to the user. (#2626)
- Bugfix: Automod messages now work properly again. (#2682) - Bugfix: Automod messages now work properly again. (#2682)
- Bugfix: `Login expired` message no longer highlights all tabs. (#2735) - Bugfix: `Login expired` message no longer highlights all tabs. (#2735)

View file

@ -314,7 +314,7 @@ void Application::initPubsub()
} }
postToThread([chan, action] { postToThread([chan, action] {
auto p = makeAutomodMessage(action); const auto p = makeAutomodMessage(action);
chan->addMessage(p.first); chan->addMessage(p.first);
chan->addMessage(p.second); chan->addMessage(p.second);
}); });
@ -338,6 +338,22 @@ void Application::initPubsub()
chan->deleteMessage(msg->id); chan->deleteMessage(msg->id);
}); });
this->twitch.pubsub->signals_.moderation.automodInfoMessage.connect(
[&](const auto &action) {
auto chan =
this->twitch.server->getChannelOrEmptyByID(action.roomID);
if (chan->isEmpty())
{
return;
}
postToThread([chan, action] {
const auto p = makeAutomodInfoMessage(action);
chan->addMessage(p);
});
});
this->twitch.pubsub->signals_.pointReward.redeemed.connect([&](auto &data) { this->twitch.pubsub->signals_.pointReward.redeemed.connect([&](auto &data) {
QString channelId; QString channelId;
if (rj::getSafe(data, "channel_id", channelId)) if (rj::getSafe(data, "channel_id", channelId))

View file

@ -29,6 +29,53 @@ MessagePtr makeSystemMessage(const QString &text, const QTime &time)
return MessageBuilder(systemMessage, text, time).release(); return MessageBuilder(systemMessage, text, time).release();
} }
MessagePtr makeAutomodInfoMessage(const AutomodInfoAction &action)
{
auto builder = MessageBuilder();
builder.emplace<TimestampElement>();
builder.message().flags.set(MessageFlag::PubSub);
builder
.emplace<ImageElement>(Image::fromPixmap(getResources().twitch.automod),
MessageElementFlag::BadgeChannelAuthority)
->setTooltip("AutoMod");
builder.emplace<TextElement>("AutoMod:", MessageElementFlag::BoldUsername,
MessageColor(QColor("blue")),
FontStyle::ChatMediumBold);
builder.emplace<TextElement>(
"AutoMod:", MessageElementFlag::NonBoldUsername,
MessageColor(QColor("blue")));
switch (action.type)
{
case AutomodInfoAction::OnHold: {
builder.emplace<TextElement>(("Hey! Your message is being checked "
"by mods and has not been sent."),
MessageElementFlag::Text,
MessageColor::Text);
}
break;
case AutomodInfoAction::Denied: {
builder.emplace<TextElement>(("Mods have removed your message."),
MessageElementFlag::Text,
MessageColor::Text);
}
break;
case AutomodInfoAction::Approved: {
builder.emplace<TextElement>(("Mods have accepted your message."),
MessageElementFlag::Text,
MessageColor::Text);
}
break;
}
builder.message().flags.set(MessageFlag::AutoMod);
auto message = builder.release();
return message;
}
std::pair<MessagePtr, MessagePtr> makeAutomodMessage( std::pair<MessagePtr, MessagePtr> makeAutomodMessage(
const AutomodAction &action) const AutomodAction &action)
{ {

View file

@ -11,6 +11,7 @@ struct BanAction;
struct UnbanAction; struct UnbanAction;
struct AutomodAction; struct AutomodAction;
struct AutomodUserAction; struct AutomodUserAction;
struct AutomodInfoAction;
struct Message; struct Message;
using MessagePtr = std::shared_ptr<const Message>; using MessagePtr = std::shared_ptr<const Message>;
@ -25,6 +26,7 @@ MessagePtr makeSystemMessage(const QString &text);
MessagePtr makeSystemMessage(const QString &text, const QTime &time); MessagePtr makeSystemMessage(const QString &text, const QTime &time);
std::pair<MessagePtr, MessagePtr> makeAutomodMessage( std::pair<MessagePtr, MessagePtr> makeAutomodMessage(
const AutomodAction &action); const AutomodAction &action);
MessagePtr makeAutomodInfoMessage(const AutomodInfoAction &action);
struct MessageParseArgs { struct MessageParseArgs {
bool disablePingSounds = false; bool disablePingSounds = false;

View file

@ -133,4 +133,13 @@ struct AutomodUserAction : PubSubAction {
QString message; QString message;
}; };
struct AutomodInfoAction : PubSubAction {
using PubSubAction::PubSubAction;
enum {
OnHold,
Denied,
Approved,
} type;
};
} // namespace chatterino } // namespace chatterino

View file

@ -583,6 +583,27 @@ PubSub::PubSub()
} }
}; };
this->moderationActionHandlers["automod_message_rejected"] =
[this](const auto &data, const auto &roomID) {
AutomodInfoAction action(data, roomID);
action.type = AutomodInfoAction::OnHold;
this->signals_.moderation.automodInfoMessage.invoke(action);
};
this->moderationActionHandlers["automod_message_denied"] =
[this](const auto &data, const auto &roomID) {
AutomodInfoAction action(data, roomID);
action.type = AutomodInfoAction::Denied;
this->signals_.moderation.automodInfoMessage.invoke(action);
};
this->moderationActionHandlers["automod_message_approved"] =
[this](const auto &data, const auto &roomID) {
AutomodInfoAction action(data, roomID);
action.type = AutomodInfoAction::Approved;
this->signals_.moderation.automodInfoMessage.invoke(action);
};
this->channelTermsActionHandlers["add_permitted_term"] = this->channelTermsActionHandlers["add_permitted_term"] =
[this](const auto &data, const auto &roomID) { [this](const auto &data, const auto &roomID) {
// This term got a pass through automod // This term got a pass through automod

View file

@ -132,6 +132,7 @@ public:
Signal<AutomodAction> automodMessage; Signal<AutomodAction> automodMessage;
Signal<AutomodUserAction> automodUserMessage; Signal<AutomodUserAction> automodUserMessage;
Signal<AutomodInfoAction> automodInfoMessage;
} moderation; } moderation;
struct { struct {