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.
This commit is contained in:
Choco
2026-03-22 12:09:34 +08:00
parent 28cb2a910e
commit 8bb34326d1
18 changed files with 92 additions and 17 deletions

View File

@@ -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:

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -121,7 +121,9 @@
"controllerToggled": "今、音楽コントローラーは「{0}」です。",
"duplicateTrackToggled": "今、キュー内の重複トラックを防止するための設定は「{0}」です。",
"controllerMsgToggled": "現在、音楽コントローラーから `{0}` 件のメッセージがあります。",
"silentMsgToggled": "あなたは{0}サイレントメッセージを持っています。"
"silentMsgToggled": "あなたは{0}サイレントメッセージを持っています。",
"resetDone": "`{0}`をサーバーのデフォルトにリセットしました。",
"resetNotFound": "無効な設定名です。次のいずれかを使用してください: {0}"
},
"menu": "サーバー設定| {0}",
"basic": {

View File

@@ -121,7 +121,9 @@
"controllerToggled": "이제 음악 컨트롤러가 `{0}`(으)로 설정되었습니다.",
"duplicateTrackToggled": "이제 대기열에서 중복된 트랙을 방지하기 위해 `{0}`(으)로 설정되었습니다.",
"controllerMsgToggled": "이제 음악 컨트롤러로부터 `{0}` 메시지가 있습니다.",
"silentMsgToggled": "당신은 {0} 침묵 메시지를 사용하고 있습니다."
"silentMsgToggled": "당신은 {0} 침묵 메시지를 사용하고 있습니다.",
"resetDone": "`{0}`을(를) 서버 기본값으로 초기화했습니다.",
"resetNotFound": "잘못된 설정 이름입니다. 다음 중 하나를 사용하세요: {0}"
},
"menu": "서버 설정 | {0}",
"basic": {

View File

@@ -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": {

View File

@@ -121,7 +121,9 @@
"controllerToggled": "Теперь у вас `{0}` контроллер музыки.",
"duplicateTrackToggled": "Теперь у вас `{0}` фильтр дубликатов в очереди.",
"controllerMsgToggled": "Теперь у вас `{0}` сообщения от плеера.",
"silentMsgToggled": "У вас {0} тихих сообщений."
"silentMsgToggled": "У вас {0} тихих сообщений.",
"resetDone": "`{0}` установлено на значения по умолчанию сервера.",
"resetNotFound": "Неверное имя настройки. Пожалуйста, используйте одно из следующих значений: {0}"
},
"menu": "Настройки сервера | {0}",
"basic": {

View File

@@ -121,7 +121,9 @@
"controllerToggled": "Тепер у вас `{0}` контролер музики.",
"duplicateTrackToggled": "Тепер у вас `{0}` запобігання дублюванню треку в черзі.",
"controllerMsgToggled": "Тепер у вас `{0}` повідомлення від контролера музики.",
"silentMsgToggled": "У вас {0} тихих повідомлень."
"silentMsgToggled": "У вас {0} тихих повідомлень.",
"resetDone": "`{0}` встановлено на значення за замовчуванням сервера.",
"resetNotFound": "Неправильна назва налаштування. Будь ласка, використовуйте одне з наведених нижче значень: {0}"
},
"menu": "Налаштування сервера | {0}",
"basic": {

View File

@@ -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": {

View File

@@ -121,7 +121,9 @@
"controllerToggled": "您现在已 `{0}` 音乐控制器。",
"duplicateTrackToggled": "您已 `{0}` 重复曲目预防功能。",
"controllerMsgToggled": "您现在已 `{0}` 来自音乐控制器的消息。",
"silentMsgToggled": "您已 {0} 静默消息。"
"silentMsgToggled": "您已 {0} 静默消息。",
"resetDone": "`{0}` 已重置为服务器默认值。",
"resetNotFound": "无效的设置名称。请使用以下之一: {0}"
},
"menu": "服务器设置 | {0}",
"basic": {

View File

@@ -121,7 +121,9 @@
"controllerToggled": "您現在已 `{0}` 音樂控制器。",
"duplicateTrackToggled": "您已 `{0}` 重複曲目防止功能。",
"controllerMsgToggled": "您現在已 `{0}` 來自音樂控制器的訊息。",
"silentMsgToggled": "您已 {0} 靜音訊息。"
"silentMsgToggled": "您已 {0} 靜音訊息。",
"resetDone": "`{0}` 已重置為伺服器預設值。",
"resetNotFound": "無效的設定名稱。請使用以下之一: {0}"
},
"menu": "伺服器設定 | {0}",
"basic": {

View File

@@ -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."
}

View File

@@ -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."
}

View File

@@ -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.": "移除一个服务器设置覆盖,使机器人使用其默认值。"
}

View File

@@ -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.": "移除一個伺服器設定覆蓋,使機器人使用其預設值。"
}

View File

@@ -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)