feat: add /monitor and /restrict commands for moderators (#6750)

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
This commit is contained in:
iProdigy
2026-01-25 11:58:45 -06:00
committed by GitHub
parent d6bd0090a4
commit a2ba163a44
8 changed files with 344 additions and 0 deletions
+92
View File
@@ -2393,6 +2393,98 @@ void Helix::warnUser(
.execute();
}
void Helix::addSuspiciousUser(const QString broadcasterID,
const QString moderatorID, const QString userID,
const bool restricted,
ResultCallback<> successCallback,
FailureCallback<QString> failureCallback)
{
QUrlQuery urlQuery;
urlQuery.addQueryItem("broadcaster_id", broadcasterID);
urlQuery.addQueryItem("moderator_id", moderatorID);
QJsonObject payload;
payload["user_id"] = userID;
payload["status"] = restricted ? "RESTRICTED" : "ACTIVE_MONITORING";
this->makePost("moderation/suspicious_users", urlQuery)
.json(payload)
.onSuccess([successCallback](const auto &result) {
if (result.status() != 200)
{
qCWarning(chatterinoTwitch)
<< "Success result for treating a suspicious user was"
<< result.formatError() << "but we expected it to be 200";
}
// we don't care about the response
successCallback();
})
.onError([failureCallback](const auto &result) -> void {
if (!result.status())
{
failureCallback(result.formatError());
return;
}
auto obj = result.parseJson();
auto message = obj.value("message").toString();
if (!message.isEmpty())
{
failureCallback(message);
}
else
{
failureCallback(result.formatError());
}
})
.execute();
}
void Helix::removeSuspiciousUser(const QString broadcasterID,
const QString moderatorID,
const QString userID,
ResultCallback<> successCallback,
FailureCallback<QString> failureCallback)
{
QUrlQuery urlQuery;
urlQuery.addQueryItem("broadcaster_id", broadcasterID);
urlQuery.addQueryItem("moderator_id", moderatorID);
urlQuery.addQueryItem("user_id", userID);
this->makeDelete("moderation/suspicious_users", urlQuery)
.onSuccess([successCallback](const auto &result) {
if (result.status() != 200)
{
qCWarning(chatterinoTwitch)
<< "Success result for un-treating a suspicious user was"
<< result.formatError() << "but we expected it to be 200";
}
// we don't care about the response
successCallback();
})
.onError([failureCallback](const auto &result) -> void {
if (!result.status())
{
failureCallback(result.formatError());
return;
}
auto obj = result.parseJson();
auto message = obj.value("message").toString();
if (!message.isEmpty())
{
failureCallback(message);
}
else
{
failureCallback(result.formatError());
}
})
.execute();
}
// https://dev.twitch.tv/docs/api/reference#send-whisper
void Helix::sendWhisper(
QString fromUserID, QString toUserID, QString message,
+27
View File
@@ -1238,6 +1238,20 @@ public:
QString reason, ResultCallback<> successCallback,
FailureCallback<HelixWarnUserError, QString> failureCallback) = 0;
// Monitor or restrict a user
// https://dev.twitch.tv/docs/api/reference/#add-suspicious-status-to-chat-user
virtual void addSuspiciousUser(
QString broadcasterID, QString moderatorID, QString userID,
bool restricted, ResultCallback<> successCallback,
FailureCallback<QString> failureCallback) = 0;
// Remove a user from monitored or restricted suspicious treatment
// https://dev.twitch.tv/docs/api/reference/#remove-suspicious-status-from-chat-user
virtual void removeSuspiciousUser(
QString broadcasterID, QString moderatorID, QString userID,
ResultCallback<> successCallback,
FailureCallback<QString> failureCallback) = 0;
// Send a whisper
// https://dev.twitch.tv/docs/api/reference#send-whisper
virtual void sendWhisper(
@@ -1632,6 +1646,19 @@ public:
QString reason, ResultCallback<> successCallback,
FailureCallback<HelixWarnUserError, QString> failureCallback) final;
// Monitor or restrict a user
// https://dev.twitch.tv/docs/api/reference/#add-suspicious-status-to-chat-user
void addSuspiciousUser(QString broadcasterID, QString moderatorID,
QString userID, bool restricted,
ResultCallback<> successCallback,
FailureCallback<QString> failureCallback) final;
// Remove a user from monitored or restricted suspicious treatment
// https://dev.twitch.tv/docs/api/reference/#remove-suspicious-status-from-chat-user
void removeSuspiciousUser(QString broadcasterID, QString moderatorID,
QString userID, ResultCallback<> successCallback,
FailureCallback<QString> failureCallback) final;
// Send a whisper
// https://dev.twitch.tv/docs/api/reference#send-whisper
void sendWhisper(