From 1d06086bb9b3e0c606d03faf08da6cb1c94bb2f5 Mon Sep 17 00:00:00 2001 From: Jacob Alexander Thompson Date: Sun, 28 Sep 2025 03:04:08 -0700 Subject: [PATCH] feat: add setting for character limit of truncated deleted messages (#6491) --- CHANGELOG.md | 1 + src/messages/MessageBuilder.cpp | 5 +++-- src/providers/twitch/eventsub/MessageBuilder.cpp | 7 ++++--- src/singletons/Settings.hpp | 7 +++++++ src/widgets/settingspages/GeneralPage.cpp | 16 ++++++++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb0576fe..8b9039a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unversioned - Minor: Fixed usercard resizing improperly without recent messages. (#6496) +- Minor: Added setting for character limit of deleted messages. (#6491) - Dev: Update release documentation. (#6498) - Dev: Make code sanitizers opt in with the `CHATTERINO_SANITIZER_SUPPORT` CMake option. After that's enabled, use the `SANITIZE_*` flag to enable individual sanitizers. (#6493) - Dev: Remove unused QTextCodec includes. (#6487) diff --git a/src/messages/MessageBuilder.cpp b/src/messages/MessageBuilder.cpp index 05123f2e..4a68cda8 100644 --- a/src/messages/MessageBuilder.cpp +++ b/src/messages/MessageBuilder.cpp @@ -1257,9 +1257,10 @@ MessagePtr MessageBuilder::makeDeletionMessageFromIRC( MessageColor::System); auto deletedMessageText = originalMessage->messageText; - if (deletedMessageText.length() > 50) + auto limit = getSettings()->deletedMessageLengthLimit.getValue(); + if (limit > 0 && deletedMessageText.length() > limit) { - deletedMessageText = deletedMessageText.left(50) + "…"; + deletedMessageText = deletedMessageText.left(limit) + "…"; } builder diff --git a/src/providers/twitch/eventsub/MessageBuilder.cpp b/src/providers/twitch/eventsub/MessageBuilder.cpp index 984838c9..3a692cf7 100644 --- a/src/providers/twitch/eventsub/MessageBuilder.cpp +++ b/src/providers/twitch/eventsub/MessageBuilder.cpp @@ -331,14 +331,15 @@ void makeModerateMessage( builder.emplaceSystemTextAndUpdate("saying:", text); - if (action.messageBody.view().length() > 50) + auto limit = getSettings()->deletedMessageLengthLimit.getValue(); + if (limit > 0 && action.messageBody.view().length() > limit) { builder - .emplace(action.messageBody.qt().left(50) + "…", + .emplace(action.messageBody.qt().left(limit) + "…", MessageElementFlag::Text, MessageColor::Text) ->setLink({Link::JumpToMessage, action.messageID.qt()}); - text.append(action.messageBody.qt().left(50) + "…"); + text.append(action.messageBody.qt().left(limit) + "…"); } else { diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp index aeff2d6f..aa4eea5b 100644 --- a/src/singletons/Settings.hpp +++ b/src/singletons/Settings.hpp @@ -320,6 +320,13 @@ public: true, }; + /// The maximum length the contents of a deleted message can be + /// before we truncate it in the chat + IntSetting deletedMessageLengthLimit = { + "/behaviour/deletedMessageLengthLimit", + 50, + }; + // Auto-completion BoolSetting onlyFetchChattersForSmallerStreamers = { "/behaviour/autocompletion/onlyFetchChattersForSmallerStreamers", true}; diff --git a/src/widgets/settingspages/GeneralPage.cpp b/src/widgets/settingspages/GeneralPage.cpp index a9016f4b..7778b946 100644 --- a/src/widgets/settingspages/GeneralPage.cpp +++ b/src/widgets/settingspages/GeneralPage.cpp @@ -556,6 +556,22 @@ void GeneralPage::initLayout(GeneralPageView &layout) [](auto args) { return fuzzyToInt(args.value, 0); }); + layout.addDropdown( + "Limit length of deleted messages", + {"No limit", "50 characters", "100 characters", "200 characters", + "300 characters", "400 characters"}, + s.deletedMessageLengthLimit, + [](auto val) { + return val ? QString::number(val) + " characters" + : QString("No limit"); + }, + [](const auto &args) { + return fuzzyToInt(args.value, 0); + }, + true, + {"Limits the amount of characters displayed in deleted messages " + "when announced via system message."}); + layout.addSeparator(); SettingWidget::checkbox("Draw a line below the most recent message before "