feat: delete messages from context menu (#5956)

This commit is contained in:
nerix
2025-02-15 19:29:25 +01:00
committed by GitHub
parent 9afd60534a
commit dd6f204adc
8 changed files with 89 additions and 55 deletions
+65
View File
@@ -1897,6 +1897,71 @@ void TwitchChannel::createClip()
});
}
void TwitchChannel::deleteMessagesAs(const QString &messageID,
TwitchAccount *moderator)
{
getHelix()->deleteChatMessages(
this->roomId(), moderator->getUserId(), messageID,
[]() {
// Success handling, we do nothing: IRC/pubsub will dispatch the correct
// events to update state for us.
},
[lifetime{this->weak_from_this()}, messageID](auto error,
const auto &message) {
auto self =
std::dynamic_pointer_cast<TwitchChannel>(lifetime.lock());
if (!self)
{
return;
}
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;
}
self->addSystemMessage(errorMessage);
});
}
std::optional<EmotePtr> TwitchChannel::twitchBadge(const QString &set,
const QString &version) const
{
+7
View File
@@ -59,6 +59,7 @@ struct HelixGlobalBadges;
using HelixChannelBadges = HelixGlobalBadges;
class TwitchIrcServer;
class TwitchAccount;
const int MAX_QUEUED_REDEMPTIONS = 16;
@@ -164,6 +165,12 @@ public:
QString getCurrentStreamID() const override;
void createClip();
/// Delete the message with the specified ID as a moderator.
///
/// If the ID is empty, all messages will be deleted, effectively clearing
/// the chat.
void deleteMessagesAs(const QString &messageID, TwitchAccount *moderator);
// Data
const QString &subscriptionUrl();
const QString &channelUrl();
+1 -1
View File
@@ -647,7 +647,7 @@ void TwitchIrcServer::initialize()
{
// Gray out approve/deny button upon "ALLOWED" and "DENIED" statuses
// They are versions of automod_message_(denied|approved) but for mods.
chan->deleteMessage("automod_" + msg.messageID);
chan->disableMessage("automod_" + msg.messageID);
}
}
break;