Migrate /clear command to Helix API (#3994)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
@@ -1269,6 +1269,92 @@ void CommandController::initialize(Settings &, Paths &paths)
|
||||
|
||||
return "";
|
||||
});
|
||||
|
||||
auto deleteMessages = [](auto channel, const QString &messageID) {
|
||||
const auto *commandName = messageID.isEmpty() ? "/clear" : "/delete";
|
||||
auto *twitchChannel = dynamic_cast<TwitchChannel *>(channel.get());
|
||||
if (twitchChannel == nullptr)
|
||||
{
|
||||
channel->addMessage(makeSystemMessage(
|
||||
QString("The %1 command only works in Twitch channels")
|
||||
.arg(commandName)));
|
||||
return "";
|
||||
}
|
||||
|
||||
auto user = getApp()->accounts->twitch.getCurrent();
|
||||
|
||||
// Avoid Helix calls without Client ID and/or OAuth Token
|
||||
if (user->isAnon())
|
||||
{
|
||||
channel->addMessage(makeSystemMessage(
|
||||
QString("You must be logged in to use the %1 command.")
|
||||
.arg(commandName)));
|
||||
return "";
|
||||
}
|
||||
|
||||
getHelix()->deleteChatMessages(
|
||||
twitchChannel->roomId(), user->getUserId(), messageID,
|
||||
[]() {
|
||||
// Success handling, we do nothing: IRC/pubsub-edge will dispatch the correct
|
||||
// events to update state for us.
|
||||
},
|
||||
[channel, messageID](auto error, auto message) {
|
||||
QString errorMessage =
|
||||
QString("Failed to delete chat messages - ");
|
||||
|
||||
switch (error)
|
||||
{
|
||||
case HelixDeleteChatMessagesError::UserMissingScope: {
|
||||
errorMessage +=
|
||||
"Missing required scope. Re-login with your "
|
||||
"account and try again.";
|
||||
}
|
||||
break;
|
||||
|
||||
case HelixDeleteChatMessagesError::UserNotAuthorized: {
|
||||
errorMessage +=
|
||||
"you don't have permission to perform that action.";
|
||||
}
|
||||
break;
|
||||
|
||||
case HelixDeleteChatMessagesError::MessageUnavailable: {
|
||||
// Override default message prefix to match with IRC message format
|
||||
errorMessage =
|
||||
QString(
|
||||
"The message %1 does not exist, was deleted, "
|
||||
"or is too old to be deleted.")
|
||||
.arg(messageID);
|
||||
}
|
||||
break;
|
||||
|
||||
case HelixDeleteChatMessagesError::UserNotAuthenticated: {
|
||||
errorMessage += "you need to re-authenticate.";
|
||||
}
|
||||
break;
|
||||
|
||||
case HelixDeleteChatMessagesError::Forwarded: {
|
||||
errorMessage += message + ".";
|
||||
}
|
||||
break;
|
||||
|
||||
case HelixDeleteChatMessagesError::Unknown:
|
||||
default: {
|
||||
errorMessage += "An unknown error has occurred.";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
channel->addMessage(makeSystemMessage(errorMessage));
|
||||
});
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
this->registerCommand(
|
||||
"/clear", [deleteMessages](const QStringList &words, auto channel) {
|
||||
(void)words; // unused
|
||||
return deleteMessages(channel, QString());
|
||||
});
|
||||
}
|
||||
|
||||
void CommandController::save()
|
||||
|
||||
Reference in New Issue
Block a user