feat(eventsub): implement timeout stacking (#6013)

This commit is contained in:
nerix
2025-03-01 23:04:30 +01:00
committed by GitHub
parent 1332743716
commit 7ad3e50a94
12 changed files with 2334 additions and 76 deletions
@@ -43,13 +43,21 @@ void handleModerateMessage(
EventSubMessageBuilder builder(chan, time);
builder->loginName = event.moderatorUserLogin.qt();
// pretend we're pubsub
builder->flags.set(MessageFlag::PubSub);
QString text;
bool isShared = event.isFromSharedChat();
builder.appendUser(event.moderatorUserName, event.moderatorUserLogin, text);
// XXX: We use regular links here instead of appendUser, because stacking
// will create those as well. Once everything uses mention elements,
// this can use them as well.
builder.emplaceSystemTextAndUpdate(event.moderatorUserLogin.qt(), text)
->setLink({Link::UserInfo, event.moderatorUserLogin.qt()});
builder.emplaceSystemTextAndUpdate("timed out", text);
builder.appendUser(action.userName, action.userLogin, text);
builder.emplaceSystemTextAndUpdate(action.userLogin.qt(), text)
->setLink({Link::UserInfo, action.userLogin.qt()});
builder.emplaceSystemTextAndUpdate("for", text);
builder
@@ -60,10 +68,18 @@ void handleModerateMessage(
if (isShared)
{
builder.emplaceSystemTextAndUpdate("in", text);
builder.appendUser(*event.sourceBroadcasterUserName,
*event.sourceBroadcasterUserLogin, text, false);
builder
.emplaceSystemTextAndUpdate(event.sourceBroadcasterUserLogin->qt(),
text)
->setLink({Link::UserInfo, event.sourceBroadcasterUserLogin->qt()})
->setTrailingSpace(false);
builder->flags.set(MessageFlag::SharedMessage);
builder->channelName = event.sourceBroadcasterUserLogin->qt();
}
assert(text.endsWith(' '));
text.removeLast(); // trailing space
if (action.reason.view().empty())
{
builder.emplaceSystemTextAndUpdate(".", text);
@@ -79,9 +95,8 @@ void handleModerateMessage(
builder->timeoutUser = action.userLogin.qt();
auto msg = builder.release();
runInGuiThread([chan, msg] {
// TODO: addOrReplaceTimeout (doesn't work with shared chat yet)
chan->addMessage(msg, MessageContext::Original);
runInGuiThread([chan, msg, time] {
chan->addOrReplaceTimeout(msg, time);
});
}