Réécriture complète 4.0
Build and Push Docker Image / build-and-push (push) Failing after 6m16s

This commit is contained in:
Zachary Guénot
2025-06-09 16:29:12 +02:00
parent f2c6388da6
commit ddd617317c
133 changed files with 8092 additions and 4332 deletions
+537
View File
@@ -0,0 +1,537 @@
{
"common": {
"database_not_found": "Database data does not exist!",
"database_exists": "Database data already exists!",
"database_initialized": "Database data successfully initialized!",
"command_owner_only": "This command can only be used by the bot owner.",
"command_server_only": "This command must be used in a server.",
"private_message_not_available": "This command is not available in private messages.",
"error_occurred": "An error occurred!",
"success": "Success!",
"failed": "Failed!",
"none": "None",
"unknown": "Unknown",
"configure": "Configure",
"enable": "Enable",
"disable": "Disable",
"add": "Add",
"remove": "Remove",
"list": "List",
"status": "Status",
"channel": "Channel",
"no_channel_selected": "No channel selected!",
"channel_configured_success": "✅ Channel configured successfully!",
"invalid_text_channel": "Please provide a valid text channel!",
"invalid_channel_type": "Please provide a valid text channel!",
"no_permission": "You don't have permission to use this command."
},
"player": {
"common": {
"enabled": "✅ Enabled",
"disabled": "❌ Disabled",
"not_configured": "Not configured",
"channel_not_found": "Channel not found",
"configure_channel": "Configure Channel"
},
"track_skipped": "Song **{title}** by **{author}** skipped!",
"disconnect": "I've left the voice channel!",
"not_in_voice": "You're not in a voice channel, idiot!",
"not_in_same_voice": "You're not in my voice channel!",
"no_queue": "No queue is currently running, search for a song instead!",
"no_current_track": "No music is currently playing, search for one instead!",
"no_session": "No listening session in progress!",
"no_track": "No music currently playing!",
"track_added": "🎵 **{title}** has been added to the queue!",
"track_added_playlist": "🎵 **{count}** songs have been added to the queue!",
"invalid_search": "No results found for your search!",
"paused_status": "Playback paused",
"resumed_status": "Playback resumed",
"stopped_status": "Playback stopped",
"skipped": "Next song",
"previous": "Previous song",
"shuffled": "Queue shuffled",
"volume_max": "Volume is already at maximum!",
"volume_min": "Volume is already at minimum!",
"loop_off": "Loop disabled",
"loop_track": "Track loop enabled",
"loop_queue": "Queue loop enabled",
"loop_autoplay": "Autoplay enabled",
"no_lyrics_found": "No lyrics found!",
"no_audio_found": "No audio files found in this channel.",
"choose_audio_file": "Choose an audio file:",
"took_too_long": "You took too long to choose!",
"paused": "Music paused!",
"resumed": "Music resumed!",
"stopped": "Music stopped!",
"volume_changed": "🔊 | Volume changed to {volume}%!",
"volume_changed_down": "🔉 | Volume changed to {volume}%!",
"previous_played": "Previous music played!",
"uptime": "Uptime",
"requested_by": "Requested by {user}",
"next_track": "Next track",
"no_next_track": "None",
"no_track_found": "No music found for **{query}**!",
"music_restarted": "Restarting music after my restart...",
"now_playing": "Now playing **{title}** by **{author}**!",
"queue_empty": "Queue empty!",
"leaving_empty_channel": "I'm leaving the voice channel because it has been empty for too long.",
"no_queue_search_instead": "No queue currently active, search for music instead!",
"no_track_playing": "No music currently playing.",
"now_playing_no_queue": "Now playing: {track} \nNo music in the queue.",
"now_playing_with_queue": "Now playing: {track} \nCurrent queue: \n{tracks}",
"loading_track": "Loading music **{title}** by **{author}** on **{source}**...",
"duration": "Duration",
"source": "Source",
"volume": "Volume",
"progression": "Progress",
"progression_paused": "Progress (paused)",
"loop": "Loop",
"loop_modes": {
"off": "Off",
"track": "Track",
"queue": "Queue",
"autoplay": "Autoplay"
},
"sources": {
"spotify": "Spotify",
"youtube": "Youtube",
"unknown": "Unknown"
},
"disco": {
"title": "🪩 Disco Module Configuration",
"description": "Disco mode automatically updates the playback panel every 3 seconds",
"description_enabled": "Disco mode is enabled! Visual and audio effects will be applied during music playback.",
"description_disabled": "Disco mode is disabled. Enable it to enjoy visual and audio effects during music playback.",
"channel_not_configured": "No channel configured",
"channel_not_found": "Channel not found",
"enabled": "✅ Enabled",
"disabled": "❌ Disabled",
"configure_channel": "Configure Channel",
"configure_channel_first": "❌ Cannot enable Disco mode! Please first configure a channel with the **Configure Channel** button.",
"effects_applied": "Disco effects will be applied in {channel}.",
"select_channel": "Please select the channel where to apply Disco effects:",
"channel_configured_success": "Disco channel configured successfully! Effects will be applied in **{channel}**."
},
"queue": {
"title": "🎵 Queue",
"empty": "The queue is empty",
"current_track": "**Currently playing:** {track}",
"next_tracks": "**Next:**",
"track_entry": "{index}. {title} - {author}"
}
},
"twitch": {
"common": {
"enabled": "✅ Enabled",
"disabled": "❌ Disabled",
"not_configured": "Not configured",
"channel_not_found": "Channel not found",
"configure_channel": "Configure Channel"
},
"title": "🎮 Twitch Module Configuration",
"module_disabled": "The Twitch module is disabled!",
"module_disabled_activate": "Twitch module is disabled, please activate with `/twitch enable`!",
"channel_not_configured": "No channel configured",
"streamers_count": "{count} configured",
"no_streamers": "No streamers configured at the moment",
"streamer_not_found": "**{username}** is not a valid Twitch username!",
"user_not_found_id": "User not found for ID {id}",
"streamer_already_added": "**{username}** is already added as a streamer!",
"streamer_not_in_list": "**{username}** is not a streamer!",
"streamer_added": "**{username}** (ID {id}) has been added as a streamer!",
"streamer_removed": "**{username}** has been removed as a streamer!",
"no_streamers_to_remove": "No streamers to remove!",
"notifications_channel_set": "Twitch notifications will be sent to **{channel}**!",
"configure_channel_first": "Please configure a channel first with the **Configure Channel** button!",
"select_notification_channel": "Please select the channel where to send Twitch notifications:",
"select_notification_channel_placeholder": "Select a channel for notifications",
"select_streamer_to_remove": "Select the streamer to remove:",
"select_streamer_prompt": "Select the streamer to remove:",
"user_not_found": "User not found",
"fetch_error": "Fetch error",
"no_streamers_list": "No streamers are currently added!",
"streamer_removed_success": "✅ **{streamer}** has been successfully removed from the streamers list!",
"streamer_not_found_list": "Streamer not found!",
"no_streamer_selected": "No streamer selected!",
"add_streamer_command": "To add a streamer, use the command `/twitch streamer add <username>` with autocomplete.\nYou can also select a member to mention them in notifications.",
"managed_by": "Managed by {bot}",
"notifications_sent_to": "Twitch notifications will be sent to {channel}.",
"list": {
"title": "📋 Streamers List",
"empty_description": "No streamers configured at the moment",
"discord_not_associated": "Not associated",
"user_not_found": "User not found",
"fetch_error": "Fetch error",
"footer": "{count} streamer(s) configured"
},
"notification": {
"online": {
"everyone": "Hey @everyone!\n{streamer} is live on **Twitch**, come!",
"everyone_with_mention": "Hey @everyone!\n<@{discordId}> is live on **Twitch**, come!",
"title_unknown": "Unknown stream title",
"author": "🔴 {streamer} IS CURRENTLY LIVE! 🎥",
"description": "Playing {game} with {viewers} viewers"
},
"offline": {
"everyone": "Re @everyone!\n{streamer} has ended their stream on **Twitch**!",
"everyone_with_mention": "Re @everyone!\n<@{discordId}> has ended their stream on **Twitch**!",
"author": "⚫ IT'S OVER, THE STREAM LASTED {duration}! 📼",
"duration_unknown": "I DON'T KNOW HOW LONG"
}
},
"ready": {
"no_streamers_configured": "Twitch module is enabled but no channel is configured, please use `/twitch channel`!",
"user_not_found": "User with ID {userId} not found, skipping...",
"stream_restoration": "Restoring monitoring for {userName} (ID {userId}) - Active stream detected",
"monitoring_restored": "Monitoring successfully restored for {userName}",
"message_not_found": "Message not found for {userName}, cleaning up messageId",
"stream_offline_cleanup": "Offline stream detected for {userName}, cleaning up messageId",
"cleanup_error": "Error while cleaning up messageId for {userId}"
},
"logs": {
"user_fetch_error": "Error while fetching user for ID {userId}",
"listener_removed": "Listener removed for {streamerName} (ID {userId})",
"listener_removal_error": "Error while removing listener for {streamerName}"
}
},
"amp": {
"module_disabled": "AMP module is disabled, please activate with `/database edit guildAmp.enabled True`!",
"host_not_configured": "AMP host is not configured, please configure it first!",
"login_required": "You must login before performing another command!",
"logged_in": "You are connected to the panel as **{username}**!",
"instance_list": "List of {count} instances:",
"running": "Running",
"port": "Port",
"module": "Module",
"hosts_found": "{count} host(s) found!",
"success": "Ok!",
"manage_success": "Ok!",
"restart_success": "Ok!"
},
"freebox": {
"common": {
"enabled": "✅ Enabled",
"disabled": "❌ Disabled",
"not_configured": "Not configured",
"module_enabled": "The module is enabled!",
"module_disabled": "The module is disabled!",
"configured": "✅ Configured",
"not_configured_error": "❌ Not configured",
"general_error": "An error occurred while processing your request!"
},
"general": {
"module_disabled": "Freebox module is disabled, please activate with `/database edit guildFbx.enabled True`!",
"host_not_set": "Freebox host is not set, please set with `/database edit guildFbx.host <host>`!",
"version_not_set": "Freebox API version is not set, please set with `/database edit guildFbx.version <version>`!",
"app_token_not_set": "Freebox appToken is not set, please init the app with `/freebox init`!",
"incomplete_configuration": "Incomplete Freebox configuration! Check that module, host, version and token are configured.",
"user_denied_access": "The user denied the app access to the Freebox.",
"file_saved": "File saved, you can now interact with your Freebox!",
"no_file_sent": "No file was sent in your message!",
"no_message_sent": "No message was sent before the time limit!",
"send_ca_file": "Please send another message with the CA file attached, you have one minute.",
"invalid_action": "Invalid action!",
"invalid_enabled_value": "Invalid enabled value!"
},
"auth": {
"challenge_failed": "Failed to retrieve the challenge!",
"session_failed": "Failed to retrieve the session!",
"session_token_failed": "Failed to retrieve the session token!",
"track_id_failed": "Failed to retrieve the track ID, please try again later."
},
"api": {
"version_failed": "An error occurred while retrieving the API version: {error}",
"connection_failed": "Failed to retrieve the connection details!",
"connection_details": "Connection details:\n{details}"
},
"lcd": {
"details": "LCD configuration:\n{details}",
"config_failed": "Failed to retrieve LCD configuration!",
"managed_by_other_bot": "LED control is managed by another bot on this server!",
"leds_failed": "Failed to control LEDs!",
"leds_success": "LEDs {status} successfully!",
"config_title": "💡 Freebox LCD Status",
"led_strip": "🌈 LED Strip",
"led_strip_on": "✅ On",
"led_strip_off": "❌ Off",
"brightness": "🔆 Brightness",
"orientation": "📱 Orientation",
"orientation_portrait": "Portrait",
"orientation_landscape": "Landscape",
"auth_challenge_error": "❌ **Authentication Error**\nUnable to get challenge",
"auth_challenge_not_found": "❌ **Authentication Error**\nChallenge not found",
"auth_session_error": "❌ **Authentication Error**\nUnable to create session",
"auth_token_not_found": "❌ **Authentication Error**\nSession token not found",
"config_error": "❌ **LCD Error**\nUnable to retrieve LCD configuration",
"unexpected_error": "❌ **Error**\nAn unexpected error occurred"
},
"timer": {
"auto": "⏰ Automatic Timer",
"status": "**LED Timer Status:**\n- Status: {status}\n- Managed by: {managedBy}",
"times_required": "Morning and night times are required to enable the timer!",
"invalid_time_format": "Invalid time format! Use HH:MM format (e.g., 08:00, 22:30)",
"enabled": "✅ LED Timer enabled!\n🌅 Turn on: {morningTime}\n🌙 Turn off: {nightTime}",
"disabled": "❌ LED Timer disabled!",
"status_field": "**Status:** {status}",
"managed_by": "**Managed by:** {manager}",
"morning": "**Morning time:** `{time}`",
"night": "**Night time:** `{time}`",
"not_configured": "Not configured",
"no_manager": "None"
},
"status": {
"title": "📊 Freebox Status",
"config_section": "🔧 Configuration",
"module_field": "**Module:** {status}",
"host_field": "**Host:** {value}",
"version_field": "**API Version:** {value}",
"token_field": "**App Token:** {status}",
"host_not_configured": "❌ Not configured",
"version_not_configured": "❌ Not configured",
"token_configured": "✅ Configured",
"token_not_configured": "❌ Not configured",
"timer_section": "💡 LCD Timer",
"timer_enabled": "✅ Enabled",
"timer_disabled": "❌ Disabled",
"timer_no_manager": "None",
"timer_not_configured": "Not configured"
},
"test": {
"connection_failed": "❌ Connection test failed",
"auth_challenge_failed": "❌ Authentication challenge failed",
"auth_challenge_not_found": "❌ Authentication challenge not found",
"auth_session_failed": "❌ Authentication session failed",
"auth_token_not_found": "❌ Session token not found",
"api_failed": "❌ API call failed",
"connection_success_title": "✅ Connection test successful!",
"api_field": "API Version",
"api_version": "v{version}",
"auth_field": "Authentication",
"token_valid": "✅ Valid token",
"connection_field": "Connection Status",
"connection_active": "✅ Connection active",
"connection_inactive": "❌ Connection inactive",
"connection_error": "❌ Connection test error"
},
"buttons": {
"test_connection": "🔌 Test Connection",
"lcd_status": "💡 LCD Status",
"refresh_status": "🔄 Refresh Status",
"testing_connection": "🔌 Testing connection...",
"connection_success": "✅ Connection successful!",
"connection_test_failed": "❌ Connection test failed",
"connection_error": "Connection error: {error}",
"lcd_status_title": "💡 LCD Configuration",
"lcd_status_error": "❌ Failed to retrieve LCD status",
"lcd_status_error_details": "Error retrieving LCD status: {error}",
"status_refreshed": "🔄 Status refreshed successfully!",
"status_test_connection": "Test Connection",
"status_lcd_status": "LCD Status",
"status_refresh": "Refresh"
},
"error": {
"inval": "invalid request or parameters",
"nodev": "no device found with this name/id",
"noent": "no entity found with this name/id",
"netdown": "network is down",
"busy": "device is busy",
"invalid_port": "invalid port",
"insecure_password": "the password is too weak to enable remote access",
"invalid_provider": "invalid ddns provider name",
"invalid_next_hop": "invalid next hop address (should be a link local address)",
"auth_required": "Invalid session token, or not session token sent",
"invalid_token": "The app token you are trying to use is invalid or has been revoked",
"pending_token": "The app token you are trying to use has not been validated by user yet",
"insufficient_rights": "Your app permissions does not allow accessing this API",
"denied_from_external_ip": "You are trying to get an app_token from a remote IP",
"invalid_request": "Your request is invalid",
"ratelimited": "Too many auth error have been made from your IP",
"new_apps_denied": "New application token request has been disabled",
"apps_denied": "API access from apps has been disabled",
"internal_error": "Internal error",
"no_panel": "No screen detected",
"setup": "Unable to setup screen",
"notsup": "Operation is not supported"
}
},
"boost": {
"not_authorized": "This command is only allowed on the Jujul Community server!",
"new_boost_title": "New boost from {username}!",
"new_boost_description": "Thank you for this boost.\nThanks to you, we reached {count} boosts!",
"check_channel": "Go check in <#{channelId}>!"
},
"welcome": {
"title": "Hello {username}!",
"description": "Welcome to **Jujul's** server!\nWe are currently {memberCount} members!\nFeel free to read the <#797471924367786004> and introduce yourself in <#837138238417141791>!\nIf you have questions,\nfeel free to ask them in <#837110617315344444>!\nEnjoy your stay with us!"
},
"ping": {
"pinging": "Pinging...",
"response": "Websocket heartbeat: {heartbeat}ms.\nRoundtrip latency: {latency}ms"
},
"salonpostam": {
"papa": {
"not_your_father": "You're not my father, get out!",
"no_dm": "I can't join your voice channel in private message, papa!",
"leaving_voice": "I'm leaving the voice channel, papa!",
"joining_voice": "I'm joining your voice channel, papa!",
"already_connected": "I'm already in your voice channel, papa!"
},
"crack": {
"multiple_games_found": "I found multiple games for \"{query}\"! {list}",
"game_found": "Here's what I found for \"{query}\".\nYou can also click on [this link]({link}) to download the game directly!",
"no_games_found": "I found nothing for \"{query}\"!",
"selection_timeout": "You took too long to choose!"
},
"spam": {
"started": "Spam"
},
"parle": {
"not_in_voice": "You must be in a voice channel!",
"member_not_in_voice": "This person is not in a voice channel!",
"not_same_channel": "This person is not in the same channel as you!",
"will_speak_over": "I'll speak over this person whenever they talk!"
},
"update": {
"loading": "Updating...",
"members_updated": "{count} Cool People!"
}
},
"buttons": {
"labels": {
"previous": "⏮️",
"play_pause": "▶️",
"pause": "⏸️",
"stop": "⏹️",
"skip": "⏭️",
"volume_down": "🔉",
"volume_up": "🔊",
"shuffle": "🔀",
"loop": "🔁",
"configure_channel": "Configure Channel",
"enable": "Enable",
"disable": "Disable",
"list": "List",
"add": "Add",
"remove": "Remove"
}
},
"selectmenus": {
"placeholders": {
"select_channel_notifications": "Select a channel for notifications",
"select_channel_disco": "Select a channel for Disco effects",
"select_streamer_remove": "Select a streamer to remove"
}
},
"database": {
"owner_only": "This command can only be used by the bot owner!",
"server_only": "This command must be used in a server!",
"info_title": "Database Information",
"guild_info": "Guild **{name}** (ID: {id})",
"already_exists": "Database data for **{name}** already exists!",
"initialized": "Database data for **{name}** successfully initialized!",
"updated": "Database data for **{name}** successfully updated!\n**{key}**: {oldValue} -> {value}"
},
"console": {
"discordjs": {
"ready": "[DiscordJS] Ready - Connected to Discord! Logged in as {tag}",
"commands_registered": "[DiscordJS] Registering {count} commands...",
"commands_registered_guild": "[DiscordJS] Registering {count} commands for {guild}...",
"event_triggered": "[DiscordJS] Event {event} triggered",
"guild_create": "[DiscordJS] GuildCreate - Joined \"{name}\" with {count} members",
"guild_update": "[DiscordJS] GuildUpdate - Guild {name} updated",
"guild_member_add": "[DiscordJS] GuildMemberAdd - No channel found with id \"{channelId}\"!",
"interaction_create": {
"command_not_found": "[DiscordJS] InteractionCreate - No ChatInputCommand name matching {command} was found.",
"command_launched": "[DiscordJS] InteractionCreate - ChatInputCommand '{command}' launched by {user}",
"command_error": "[DiscordJS] InteractionCreate - Error executing {command}",
"autocomplete_not_found": "[DiscordJS] InteractionCreate - No AutocompleteRun name matching {command} was found.",
"autocomplete_launched": "[DiscordJS] InteractionCreate - AutocompleteRun '{command}' launched by {user}",
"autocomplete_error": "[DiscordJS] InteractionCreate - Error Autocompleting {command}",
"button_not_found": "[DiscordJS] InteractionCreate - No Button id matching {id} was found.",
"button_clicked": "[DiscordJS] InteractionCreate - Button '{id}' clicked by {user}",
"button_error": "[DiscordJS] InteractionCreate - Error clicking {id}",
"selectmenu_not_found": "[DiscordJS] InteractionCreate - No SelectMenu id matching {id} was found.",
"selectmenu_used": "[DiscordJS] InteractionCreate - SelectMenu '{id}' used by {user}",
"selectmenu_error": "[DiscordJS] InteractionCreate - Error using {id}"
},
"error": "[DiscordJS] Error - An error occurred: {message}",
"boost": {
"no_member": "[DiscordJS] Boost - No member found!",
"not_in_guild": "[DiscordJS] Boost - I'm not in the server!",
"no_channel": "[DiscordJS] Boost - No channel found with id \"{channelId}\"!",
"no_boost_role": "[DiscordJS] Boost - No boost role found!"
},
"replay": {
"no_data": "[DiscordJS] Replay - No replay data for bot {botId}",
"no_text_channel_id": "[DiscordJS] Replay - No textChannelId configured for bot {botId}",
"no_voice_channel_id": "[DiscordJS] Replay - No voiceChannelId configured for bot {botId}",
"text_channel_not_found": "[DiscordJS] Replay - No textChannel found with id {channelId} for bot {botId}",
"voice_channel_not_found": "[DiscordJS] Replay - No voiceChannel found with id {channelId} for bot {botId}"
}
},
"discord_player": {
"extractor_loaded": "[Discord-Player] Ready - {extractor} extractor loaded",
"event_triggered": "[Discord-Player] Event {event} triggered",
"error": "[Discord-Player] Error - General player error event: {message}",
"player_error": "[Discord-Player] PlayerError - Player error event: {message}",
"debug": "[Discord-Player] Debug - Player debug event: {message}",
"disco": {
"channel_not_configured": "[Discord-Player] PlayerDisco - {guild} Channel is not configured!",
"channel_not_found": "[Discord-Player] PlayerDisco - {guild} No channel found with id {channelId}"
},
"progress_saving": {
"missing_ids": "[Discord-Player] ProgressSaving - GuildId or BotId is missing!",
"start": "[Discord-Player] ProgressSaving - Starting save for server {guildId} (bot {botId})",
"stop": "[Discord-Player] ProgressSaving - Stopping save for server {guildId} (bot {botId})",
"error": "[Discord-Player] ProgressSaving - Error saving progress for guild {guildId} (bot {botId})",
"database_not_exist": "[Discord-Player] ProgressSaving - Database data does not exist!"
}
},
"mongoose": {
"connecting": "[Mongoose] Connecting to MongoDB...",
"connected": "[Mongoose] Connected to MongoDB!",
"disconnected": "[Mongoose] Disconnected from MongoDB!",
"error": "[Mongoose] An error occurred with the database connection: {message}",
"event_triggered": "[Mongoose] Event {event} triggered",
"guild_init": "[Mongoose] Initializing guild profile for {name} ({id})",
"guild_create": "[Mongoose] GuildCreate - Database data for new guild \"{name}\" successfully initialized!"
},
"twitch": {
"starting_listener": "[Twitch] Starting listener with {adapter}...",
"stream_online": "[Twitch] Stream from {streamer} (ID {id}) is now online, sending Discord messages...",
"stream_offline": "[Twitch] Stream from {streamer} (ID {id}) is now offline, editing Discord messages...",
"processing_guild": "[Twitch] Processing guild: {name} (ID: {id}) for streamer {streamer}",
"notification_failed": "[Twitch] StreamWatching - {guild} Notification generation failed with status: {status}",
"no_db_data": "[Twitch] StreamWatching - {guild} No dbData found",
"streamer_not_found": "[Twitch] StreamWatching - {guild} Streamer {streamer} not found in this guild",
"message_exists": "[Twitch] StreamWatching - {guild} Message already exists for {streamer}, skipping",
"sending_notification": "[Twitch] StreamWatching - {guild} Sending notification for {streamer}",
"message_sent": "[Twitch] StreamWatching - {guild} Message sent with ID: {id}",
"error_processing_guild": "[Twitch] Error processing guild {name}",
"guild_failed": "[Twitch] Guild {index} failed:",
"user_operational": "[Twitch] User {name} (ID {id}) is operational",
"listener_registered": "[Twitch] Listener \"{type}\" registered for {name} (ID {id})",
"listener_removed": "[Twitch] Listener removed for {name} (ID {id})",
"unsubscribed": "[Twitch] Unsubscribed from {type} for {id}",
"start_watching": "[Twitch] StreamWatching - Starting watch for {streamer} (ID {id}) on {guildId}",
"stop_watching": "[Twitch] StreamWatching - Stopping watch for {streamer} (ID {id})",
"embed_missing": "[Twitch] StreamWatching - {guild} Embed is missing",
"error_editing_message": "[Twitch] StreamWatching - {guild} Error editing message for {streamer} (ID {id})",
"error_watching": "[Twitch] StreamWatching - Error watching {streamer} (ID {id}) on {guildId}",
"database_not_exist": "[Twitch] StreamWatching - {guild} Database data does not exist!",
"module_disabled": "[Twitch] StreamWatching - {guild} Twitch module is not enabled or channel ID is missing",
"channel_not_found": "[Twitch] StreamWatching - {guild} Channel with ID {channelId} not found for Twitch notifications",
"user_data_not_found": "[Twitch] StreamWatching - {guild} User data not found for {streamer} (ID {id})",
"stream_data_not_found": "[Twitch] StreamWatching - {guild} Stream data not found for {streamer} (ID {id})",
"message_id_not_found": "[Twitch] StreamWatching - {guild} Message ID not found for {streamer} (ID {id})",
"user_fetch_error": "[Twitch] Error fetching user for ID {id}",
"user_fetch_error_detailed": "[Twitch] Error while fetching user for ID {id}",
"starting_listener_ngrok": "[Twitch] Starting listener with ngrok...",
"user_fetch_error_buttons": "[Twitch] Error fetching user for ID {id} in buttons/selectmenu",
"listener_removal_error": "[Twitch] Error removing listener for {streamerName}"
},
"freebox": {
"lcd_timer_restored": "Timers restored successfully for {guild}!"
}
}
}