Migrate /mod command to Helix API (#4000)

Co-authored-by: Felanbird <41973452+Felanbird@users.noreply.github.com>
Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
This commit is contained in:
Aiden
2022-09-23 17:12:34 +01:00
committed by GitHub
parent 838e156a04
commit 28de3e637d
5 changed files with 233 additions and 0 deletions
+89
View File
@@ -929,6 +929,95 @@ void Helix::deleteChatMessages(
.execute();
}
void Helix::addChannelModerator(
QString broadcasterID, QString userID, ResultCallback<> successCallback,
FailureCallback<HelixAddChannelModeratorError, QString> failureCallback)
{
using Error = HelixAddChannelModeratorError;
QUrlQuery urlQuery;
urlQuery.addQueryItem("broadcaster_id", broadcasterID);
urlQuery.addQueryItem("user_id", userID);
this->makeRequest("moderation/moderators", urlQuery)
.type(NetworkRequestType::Post)
.onSuccess([successCallback, failureCallback](auto result) -> Outcome {
if (result.status() != 204)
{
qCWarning(chatterinoTwitch)
<< "Success result for deleting chat messages was"
<< result.status() << "but we only expected it to be 204";
}
successCallback();
return Success;
})
.onError([failureCallback](auto result) {
auto obj = result.parseJson();
auto message = obj.value("message").toString();
switch (result.status())
{
case 401: {
if (message.startsWith("Missing scope",
Qt::CaseInsensitive))
{
// Handle this error specifically because its API error is especially unfriendly
failureCallback(Error::UserMissingScope, message);
}
else if (message.compare("incorrect user authorization",
Qt::CaseInsensitive) == 0)
{
// This error is pretty ugly, but essentially means they're not authorized to mod people in this channel
failureCallback(Error::UserNotAuthorized, message);
}
else
{
failureCallback(Error::Forwarded, message);
}
}
break;
case 400: {
if (message.compare("user is already a mod",
Qt::CaseInsensitive) == 0)
{
// This error is particularly ugly, handle it separately
failureCallback(Error::TargetAlreadyModded, message);
}
else
{
// The Twitch API error sufficiently tells the user what went wrong
failureCallback(Error::Forwarded, message);
}
}
break;
case 422: {
// Target is already a VIP
failureCallback(Error::TargetIsVIP, message);
}
break;
case 429: {
// Endpoint has a strict ratelimit
failureCallback(Error::Ratelimited, message);
}
break;
default: {
qCDebug(chatterinoTwitch)
<< "Unhandled error adding channel moderator:"
<< result.status() << result.getData() << obj;
failureCallback(Error::Unknown, message);
}
break;
}
})
.execute();
}
NetworkRequest Helix::makeRequest(QString url, QUrlQuery urlQuery)
{
assert(!url.startsWith("/"));