diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d87404dd..382cbb329 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ - Minor: Added link back to original message that was deleted. (#3953) - Minor: Migrate /color command to Helix API. (#3988) - Minor: Migrate /clear command to Helix API. (#3994) +- Minor: Migrate /delete command to Helix API. (#3999) - Bugfix: Fix crash that can occur when closing and quickly reopening a split, then running a command. (#3852) - Bugfix: Connection to Twitch PubSub now recovers more reliably. (#3643, #3716) - Bugfix: Fix crash that can occur when changing channels. (#3799) diff --git a/src/controllers/commands/CommandController.cpp b/src/controllers/commands/CommandController.cpp index d04e4c05e..c84a6458f 100644 --- a/src/controllers/commands/CommandController.cpp +++ b/src/controllers/commands/CommandController.cpp @@ -1074,44 +1074,6 @@ void CommandController::initialize(Settings &, Paths &paths) return ""; }); - this->registerCommand( - "/delete", [](const QStringList &words, ChannelPtr channel) -> QString { - // This is a wrapper over the standard Twitch /delete command - // We use this to ensure the user gets better error messages for missing or malformed arguments - if (words.size() < 2) - { - channel->addMessage( - makeSystemMessage("Usage: /delete - Deletes the " - "specified message.")); - return ""; - } - - auto messageID = words.at(1); - auto uuid = QUuid(messageID); - if (uuid.isNull()) - { - // The message id must be a valid UUID - channel->addMessage(makeSystemMessage( - QString("Invalid msg-id: \"%1\"").arg(messageID))); - return ""; - } - - auto msg = channel->findMessage(messageID); - if (msg != nullptr) - { - if (msg->loginName == channel->getName() && - !channel->isBroadcaster()) - { - channel->addMessage(makeSystemMessage( - "You cannot delete the broadcaster's messages unless " - "you are the broadcaster.")); - return ""; - } - } - - return QString("/delete ") + messageID; - }); - this->registerCommand("/raw", [](const QStringList &words, ChannelPtr) { getApp()->twitch->sendRawMessage(words.mid(1).join(" ")); return ""; @@ -1333,7 +1295,7 @@ void CommandController::initialize(Settings &, Paths &paths) break; case HelixDeleteChatMessagesError::Forwarded: { - errorMessage += message + "."; + errorMessage += message; } break; @@ -1355,6 +1317,44 @@ void CommandController::initialize(Settings &, Paths &paths) (void)words; // unused return deleteMessages(channel, QString()); }); + + this->registerCommand("/delete", [deleteMessages](const QStringList &words, + auto channel) { + // This is a wrapper over the Helix delete messages endpoint + // We use this to ensure the user gets better error messages for missing or malformed arguments + if (words.size() < 2) + { + channel->addMessage( + makeSystemMessage("Usage: /delete - Deletes the " + "specified message.")); + return ""; + } + + auto messageID = words.at(1); + auto uuid = QUuid(messageID); + if (uuid.isNull()) + { + // The message id must be a valid UUID + channel->addMessage(makeSystemMessage( + QString("Invalid msg-id: \"%1\"").arg(messageID))); + return ""; + } + + auto msg = channel->findMessage(messageID); + if (msg != nullptr) + { + if (msg->loginName == channel->getName() && + !channel->isBroadcaster()) + { + channel->addMessage(makeSystemMessage( + "You cannot delete the broadcaster's messages unless " + "you are the broadcaster.")); + return ""; + } + } + + return deleteMessages(channel, messageID); + }); } void CommandController::save() diff --git a/src/providers/twitch/api/Helix.cpp b/src/providers/twitch/api/Helix.cpp index 8726424e8..68bb96c08 100644 --- a/src/providers/twitch/api/Helix.cpp +++ b/src/providers/twitch/api/Helix.cpp @@ -887,6 +887,13 @@ void Helix::deleteChatMessages( } break; + case 400: { + // These errors are generally well formatted, so we just forward them. + // This is currently undocumented behaviour, see: https://github.com/twitchdev/issues/issues/660 + failureCallback(Error::Forwarded, message); + } + break; + case 403: { // 403 endpoint means the user does not have permission to perform this action in that channel // Most likely to missing moderator permissions