From 8bb34326d10de3a5427c444fa149c477f33bef78 Mon Sep 17 00:00:00 2001 From: Choco Date: Sun, 22 Mar 2026 12:09:34 +0800 Subject: [PATCH] Add settings reset command for per-setting defaults Introduces a settings reset subcommand with choices so admins can clear one guild override at a time via MongoDB $unset, with live player sync for volume and duplicate-track defaults. Adds settings.actions.resetDone across language files and optional reset aliases (restore, defaults) in settings examples. --- cogs/settings.py | 39 +++++++++++++++++++++++++++++++++++++++ langs/DE.json | 4 +++- langs/EN.json | 4 +++- langs/ES.json | 4 +++- langs/FR.json | 4 +++- langs/JA.json | 4 +++- langs/KO.json | 4 +++- langs/PL.json | 4 +++- langs/RU.json | 4 +++- langs/UA.json | 4 +++- langs/VN.json | 4 +++- langs/ZHCN.json | 4 +++- langs/ZHTW.json | 4 +++- local_langs/es-419.json | 5 ++++- local_langs/es-ES.json | 5 ++++- local_langs/zh-CN.json | 5 ++++- local_langs/zh-TW.json | 5 ++++- update.py | 2 +- 18 files changed, 92 insertions(+), 17 deletions(-) diff --git a/cogs/settings.py b/cogs/settings.py index c0c7663..7eaaa62 100644 --- a/cogs/settings.py +++ b/cogs/settings.py @@ -38,6 +38,23 @@ from voicelink.views import DebugView, HelpView, EmbedBuilderView from voicelink.placeholders import PlayerPlaceholder from voicelink.utils import format_ms, format_bytes, dispatch_message, send_localized_message +_RESET_LABELS: dict[str, str] = { + "prefix": "prefix", + "language": "lang", + "dj role": "dj", + "queue mode": "queue_type", + "24/7 mode": "24/7", + "vote bypass": "disabled_vote", + "default volume": "volume", + "music controller": "controller", + "duplicate tracks": "duplicate_track", + "controller messages": "controller_msg", + "silent messages": "silent_msg", + "stage announce template": "stage_announce_template", + "song request channel": "music_request_channel", + "custom controller embeds": "default_controller" +} + def status_icon(status: bool) -> str: return "✅" if status else "❌" @@ -295,6 +312,28 @@ class Settings(commands.Cog, name="settings"): }}}) await send_localized_message(ctx, "songRequest.channelCreated", channel.mention) + @settings.command(name="reset", aliases=get_aliases("reset")) + @app_commands.describe(setting="Which setting to restore to defaults (removes this guild override)") + @app_commands.choices(setting=[ + app_commands.Choice(name=label.capitalize(), value=label) + for label in _RESET_LABELS.keys() + ]) + @commands.has_permissions(manage_guild=True) + @commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild) + async def reset_setting(self, ctx: commands.Context, *, setting: str): + "Remove one guild setting override so the bot uses its default again." + setting_key = _RESET_LABELS.get(setting.lower()) + if not setting_key: + return await send_localized_message(ctx, "settings.actions.resetNotFound", ", ".join(_RESET_LABELS.keys())) + + await MongoDBHandler.update_settings(ctx.guild.id, {"$unset": {setting_key: ""}}) + player: voicelink.Player = ctx.guild.voice_client + if setting_key == "volume" and player: + await player.set_volume(100, ctx.author) + elif setting_key == "duplicate_track" and player: + player.queue._allow_duplicate = True + await send_localized_message(ctx, "settings.actions.resetDone", setting.capitalize()) + @app_commands.command(name="debug") async def debug(self, interaction: discord.Interaction): if interaction.user.id not in voicelink.Config().bot_access_user: diff --git a/langs/DE.json b/langs/DE.json index 2eae5e3..62c4223 100644 --- a/langs/DE.json +++ b/langs/DE.json @@ -121,7 +121,9 @@ "controllerToggled": "Der Musikcontroller wurde erfolgreich `{0}`", "duplicateTrackToggled": "Du hast das hinzufügen von doppelten Tracks in der Warteschlange `{0}`", "controllerMsgToggled": "Nachrichten vom Musik-Controller wurden erfolgreich `{0}`", - "silentMsgToggled": "Sie haben {0} stille Nachrichten." + "silentMsgToggled": "Sie haben {0} stille Nachrichten.", + "resetDone": "`{0}` wurde auf die Standardwerte des Servers zurückgesetzt.", + "resetNotFound": "Ungültiger Einstellungsname. Bitte verwende eine der folgenden Einstellungen: {0}" }, "menu": "Servereinstellungen | {0}", "basic": { diff --git a/langs/EN.json b/langs/EN.json index ed3654d..ba729ed 100644 --- a/langs/EN.json +++ b/langs/EN.json @@ -121,7 +121,9 @@ "controllerToggled": "You now have `{0}` the music controller.", "duplicateTrackToggled": "You have now `{0}` duplicate track prevention.", "controllerMsgToggled": "You now have `{0}` messages from the music controller.", - "silentMsgToggled": "You have {0} silent messaging." + "silentMsgToggled": "You have {0} silent messaging.", + "resetDone": "Reset `{0}` to server defaults.", + "resetNotFound": "Invalid setting name. Please use one of the following: {0}" }, "menu": "Server Settings | {0}", "basic": { diff --git a/langs/ES.json b/langs/ES.json index d3b5d41..8f6dc38 100644 --- a/langs/ES.json +++ b/langs/ES.json @@ -121,7 +121,9 @@ "controllerToggled": "Ahora tienes `{0}` el controlador de música.", "duplicateTrackToggled": "Ahora tienes `{0}` para evitar que se agreguen pistas duplicadas a la cola.", "controllerMsgToggled": "Ahora tiene `{0}` mensajes del controlador de música.", - "silentMsgToggled": "Tienes {0} mensajes silenciosos." + "silentMsgToggled": "Tienes {0} mensajes silenciosos.", + "resetDone": "Reset `{0}` to server defaults.", + "resetNotFound": "Nombre de opción inválido. Por favor, use una de las siguientes opciones: {0}" }, "menu": "Configuración del servidor | {0}", "basic": { diff --git a/langs/FR.json b/langs/FR.json index 813f389..08383d2 100644 --- a/langs/FR.json +++ b/langs/FR.json @@ -121,7 +121,9 @@ "controllerToggled": "Vous avez maintenant `{0}` le contrôleur de musique.", "duplicateTrackToggled": "Vous avez maintenant `{0}` la prévention des morceaux en double.", "controllerMsgToggled": "Vous avez maintenant `{0}` les messages du contrôleur musical.", - "silentMsgToggled": "Vous avez {0} messages silencieux." + "silentMsgToggled": "Vous avez {0} messages silencieux.", + "resetDone": "`{0}` a été réinitialisé aux paramètres par défaut du serveur.", + "resetNotFound": "Nom d'option invalide. Veuillez utiliser une des options suivantes: {0}" }, "menu": "Paramètres du serveur | {0}", "basic": { diff --git a/langs/JA.json b/langs/JA.json index 891a329..3552488 100644 --- a/langs/JA.json +++ b/langs/JA.json @@ -121,7 +121,9 @@ "controllerToggled": "今、音楽コントローラーは「{0}」です。", "duplicateTrackToggled": "今、キュー内の重複トラックを防止するための設定は「{0}」です。", "controllerMsgToggled": "現在、音楽コントローラーから `{0}` 件のメッセージがあります。", - "silentMsgToggled": "あなたは{0}サイレントメッセージを持っています。" + "silentMsgToggled": "あなたは{0}サイレントメッセージを持っています。", + "resetDone": "`{0}`をサーバーのデフォルトにリセットしました。", + "resetNotFound": "無効な設定名です。次のいずれかを使用してください: {0}" }, "menu": "サーバー設定| {0}", "basic": { diff --git a/langs/KO.json b/langs/KO.json index e3445a1..bd1d813 100644 --- a/langs/KO.json +++ b/langs/KO.json @@ -121,7 +121,9 @@ "controllerToggled": "이제 음악 컨트롤러가 `{0}`(으)로 설정되었습니다.", "duplicateTrackToggled": "이제 대기열에서 중복된 트랙을 방지하기 위해 `{0}`(으)로 설정되었습니다.", "controllerMsgToggled": "이제 음악 컨트롤러로부터 `{0}` 메시지가 있습니다.", - "silentMsgToggled": "당신은 {0} 침묵 메시지를 사용하고 있습니다." + "silentMsgToggled": "당신은 {0} 침묵 메시지를 사용하고 있습니다.", + "resetDone": "`{0}`을(를) 서버 기본값으로 초기화했습니다.", + "resetNotFound": "잘못된 설정 이름입니다. 다음 중 하나를 사용하세요: {0}" }, "menu": "서버 설정 | {0}", "basic": { diff --git a/langs/PL.json b/langs/PL.json index 2b43c8a..8b97d2a 100644 --- a/langs/PL.json +++ b/langs/PL.json @@ -121,7 +121,9 @@ "controllerToggled": "Kontroler muzyki: `{0}`", "duplicateTrackToggled": "Unikanie duplikowania pozycji w kolejce: `{0}`", "controllerMsgToggled": "Wiadomości od kontrolera muzyki: `{0}`", - "silentMsgToggled": "Masz {0} ciche wiadomości." + "silentMsgToggled": "Masz {0} ciche wiadomości.", + "resetDone": "`{0}` zostało zresetowane na domyślne ustawienia serwera.", + "resetNotFound": "Nieprawidłowa nazwa ustawienia. Proszę użyć jednej z następujących opcji: {0}" }, "menu": "Ustawnienia serwera | {0}", "basic": { diff --git a/langs/RU.json b/langs/RU.json index ab51b37..b4957d3 100644 --- a/langs/RU.json +++ b/langs/RU.json @@ -121,7 +121,9 @@ "controllerToggled": "Теперь у вас `{0}` контроллер музыки.", "duplicateTrackToggled": "Теперь у вас `{0}` фильтр дубликатов в очереди.", "controllerMsgToggled": "Теперь у вас `{0}` сообщения от плеера.", - "silentMsgToggled": "У вас {0} тихих сообщений." + "silentMsgToggled": "У вас {0} тихих сообщений.", + "resetDone": "`{0}` установлено на значения по умолчанию сервера.", + "resetNotFound": "Неверное имя настройки. Пожалуйста, используйте одно из следующих значений: {0}" }, "menu": "Настройки сервера | {0}", "basic": { diff --git a/langs/UA.json b/langs/UA.json index 0b5e385..bbdf7cb 100644 --- a/langs/UA.json +++ b/langs/UA.json @@ -121,7 +121,9 @@ "controllerToggled": "Тепер у вас `{0}` контролер музики.", "duplicateTrackToggled": "Тепер у вас `{0}` запобігання дублюванню треку в черзі.", "controllerMsgToggled": "Тепер у вас `{0}` повідомлення від контролера музики.", - "silentMsgToggled": "У вас {0} тихих повідомлень." + "silentMsgToggled": "У вас {0} тихих повідомлень.", + "resetDone": "`{0}` встановлено на значення за замовчуванням сервера.", + "resetNotFound": "Неправильна назва налаштування. Будь ласка, використовуйте одне з наведених нижче значень: {0}" }, "menu": "Налаштування сервера | {0}", "basic": { diff --git a/langs/VN.json b/langs/VN.json index 2574761..4112bc3 100644 --- a/langs/VN.json +++ b/langs/VN.json @@ -121,7 +121,9 @@ "controllerToggled": "Bây giờ bạn đã `{0}` bộ điều khiển nhạc.", "duplicateTrackToggled": "Bây giờ bạn đã `{0}` tính năng ngăn chặn bài hát trùng lặp.", "controllerMsgToggled": "Bây giờ bạn đã `{0}` tin nhắn từ bộ điều khiển nhạc.", - "silentMsgToggled": "Bạn có {0} tin nhắn im lặng." + "silentMsgToggled": "Bạn có {0} tin nhắn im lặng.", + "resetDone": "Reset `{0}` to server defaults.", + "resetNotFound": "Tên cài đặt không hợp lệ. Vui lòng sử dụng một trong các tùy chọn sau: {0}" }, "menu": "Cài Đặt Máy Chủ | {0}", "basic": { diff --git a/langs/ZHCN.json b/langs/ZHCN.json index a506635..a361a59 100644 --- a/langs/ZHCN.json +++ b/langs/ZHCN.json @@ -121,7 +121,9 @@ "controllerToggled": "您现在已 `{0}` 音乐控制器。", "duplicateTrackToggled": "您已 `{0}` 重复曲目预防功能。", "controllerMsgToggled": "您现在已 `{0}` 来自音乐控制器的消息。", - "silentMsgToggled": "您已 {0} 静默消息。" + "silentMsgToggled": "您已 {0} 静默消息。", + "resetDone": "`{0}` 已重置为服务器默认值。", + "resetNotFound": "无效的设置名称。请使用以下之一: {0}" }, "menu": "服务器设置 | {0}", "basic": { diff --git a/langs/ZHTW.json b/langs/ZHTW.json index 5293eeb..27d45e5 100644 --- a/langs/ZHTW.json +++ b/langs/ZHTW.json @@ -121,7 +121,9 @@ "controllerToggled": "您現在已 `{0}` 音樂控制器。", "duplicateTrackToggled": "您已 `{0}` 重複曲目防止功能。", "controllerMsgToggled": "您現在已 `{0}` 來自音樂控制器的訊息。", - "silentMsgToggled": "您已 {0} 靜音訊息。" + "silentMsgToggled": "您已 {0} 靜音訊息。", + "resetDone": "`{0}` 已重置為伺服器預設值。", + "resetNotFound": "無效的設定名稱。請使用以下之一: {0}" }, "menu": "伺服器設定 | {0}", "basic": { diff --git a/local_langs/es-419.json b/local_langs/es-419.json index c5f616e..08342be 100644 --- a/local_langs/es-419.json +++ b/local_langs/es-419.json @@ -232,5 +232,8 @@ "stageannounce": "anuncio_escenario", "Soundcloud": "Soundcloud", "Fairqueue":"ColaJusta", - "togglecontroller":"cambiarcontrolador" + "togglecontroller":"cambiarcontrolador", + "reset": "reiniciar", + "Which setting to restore to defaults (removes this guild override)": "Qué configuración restaurar a los valores por defecto (elimina esta sobreescritura de servidor)", + "Remove one guild setting override so the bot uses its default again.": "Elimina una sobreescritura de configuración de servidor para que el bot use sus valores por defecto nuevamente." } diff --git a/local_langs/es-ES.json b/local_langs/es-ES.json index 831a9a3..ac5fdb9 100644 --- a/local_langs/es-ES.json +++ b/local_langs/es-ES.json @@ -232,5 +232,8 @@ "stageannounce": "anuncio_escenario", "Soundcloud": "Soundcloud", "Fairqueue":"ColaJusta", - "togglecontroller":"cambiarcontrolador" + "togglecontroller":"cambiarcontrolador", + "reset": "reiniciar", + "Which setting to restore to defaults (removes this guild override)": "Qué configuración restaurar a los valores por defecto (elimina esta sobreescritura de servidor)", + "Remove one guild setting override so the bot uses its default again.": "Elimina una sobreescritura de configuración de servidor para que el bot use sus valores por defecto nuevamente." } diff --git a/local_langs/zh-CN.json b/local_langs/zh-CN.json index 43e37a6..b8d1bcb 100644 --- a/local_langs/zh-CN.json +++ b/local_langs/zh-CN.json @@ -232,5 +232,8 @@ "stageannounce": "舞台公告", "Soundcloud": "SoundCloud", "Fairqueue": "公平队列", - "togglecontroller": "切换控制器" + "togglecontroller": "切换控制器", + "reset": "重置", + "Which setting to restore to defaults (removes this guild override)": "要重置为默认值的设置(移除此服务器覆盖)", + "Remove one guild setting override so the bot uses its default again.": "移除一个服务器设置覆盖,使机器人使用其默认值。" } \ No newline at end of file diff --git a/local_langs/zh-TW.json b/local_langs/zh-TW.json index b0ee859..70de513 100644 --- a/local_langs/zh-TW.json +++ b/local_langs/zh-TW.json @@ -232,5 +232,8 @@ "stageannounce": "舞台公告", "Soundcloud": "Soundcloud", "Fairqueue": "公平隊列", - "togglecontroller": "切換控制器" + "togglecontroller": "切換控制器", + "reset": "重置", + "Which setting to restore to defaults (removes this guild override)": "要重置為預設值的設定(移除此伺服器覆蓋)", + "Remove one guild setting override so the bot uses its default again.": "移除一個伺服器設定覆蓋,使機器人使用其預設值。" } \ No newline at end of file diff --git a/update.py b/update.py index 330125e..424bf56 100644 --- a/update.py +++ b/update.py @@ -31,7 +31,7 @@ import subprocess from io import BytesIO ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) -__version__ = "v2.7.3b1" +__version__ = "v2.7.3b2" # URLs for update and migration PYTHON_CMD_NAME = os.path.basename(sys.executable)