feat(eventsub): Add support for channel.moderate Warn (#5932)

* fix(eventsub): Be less strict with strings & vectors

String foo from `{"foo":null}` is now accepted, and returns an empty string
std::vector<String> foo from `{"foo":null}` is now accepted, and returns an empty array
This commit is contained in:
pajlada
2025-02-09 12:21:16 +01:00
committed by GitHub
parent 88341517dc
commit b01f50856d
11 changed files with 211 additions and 96 deletions
@@ -78,4 +78,66 @@ MessagePtr makeUnvipMessage(
return builder.release();
}
MessagePtr makeWarnMessage(
TwitchChannel *channel, const QDateTime &time,
const lib::payload::channel_moderate::v2::Event &event,
const lib::payload::channel_moderate::v2::Warn &action)
{
MessageBuilder builder;
QString text;
builder.emplace<TimestampElement>();
builder->flags.set(MessageFlag::System);
builder->flags.set(MessageFlag::Timeout);
builder->loginName = event.moderatorUserLogin.qt();
builder.emplace<MentionElement>(
event.moderatorUserName.qt(), event.moderatorUserLogin.qt(),
MessageColor::System,
channel->getUserColor(event.moderatorUserLogin.qt()));
text.append(event.moderatorUserLogin.qt() + " ");
builder.emplaceSystemTextAndUpdate("has warned", text);
builder
.emplace<MentionElement>(action.userName.qt(), action.userLogin.qt(),
MessageColor::System,
channel->getUserColor(action.userLogin.qt()))
->setTrailingSpace(false);
text.append(action.userLogin.qt());
QStringList reasons;
if (!action.reason.qt().isEmpty())
{
reasons.append(action.reason.qt());
}
for (const auto &rule : action.chatRulesCited)
{
if (!rule.qt().isEmpty())
{
reasons.append(rule.qt());
}
}
if (reasons.isEmpty())
{
builder.emplaceSystemTextAndUpdate(".", text);
}
else
{
builder.emplaceSystemTextAndUpdate(":", text);
builder.emplaceSystemTextAndUpdate(reasons.join(", "), text);
}
builder.message().messageText = text;
builder.message().searchText = text;
builder.message().serverReceivedTime = time;
return builder.release();
}
} // namespace chatterino::eventsub