Refactored and Migrated to Helix AutoMod message management (#2779)

This uses new Helix endpoint which requires new scopes and users need to reauthenticate to approve/deny AutoMod messages again.
This commit is contained in:
Paweł
2021-05-14 13:14:43 +02:00
committed by GitHub
parent 170529e778
commit e746201c4f
7 changed files with 179 additions and 43 deletions
+84 -26
View File
@@ -3,12 +3,16 @@
#include <QThread>
#include "Application.hpp"
#include "common/Channel.hpp"
#include "common/Env.hpp"
#include "common/NetworkRequest.hpp"
#include "common/Outcome.hpp"
#include "common/QLogging.hpp"
#include "controllers/accounts/AccountController.hpp"
#include "messages/Message.hpp"
#include "messages/MessageBuilder.hpp"
#include "providers/IvrApi.hpp"
#include "providers/irc/IrcMessageBuilder.hpp"
#include "providers/twitch/TwitchCommon.hpp"
#include "providers/twitch/TwitchUser.hpp"
#include "providers/twitch/api/Helix.hpp"
@@ -354,42 +358,96 @@ SharedAccessGuard<const TwitchAccount::TwitchAccountEmoteData>
}
// AutoModActions
void TwitchAccount::autoModAllow(const QString msgID)
void TwitchAccount::autoModAllow(const QString msgID, ChannelPtr channel)
{
QString url("https://api.twitch.tv/kraken/chat/twitchbot/approve");
getHelix()->manageAutoModMessages(
this->getUserId(), msgID, "ALLOW",
[] {
// success
},
[channel](auto error) {
// failure
QString errorMessage("Failed to allow AutoMod message - ");
auto qba = (QString("{\"msg_id\":\"") + msgID + "\"}").toUtf8();
switch (error)
{
case HelixAutoModMessageError::MessageAlreadyProcessed: {
errorMessage += "message has already been processed.";
}
break;
NetworkRequest(url, NetworkRequestType::Post)
.header("Content-Type", "application/json")
.header("Content-Length", QByteArray::number(qba.size()))
.payload(qba)
case HelixAutoModMessageError::UserNotAuthenticated: {
errorMessage += "you need to re-authenticate.";
}
break;
.authorizeTwitchV5(this->getOAuthClient(), this->getOAuthToken())
.onError([=](NetworkResult result) {
qCWarning(chatterinoTwitch)
<< "[TwitchAccounts::autoModAllow] Error" << result.status();
})
.execute();
case HelixAutoModMessageError::UserNotAuthorized: {
errorMessage +=
"you don't have permission to perform that action";
}
break;
case HelixAutoModMessageError::MessageNotFound: {
errorMessage += "target message not found.";
}
break;
// This would most likely happen if the service is down, or if the JSON payload returned has changed format
case HelixAutoModMessageError::Unknown:
default: {
errorMessage += "an unknown error occured.";
}
break;
}
channel->addMessage(makeSystemMessage(errorMessage));
});
}
void TwitchAccount::autoModDeny(const QString msgID)
void TwitchAccount::autoModDeny(const QString msgID, ChannelPtr channel)
{
QString url("https://api.twitch.tv/kraken/chat/twitchbot/deny");
getHelix()->manageAutoModMessages(
this->getUserId(), msgID, "DENY",
[] {
// success
},
[channel](auto error) {
// failure
QString errorMessage("Failed to deny AutoMod message - ");
auto qba = (QString("{\"msg_id\":\"") + msgID + "\"}").toUtf8();
switch (error)
{
case HelixAutoModMessageError::MessageAlreadyProcessed: {
errorMessage += "message has already been processed.";
}
break;
NetworkRequest(url, NetworkRequestType::Post)
.header("Content-Type", "application/json")
.header("Content-Length", QByteArray::number(qba.size()))
.payload(qba)
case HelixAutoModMessageError::UserNotAuthenticated: {
errorMessage += "you need to re-authenticate.";
}
break;
.authorizeTwitchV5(this->getOAuthClient(), this->getOAuthToken())
.onError([=](NetworkResult result) {
qCWarning(chatterinoTwitch)
<< "[TwitchAccounts::autoModDeny] Error" << result.status();
})
.execute();
case HelixAutoModMessageError::UserNotAuthorized: {
errorMessage +=
"you don't have permission to perform that action";
}
break;
case HelixAutoModMessageError::MessageNotFound: {
errorMessage += "target message not found.";
}
break;
// This would most likely happen if the service is down, or if the JSON payload returned has changed format
case HelixAutoModMessageError::Unknown:
default: {
errorMessage += "an unknown error occured.";
}
break;
}
channel->addMessage(makeSystemMessage(errorMessage));
});
}
void TwitchAccount::loadEmoteSetData(std::shared_ptr<EmoteSet> emoteSet)