From 5a77937333b93184c6f0b51a17f1bc8346ee699b Mon Sep 17 00:00:00 2001 From: iaMJ Date: Sun, 15 Jun 2025 06:50:19 +0700 Subject: [PATCH] Add Indonesian localization for Soundy Music Player commands and events --- package.json | 2 +- src/config/config.ts | 27 +- src/locales/en-US.ts | 2 +- src/locales/example.ts | 953 ++++++++++++++++++++++++++++++++++++++++ src/locales/id-ID.ts | 973 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1938 insertions(+), 19 deletions(-) create mode 100644 src/locales/example.ts create mode 100644 src/locales/id-ID.ts diff --git a/package.json b/package.json index 862c71c..3ee09f6 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "homepage": "https://github.com/idMJA/Soundy", "repository": { "type": "git", - "url": "https://github.com/idMJA/Soundy.git" + "url": "https://github.com/idMJA/Soundy" }, "bugs": { "url": "https://github.com/idMJA/Soundy/issues" diff --git a/src/config/config.ts b/src/config/config.ts index cc02df8..e73766d 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -4,7 +4,7 @@ import { emoji } from "./emoji"; const { TOKEN, DATABASE_URL, DATABASE_PASSWORD } = process.env; export const Configuration: SoundyConfiguration = { - defaultPrefix: "t!", // Default prefix for commands + defaultPrefix: "!", // Default prefix for commands defaultSearchPlatform: "spotify", // Default search platform for music commands defaultVolume: 100, // Default volume for music playback defaultLocale: "en-US", // Default locale for the bot @@ -17,13 +17,12 @@ export const Configuration: SoundyConfiguration = { voteLink: "https://top.gg/bot/1168385371294420992/vote", }, topgg: { - enabled: true, + enabled: false, webhookAuth: "xxxx", // Replace with actual webhook auth token - token: - "xxxx", // Replace with actual Top.gg token + token: "xxxx", // Replace with actual Top.gg token }, premium: { - enabled: true, // Enable or disable premium features + enabled: false, // Enable or disable premium features }, cache: { filename: "commands.json", // Name of the cache file @@ -43,18 +42,12 @@ export const Configuration: SoundyConfiguration = { warn: 0xffff00, // Color for warning responses }, webhooks: { - nodeLog: - "xxx", // Node logs - guildLog: - "xxx", // Guild logs - commandLog: - "xxx", // Command logs - voteLog: - "xxx", // Vote logs - errorLog: - "xxx", // Error logs - report: - "xxx", // Bug or suggestion reports + nodeLog: "xxx", // Node logs + guildLog: "xxx", // Guild logs + commandLog: "xxx", // Command logs + voteLog: "xxx", // Vote logs + errorLog: "xxx", // Error logs + report: "xxx", // Bug or suggestion reports }, emoji, diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index 163ada0..03576e3 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -311,7 +311,7 @@ export default { }: { invite: string; support: string; vote: string }) => `**[Invite Me](${invite}) • [Support Server](${support}) • [Vote](${vote})**`, }, - footer: ({ bot }: { bot: string }) => `**Thanks for choosing ${bot}!**`, + footer: ({ bot }: { bot: string }) => `Thanks for choosing ${bot}!`, select: "Select a category", categoryTitle: ({ category }: { category: string }) => `${category} Commands`, diff --git a/src/locales/example.ts b/src/locales/example.ts new file mode 100644 index 0000000..09c1d96 --- /dev/null +++ b/src/locales/example.ts @@ -0,0 +1,953 @@ +import type English from "./en-US"; + +export default { + metadata: { + name: "English", + code: "en-US", + translators: ["iaMJ"], + }, + // Commands + cmd: { + // Requested By + requested_by: ({ user }) => `Requested by ${user}`, + // Error + error: + "An error occurred while processing the command. Please try again later.", + // Default Commands + default: { + name: "default", + description: "Configure your default settings", + sub: { + name: "volume", + description: "Change the player default volume.", + options: { + volume: { + name: "volume", + description: "Enter the volume", + }, + }, + run: { + description: ({ volume }) => + `Default volume has been set to ${volume}%`, + }, + }, + }, + // Setup Commands + setup: { + name: "setup", + description: "Setup or remove a music request channels", + sub: { + create: { + name: "create", + description: "Create a music request channels", + run: { + exists: "A music request channel already exists", + failed: "Failed to create music setup messages", + topic: + "Soundy Music Player - Type a song name or URL to play music.", + success: ({ channel }) => + `Successfully created music setup in ${channel}`, + }, + }, + delete: { + name: "delete", + description: "Delete the music request channel", + run: { + exists: "No music setup channel exists", + success: "Successfully deleted the music setup channel", + failed: "Failed to delete the music setup channel", + }, + }, + }, + }, + // Toggle Commands + toggle: { + name: "toggle", + description: "Toggle a features", + sub: { + _247: { + name: "247", + description: "Toggle 24/7 mode on this servers", + run: { + enabled: "24/7 mode has been enabled for this server", + disabled: "24/7 mode has been disabled for this server", + }, + }, + voicestatus: { + name: "voicestatus", + description: "Toggle voice status on this servers", + options: { + enabled: { + name: "enabled", + description: "Enable or disable voice status for this server", + }, + }, + run: { + enabled: "Voice status has been enabled for this server", + disabled: "Voice status has been disabled for this server", + }, + }, + }, + }, + // Prefix Commands + prefix: { + name: "prefix", + description: "Set the prefix for this server", + options: { + prefix: { + name: "prefix", + description: "Enter the new prefix", + }, + }, + run: { + success: ({ prefix }) => `Successfully set prefix to: ${prefix}`, + reset: "Prefix has been reset to default", + }, + }, + // Filter Commands + filter: { + name: "filter", + description: "Apply audio filters to the music", + sub: { + run: { + success: ({ filter }) => `Applied the ${filter} filter`, + error: "An error occurred while applying the filter", + }, + _8d: { + name: "8d", + description: "Apply 8D effect to the music", + filter: "8D", + }, + bassboost: { + name: "bassboost", + description: "Enhance bass frequencies in the music", + filter: "Bassboost", + }, + karaoke: { + name: "karaoke", + description: "Apply karaoke effect to the music", + filter: "Karaoke", + }, + nightcore: { + name: "nightcore", + description: "Apply nightcore effect to the music", + filter: "Nightcore", + }, + pop: { + name: "pop", + description: "Apply pop effect to the music", + filter: "Pop", + }, + reset: { + name: "reset", + description: "Reset the audio filters", + run: { + success: "All filters have been reset", + error: "An error occurred while resetting filters", + }, + }, + soft: { + name: "soft", + description: "Apply soft effect to the music", + filter: "Soft", + }, + treblebass: { + name: "treblebass", + description: "Enhance treble and bass frequencies in the music", + filter: "Treblebass", + }, + tremolo: { + name: "tremolo", + description: "Apply tremolo effect to the music", + filter: "Tremolo", + }, + vaporwave: { + name: "vaporwave", + description: "Apply vaporwave effect to the music", + filter: "Vaporwave", + }, + vibrato: { + name: "vibrato", + description: "Apply vibrato effect to the music", + filter: "Vibrato", + }, + }, + }, + // About Commands + about: { + name: "about", + description: "Show information about Soundy", + run: { + title: "About Soundy", + footer: ({ guildCount, userCount }) => + `Serving ${guildCount} servers with ${userCount} users`, + about_me: { + button: "About", + title: "About Me", + 1: "I'm a feature-rich music bot designed to deliver high-quality music playback experience on Discord.", + 2: "Key Features", + 3: "- High quality music playback", + 4: "- Support for multiple music sources", + 5: "- Advanced queue management", + 6: "- DJ role system", + 7: "- Custom playlists", + 8: "- And much more!", + 9: "Links", + 10: "Invite Me", + 11: "Support Server", + 12: "Vote for me", + 13: "Credits", + 14: ({ author }) => `- Contributed by: ${author}`, + 15: ({ developer }) => `- Developed by: ${developer}`, + 16: ({ country }) => `- Country: ${country}`, + }, + contributors: { + button: "Contributors", + title: "Soundy Contributors", + 1: "Special Thanks", + 2: ({ author }) => `- ${author}: Creator of Soundy`, + 3: ({ user }) => `- ${user}: Bug Fixer, and more contributions`, + 4: ({ user }) => `- ${user}: Part of the source code`, + 5: "Links", + 6: "Tronix Development Community", + 7: "All contributors and supporters", + 8: "License", + 9: ({ license }) => `This project is licensed under the ${license}`, + 10: "View License", + }, + packages: { + button: "Packages", + title: "Soundy Packages & Runtime", + 1: "Core Libraries", + }, + }, + }, + // Top Commands + top: { + name: "top", + description: "View top statistics for tracks and users", + sub: { + guilds: { + name: "guilds", + description: + "Shows the most active music servers in the last 2 weeks", + run: { + title: "Top Music Servers", + description: "Most active music servers in the last 2 weeks", + fields: ({ totalPlays, uniqueTracks }) => + `Played ${totalPlays} tracks (${uniqueTracks} unique)`, + footer: ({ length }) => `Showing top ${length} servers`, + unknown: "Unknown Server", + no_data: "No music activity recorded in the last 2 weeks!", + }, + }, + tracks: { + name: "tracks", + description: "Shows the most played tracks in the last 2 weeks", + run: { + title: "Top Tracks", + description: "Most played tracks in the last 2 weeks", + fields: ({ + author, + playCount, + trackId, + }: { author: string; playCount: number; trackId: string }) => + `By ${author} • Played ${playCount} times\n[Link](${trackId})`, + footer: ({ length }) => `Showing top ${length} tracks`, + no_data: "No tracks have been played in the last 2 weeks!", + }, + }, + users: { + name: "users", + description: "Shows the most active users in the last 2 weeks", + run: { + title: "Top Music Users", + description: "Top music listeners in the last 2 weeks", + fields: ({ playCount }) => `Played ${playCount} tracks`, + footer: ({ length }) => `Showing top ${length} users`, + unknown: "Unknown User", + no_data: "No users have played music in the last 2 weeks!", + }, + }, + }, + }, + // Help Commands + help: { + name: "help", + description: "Get information on our bot commands and features", + options: { + command: { + name: "command", + description: "The command to get help for", + }, + }, + run: { + title: "Soundy Help Menu", + description: { + 1: ({ user, bot }) => + `**Haii! ${user} I'm ${bot} your musical companion!**`, + 2: ({ bot }) => + `**${bot} is a music bot designed to provide an amazing music listening experience on Discord. With its comprehensive and easy-to-use features, ${bot} is the perfect choice for your Discord server.**`, + 3: "**Select A Category From The Menu Below.**", + 4: ({ invite, support, vote }) => + `**[Invite Me](${invite}) • [Support Server](${support}) • [Vote](${vote})**`, + }, + footer: ({ bot }) => `Thanks for choosing ${bot}!`, + select: "Select a category", + categoryTitle: ({ category }) => `${category} Commands`, + notFound: "Commands not found!", + unknown: "Unknown", + }, + }, + // Nodes Commands + nodes: { + name: "nodes", + description: "Check music nodes status", + run: { + title: "Node Status Overview", + description: "Select a node to view detailed information", + fields: ({ players, uptime }) => + `\`\`\`js\nPlayers: ${players}\nUptime: ${uptime}\`\`\``, + footer: "Select a node to view detailed information", + status: ({ status }) => `Status: ${status}`, + connected: "Connected", + disconnected: "Disconnected", + no_nodes: "No nodes found", + }, + }, + // Ping Commands + ping: { + name: "ping", + description: "Check the bot's latency and API response time", + run: { + title: "Soundy Latency Information", + description: { + 1: "Websocket Latency", + 2: "Client Latency", + 3: "Shard Latency", + }, + check_title: "Checking Latency...", + check_description: "Please wait while I check the connection...", + }, + }, + // Autoplay Commands + autoplay: { + name: "autoplay", + description: "Toggle the autoplay feature", + run: { + title: "Autoplay", + enabled: "Autoplay has been enabled", + disabled: "Autoplay has been disabled", + }, + }, + // Clearqueue Commands + clearqueue: { + name: "clearqueue", + description: "Clear the current music queue", + }, + // Forward Commands + forward: { + name: "forward", + description: "Forward the current track by 10 seconds", + run: { + title: "Forward", + description: ({ forwardPosition, currentTrack }) => + `Forwarded to ${forwardPosition} / ${currentTrack}`, + no_song: "No song is currently playing", + stream: "Cannot forward on a live stream", + }, + }, + // Grab Commands + grab: { + name: "grab", + description: "Grab the currently playing song and send it to your DMs", + run: { + title: "Grab", + description: { + 1: "Title", + 2: "Duration", + 3: "Requested by", + }, + dm: "Check your DMs! The song details have been sent.", + dm_failed: + "Failed to send song details to your DMs. Do you have DMs enabled?", + no_song: "No song is currently playing", + }, + }, + // Join Commands + join: { + name: "join", + description: "Make the bot join your voice channel", + run: { + title: "Join", + description: ({ voiceChannel }) => + `Woohoo! I've crashed the party in ${voiceChannel}!\nTime to turn up the volume and make some musical magic happen!`, + }, + }, + // Leave Commands + leave: { + name: "leave", + description: "Make the bot leave the voice channel", + run: { + title: "Left Voice Channel", + description: + "The party's wrapped up! I've cleared the queue and left the channel.\nReady when you are for another musical adventure!", + }, + }, + // Loop Commands + loop: { + name: "loop", + description: "Toggle the loop mode", + }, + // Lyrics Commands + lyrics: { + name: "lyrics", + description: "Search for lyrics of a song", + options: { + query: { + name: "query", + description: + "Song to search for or music URL (leave empty for current song)", + }, + }, + run: { + title: ({ song }) => `Lyrics for ${song}`, + description: "Lyrics for the current song or a specific song", + footer: ({ user, provider }) => + `Requested by ${user} | Powered by ${provider}`, + no_tracks: "No tracks found", + invalid_url: "Invalid URL provided", + provide_song: + "Please provide a song name or URL, or play a song first.", + no_lyrics: "No lyrics found for this song.", + error: "An error occurred while fetching the lyrics.", + }, + }, + // Move Commands + move: { + name: "move", + description: "Move the player to a different voice channel", + options: { + voice: { + name: "voice", + description: "Select the voice channel.", + }, + text: { + name: "text", + description: "Select the text channel.", + }, + }, + run: { + description: ({ voiceChannel, textChannel }) => + `Moved player to voice channel ${voiceChannel}${textChannel ? ` and text channel ${textChannel}` : ""}.`, + }, + }, + // Nowplaying Commands + nowplaying: { + name: "nowplaying", + description: "Get the current playing song", + run: { + now_playing: "Now Playing", + artist: "Artist", + duration: "Duration", + requested_by: "Requested by", + }, + }, + // Pause Commands + pause: { + name: "pause", + description: "Pause the current track", + run: { + paused: "The track is already paused.", + }, + }, + // Play Commands + play: { + name: "play", + description: "Play a song or playlist", + options: { + query: { + name: "query", + description: "Enter the track name or url.", + }, + }, + }, + // Previous Commands + previous: { + name: "previous", + description: "Play the previous track in the queue", + }, + // Queue Commands + queue: { + name: "queue", + description: "Shows the current music queue", + }, + // Replay Commands + replay: { + name: "replay", + description: "Replay the current track from the beginning", + run: { + title: "Replaying Track", + }, + }, + resume: { + name: "resume", + description: "Resume the paused track", + run: { + resumed: "The track is already playing.", + }, + }, + rewind: { + name: "rewind", + description: "Rewind the current track by 10 seconds", + run: { + title: "Rewind", + description: ({ rewindPosition, currentTrack }) => + `Rewinded to ${rewindPosition} / ${currentTrack}`, + no_song: "No song is currently playing", + no_stream: "Cannot rewind on a live stream", + }, + }, + // Seek Commands + seek: { + name: "seek", + description: "Seek the current track", + options: { + time: { + name: "time", + description: "Enter the time. (Ex: 2min)", + }, + }, + run: { + title: "Seek", + description: ({ time }) => `Seeked to ${time}`, + invalid_time: ({ time }) => `Invalid time: ${time}`, + no_track: "No track is currently playing", + no_seekable: "This track is not seekable.", + time_exceeds: ({ time }) => `Time exceeds track duration: ${time}`, + }, + }, + // Shuffle Commands + shuffle: { + name: "shuffle", + description: "Shuffle the queue", + }, + // Skip Commands + skip: { + name: "skip", + description: "Skip the current track", + }, + // Stop Commands + stop: { + name: "stop", + description: "Stop the player", + }, + // Volume Commands + volume: { + name: "volume", + description: "Set the player volume", + options: { + volume: { + name: "volume", + description: "Enter the volume", + }, + }, + run: { + paused: "Paused", + paused_description: + "Taking a quick breather! The music's on pause for now", + }, + }, + // Playlist Commands + playlist: { + name: "playlist", + description: "Manage your music playlists", + run: { + footer: ({ page, total }) => `Page ${page} • Total playlists: ${total}`, + not_found: "Playlist not found", + no_tracks: "No tracks found", + }, + sub: { + add: { + name: "add", + description: "Add a track to a playlist", + options: { + playlist: { + name: "playlist", + description: "The name of the playlist", + }, + query: { + name: "query", + description: "Track URL, playlist URL, or search query", + }, + }, + run: { + added: ({ track, playlist }) => + `Added **${track} tracks** to playlist ${playlist}`, + // - Added **1 tracks** to playlist **Tonikaku Kawaii** + // - Added track **Unmei?** to playlist **Tonikaku Kawaii** + error: "An error occurred while adding tracks to the playlist", + }, + }, + create: { + name: "create", + description: "Create a new playlist", + options: { + name: { + name: "name", + description: "The name of the playlist", + }, + }, + run: { + success: ({ playlist }) => + `Successfully created playlist \`${playlist}\``, + already_exists: "A playlist with this name already exists", + error: "An error occurred while creating the playlist", + }, + }, + delete: { + name: "delete", + description: "Delete a playlist", + options: { + name: { + name: "name", + description: "The name of the playlist", + }, + }, + run: { + deleted: ({ playlist }) => `Deleted playlist \`${playlist}\``, + error: "An error occurred while deleting the playlist.", + }, + }, + list: { + name: "list", + description: "List all your playlists", + run: { + title: ({ author }) => `${author}'s Playlists`, + list: ({ playlist, tracks }) => `${playlist} - ${tracks} tracks`, + no_playlists: "You don't have any playlists", + error: "An error occurred while fetching your playlists", + }, + }, + load: { + name: "load", + description: "Load and play a playlist", + options: { + name: { + name: "name", + description: "The name of the playlist", + }, + }, + run: { + loaded: ({ tracks, playlist }) => + `Loaded **${tracks} tracks** from playlist ${playlist}`, + error: "An error occurred while loading the playlist", + }, + }, + remove: { + name: "remove", + description: "Remove a track from a playlist", + options: { + name: { + name: "name", + description: "The name of the playlist", + }, + track: { + name: "track", + description: "The track number to remove", + }, + }, + run: { + removed: ({ name }) => `Removed track from playlist ${name}`, + invalid: "Invalid track number", + error: + "An error occurred while removing the track from the playlist", + }, + }, + view: { + name: "view", + description: "View tracks in a playlist", + options: { + name: { + name: "name", + description: "The name of the playlist", + }, + }, + run: { + title: ({ name }) => `Playlist: ${name}`, + empty: "This playlist is empty", + failed: "Failed to load track details", + error: "An error occurred while viewing the playlist", + }, + }, + }, + }, + // Report Commands + report: { + name: "report", + description: "Report a bug, users or suggestions", + sub: { + bug: { + name: "bug", + description: "Report a bug you found in the bots", + run: { + label: "Report a Bugs", + init_title: "Bug Reports", + init_description: + "Click the button below to report a bug you found in the bot", + description: "Describe the bug you encountered", + description_placeholder: + "What happened? What did you expect to happen?", + steps: "Steps to reproduce the bug", + steps_placeholder: + "1. First step\n2. Second step\n3. Third step...", + success: "Bug Report Submitted", + error: "Error Submitting Bug Report", + success_description: ({ reportId }) => + `Your bug report has been successfully submitted.\n\n**Report ID:** ${reportId}`, + error_description: + "An error occurred while submitting your bug report. Please try again later", + invalid_user: + "Only the user who initiated this command can report a bug", + }, + }, + suggestion: { + name: "suggestion", + description: "Give a suggestion you want to see in the bots", + run: { + label: "Give a Suggestions", + init_title: "Suggestions", + init_description: + "Click the button below to give a suggestion you want to see in the bots", + description: "Describe the suggestion you have", + description_placeholder: + "What would you like to see added or improved?", + steps: "Steps to reproduce the bug", + steps_placeholder: + "1. First step\n2. Second step\n3. Third step...", + success: "Suggestion Submitted", + error: "Error Submitting Suggestion", + success_description: ({ reportId }) => + `Your suggestion has been successfully submitted.\n\n**Report ID:** ${reportId}`, + error_description: + "An error occurred while submitting your suggestion. Please try again later", + invalid_user: + "Only the user who initiated this command can give a suggestions", + }, + }, + }, + }, + }, + // Events + event: { + setup: { + title: "Soundy Music Player", + description: + "Join a voice channel and queue songs by name or url in this channel.", + no_voice: "You must be in a voice channel to use this!", + no_connect: + "I need `CONNECT` and `SPEAK` permissions in your voice channel!", + failed: "Failed to join your voice channel!", + no_results: ({ query }) => `No results found for ${query}`, + error: "An error occurred while processing your request!", + }, + // Music Events + music: { + title: "Title", + artist: "Artist", + duration: "Duration", + requested_by: "Requested by", + now_playing: "Now Playing", + node: "Node", + finish_time: "Finish Time", + tracks: "Tracks", + added: "Added to Queue", + added_playlist: "Added Playlist to Queue", + added_songs: ({ songs }) => `${songs} songs`, // 79 songs + no_results: "No results found for the given query.", + pause: { + title: "Track Paused", + description: + "The rhythm has been gently suspended!\nYour musical journey is on a magical intermission.", + }, + resume: { + title: "Track Resumed", + description: "The music has been resumed!\nLet's keep the party going!", + }, + }, + cooldown: ({ seconds }) => + `Please wait ${seconds} seconds before using this command again.`, + // Manager + manager: { + no_nodes: "No nodes are currently available. Please try again later.", + no_player: "There is no active music player in this server.", + no_tracks: "There are no tracks in the queue.", + not_enough: "Not enough tracks in queue to perform this action.", + }, + // Premium + premium: { + limit_reached: { + title: "You've used all your free commands!", + description: ({ time }) => + `Please vote for Soundy on top.gg to get ${time} hours of unlimited access.`, + }, + vote_now: "Vote Now", + }, + // Verifications + verifications: { + only_developer: "This command is only available to the developers.", + only_guild_owner: "This command is only available to the guild owner.", + }, + // Voice + voice: { + no_same: ({ channel }) => + `You must be in the same voice channel as me on ${channel}!`, + no_vc: "You must be in a voice channel to use this command!", + no_perms: ({ channel }) => + `I don't have the required permissions in ${channel}!`, + missing_perms: "Missing Permissions", + failed: "Failed to join your voice channel!", + }, + // Listeners + listeners: { + no_members: "No members left in the voice channel", + disconnect: ({ time }) => + `Channel is empty! Player will be disconnected in ${time}`, + resume: "Members joined! Resuming the players", + }, + // Mention + mention: { + title: "Welcome to Soundy!", + description: { + 1: ({ prefix }) => + `Use \`${prefix}help\` or \`/help\` to discover all my amazing commands`, + 2: "Need help? Join our Support Server for assistance", + 3: ({ prefix }) => + `Want to get started? Just type \`${prefix}play\` or \`/play\` to begin your musical journey!`, + 4: "Features:", + 5: "High quality music streaming", + 6: "Rich playlist management", + 7: "Support for multiple platforms", + }, + footer: "Play a high quality music in your Discord server for free.", + button: { + add: "Add to Server", + support: "Support Server", + vote: "Vote", + }, + }, + // Overrides + overrides: { + error: "An error occurred while executing this commands", + missing_perms: "Missing Permissions", + missing_user_perms: + "You don't have the required permissions to use this commands", + missing_bot_perms: + "I don't have the required permissions to use this commands", + invalid_command: { + 1: "Invalid command usage. Here's how to use it:", + 2: "Options:", + }, + }, + // Paginator + paginator: { + only_author: "Sorry, only the command author can use this menu.", + }, + }, + // Components + component: { + // Clear Queue + clear: { + description: "Queue has been cleared", + }, + // Loop + loop: { + title: "Loop Mode Updated", + description: ({ mode }) => `Loop mode updated to ${mode}`, + select_title: "Loop Mode Selection", + select_description: "Select a loop mode to change to:", + off: "Off", + track: "Track", + queue: "Queue", + loop_off: "Loop is currently disabled", + loop_track: "Currently looping the current track", + loop_queue: "Currently looping the entire queue", + }, + // Previous + previous: { + title: "Playing previous track", + description: + "Rewinding the musical journey back to the beginning!\nTime to groove to this awesome tune once more!", + no_previous: "No previous track", + no_previous_description: + "Oops! There's no previous track to play!\nLet's keep the party going with the current one!", + }, + // Queue + queue: { + name: "Queue", + now_playing: "Now Playing", + total: ({ total }) => `Total tracks: ${total}`, + track: ({ track, author }) => `${track} by ${author}`, + requested_by: ({ user }) => `Requested by ${user}`, + up_next: "Up Next", + unknown_artist: "Unknown Artist", + }, + // Shuffle + shuffle: { + description: + "The queue has been shuffled!\nLet's keep the party going with a new mix!", + }, + skip: { + title: "Skipped", + description: "Skipped to next track in queue", + autoplay: "Skipped to an awesome recommended track", + end: "That's a wrap! We've reached the end of our musical journey for now.\nTime for a fresh start with some new tunes!", + }, + stop: { + title: "Stopped", + description: + "The party's wrapped up! I've cleared the queue and packed up the speakers.\nReady when you are for another musical adventure!", + }, + // Volume + volume: { + title: "Volume Set", + description: ({ volume }) => `Volume has been set to ${volume}`, + }, + + // Node Select + nodeSelect: { + title: ({ node }) => `Node Information - ${node}`, + status: ({ status }) => `Status: ${status}`, + connected: "Connected", + disconnected: "Disconnected", + description: "Select a node to view detailed information", + players: ({ players }) => `Players: ${players}`, + playing_players: ({ playingPlayers }) => + `Playing Players: ${playingPlayers}`, + uptime: ({ uptime }) => `Uptime: ${uptime}`, + cpu: "CPU", + cores: ({ cores }) => `Cores: ${cores}`, + system_load: ({ systemLoad }) => `System Load: ${systemLoad}%`, + lavalink_load: ({ lavalinkLoad }) => `Lavalink Load: ${lavalinkLoad}%`, + memory: "Memory", + used: ({ used }) => `Used: ${used}`, + reservable: ({ reservable }) => `Reservable: ${reservable}`, + no_node: "This node is no longer available.", + }, + }, + // Middleware + middlewares: { + cooldown: { + description: ({ seconds }) => + `Please wait ${seconds} seconds before using this command again.`, + }, + }, + // Autocomplete + autocomplete: { + music: { + no_nodes: "No nodes available", + no_voice: "No voice channel", + no_tracks: "No tracks found", + }, + }, +} satisfies typeof English; diff --git a/src/locales/id-ID.ts b/src/locales/id-ID.ts new file mode 100644 index 0000000..0965295 --- /dev/null +++ b/src/locales/id-ID.ts @@ -0,0 +1,973 @@ +import type English from "./en-US"; + +export default { + metadata: { + name: "Indonesia", + code: "id-ID", + translators: ["iaMJ"], + }, + // Commands + cmd: { + // Requested By + requested_by: ({ user }) => `Direquest oleh ${user}`, + // Error + error: + "Terjadi kesalahan saat memproses perintah. Silakan coba lagi nanti.", + // Default Commands + default: { + name: "default", + description: "Konfigurasi pengaturan default Kamu", + sub: { + name: "volume", + description: "Ubah volume default pemain.", + options: { + volume: { + name: "volume", + description: "Masukkan volume", + }, + }, + run: { + description: ({ volume }) => + `Volume default telah diatur ke ${volume}%`, + }, + }, + }, + // Setup Commands + setup: { + name: "setup", + description: "Atur atau hapus saluran permintaan musik", + sub: { + create: { + name: "create", + description: "Buat saluran permintaan musik", + run: { + exists: "Saluran permintaan musik sudah ada", + failed: "Gagal membuat pesan pengaturan musik", + topic: + "Soundy Music Player - Ketik nama lagu atau URL untuk memutar musik.", + success: ({ channel }) => + `Berhasil membuat pengaturan musik di ${channel}`, + }, + }, + delete: { + name: "delete", + description: "Hapus saluran permintaan musik", + run: { + exists: "Tidak ada saluran pengaturan musik", + success: "Berhasil menghapus saluran pengaturan musik", + failed: "Gagal menghapus saluran pengaturan musik", + }, + }, + }, + }, + // Toggle Commands + toggle: { + name: "toggle", + description: "Aktifkan/nonaktifkan fitur", + sub: { + _247: { + name: "247", + description: "Aktifkan mode 24/7 di server ini", + run: { + enabled: "Mode 24/7 telah diaktifkan untuk server ini", + disabled: "Mode 24/7 telah dinonaktifkan untuk server ini", + }, + }, + voicestatus: { + name: "voicestatus", + description: "Aktifkan status suara di server ini", + options: { + enabled: { + name: "enabled", + description: + "Aktifkan atau nonaktifkan status suara untuk server ini", + }, + }, + run: { + enabled: "Status suara telah diaktifkan untuk server ini", + disabled: "Status suara telah dinonaktifkan untuk server ini", + }, + }, + }, + }, + // Prefix Commands + prefix: { + name: "prefix", + description: "Atur prefix untuk server ini", + options: { + prefix: { + name: "prefix", + description: "Masukkan prefix baru", + }, + }, + run: { + success: ({ prefix }) => `Berhasil mengatur prefix menjadi: ${prefix}`, + reset: "Sukses mengatur prefix ke default", + }, + }, + // Filter Commands + filter: { + name: "filter", + description: "Terapkan filter audio ke musik", + sub: { + run: { + success: ({ filter }) => `Menerapkan filter ${filter}`, + error: "Terjadi kesalahan saat menerapkan filter", + }, + _8d: { + name: "8d", + description: "Terapkan efek 8D ke musik", + filter: "8D", + }, + bassboost: { + name: "bassboost", + description: "Tingkatkan frekuensi bass dalam musik", + filter: "Bassboost", + }, + karaoke: { + name: "karaoke", + description: "Terapkan efek karaoke ke musik", + filter: "Karaoke", + }, + nightcore: { + name: "nightcore", + description: "Terapkan efek nightcore ke musik", + filter: "Nightcore", + }, + pop: { + name: "pop", + description: "Terapkan efek pop ke musik", + filter: "Pop", + }, + reset: { + name: "reset", + description: "Reset filter audio", + run: { + success: "Semua filter telah direset", + error: "Terjadi kesalahan saat mereset filter", + }, + }, + soft: { + name: "soft", + description: "Terapkan efek soft ke musik", + filter: "Soft", + }, + treblebass: { + name: "treblebass", + description: "Tingkatkan frekuensi treble dan bass dalam musik", + filter: "Treblebass", + }, + tremolo: { + name: "tremolo", + description: "Terapkan efek tremolo ke musik", + filter: "Tremolo", + }, + vaporwave: { + name: "vaporwave", + description: "Terapkan efek vaporwave ke musik", + filter: "Vaporwave", + }, + vibrato: { + name: "vibrato", + description: "Terapkan efek vibrato ke musik", + filter: "Vibrato", + }, + }, + }, + // About Commands + about: { + name: "about", + description: "Tampilkan informasi tentang Soundy", + run: { + title: "Tentang Soundy", + footer: ({ + guildCount, + userCount, + }: { guildCount: number; userCount: number }) => + `Melayani ${guildCount} server dengan ${userCount} pengguna`, + about_me: { + button: "Tentang", + title: "Tentang Saya", + 1: "Saya adalah bot musik dengan banyak fitur yang dirancang untuk memberikan pengalaman pemutaran musik berkualitas tinggi di Discord.", + 2: "Fitur Utama", + 3: "- Pemutaran musik berkualitas tinggi", + 4: "- Dukungan untuk berbagai sumber musik", + 5: "- Manajemen antrian lanjutan", + 6: "- Sistem peran DJ", + 7: "- Daftar putar kustom", + 8: "- Dan masih banyak lagi!", + 9: "Link", + 10: "Invite", + 11: "Server Support", + 12: "Vote Aku", + 13: "Kredit", + 14: ({ author }: { author: string }) => + `- Dikontribusikan oleh: ${author}`, + 15: ({ developer }: { developer: string }) => + `- Dikembangkan oleh: ${developer}`, + 16: ({ country }: { country: string }) => `- Negara: ${country}`, + }, + contributors: { + button: "Kontributor", + title: "Kontributor Soundy", + 1: "Terima Kasih Khusus", + 2: ({ author }: { author: string }) => `- ${author}: Pencipta Soundy`, + 3: ({ user }: { user: string }) => + `- ${user}: Perbaikan Bug, dan kontribusi lainnya`, + 4: ({ user }: { user: string }) => `- ${user}: Untuk ide bot ini`, + 5: "Link", + 6: "Komunitas Tronix Development", + 7: "Semua kontributor dan supporter", + 8: "Lisensi", + 9: ({ license }: { license: string }) => + `Proyek ini dilisensikan di bawah ${license}`, + 10: "Lihat Lisensi", + }, + packages: { + button: "Paket", + title: "Paket & Runtime Soundy", + 1: "Pustaka Inti", + }, + }, + }, + // Top Commands + top: { + name: "top", + description: "Lihat statistik teratas untuk trek dan pengguna", + sub: { + guilds: { + name: "guilds", + description: + "Tampilkan server musik paling aktif dalam 2 minggu terakhir", + run: { + title: "Server Musik Teratas", + description: "Server musik paling aktif dalam 2 minggu terakhir", + fields: ({ + totalPlays, + uniqueTracks, + }: { totalPlays: number; uniqueTracks: number }) => + `Memutar ${totalPlays} trek (${uniqueTracks} unik)`, + footer: ({ length }) => `Menampilkan ${length} server teratas`, + unknown: "Server Tidak Dikenal", + no_data: + "Tidak ada aktivitas musik yang tercatat dalam 2 minggu terakhir!", + }, + }, + tracks: { + name: "tracks", + description: + "Tampilkan trek yang paling banyak diputar dalam 2 minggu terakhir", + run: { + title: "Trek Teratas", + description: + "Trek yang paling banyak diputar dalam 2 minggu terakhir", + fields: ({ author, playCount, trackId }) => + `Oleh ${author} • Diputar ${playCount} kali\n[Link](${trackId})`, + footer: ({ length }) => `Menampilkan ${length} trek teratas`, + no_data: "Tidak ada trek yang diputar dalam 2 minggu terakhir!", + }, + }, + users: { + name: "users", + description: + "Tampilkan pengguna paling aktif dalam 2 minggu terakhir", + run: { + title: "Pengguna Musik Teratas", + description: "Pendengar musik teratas dalam 2 minggu terakhir", + fields: ({ playCount }) => `Memutar ${playCount} trek`, + footer: ({ length }) => `Menampilkan ${length} pengguna teratas`, + unknown: "Pengguna Tidak Dikenal", + no_data: + "Tidak ada pengguna yang memutar musik dalam 2 minggu terakhir!", + }, + }, + }, + }, + // Help Commands + help: { + name: "help", + description: "Dapatkan informasi tentang perintah dan fitur bot kami", + options: { + command: { + name: "command", + description: "Perintah yang ingin Kamu dapatkan bantuan", + }, + }, + run: { + title: "Menu Bantuan Soundy", + description: { + 1: ({ user, bot }) => + `**Haii! ${user} aku ${bot} teman musik kamu!**`, + 2: ({ bot }) => + `**${bot} adalah bot musik yang dirancang untuk memberikan pengalaman mendengarkan musik yang luar biasa di Discord. Dengan fitur-fitur yang lengkap dan mudah digunakan, ${bot} adalah pilihan sempurna untuk server Discord mu**`, + 3: "**Pilih Kategori Dari Menu Di Bawah**", + 4: ({ + invite, + support, + vote, + }: { invite: string; support: string; vote: string }) => + `**[Invite](${invite}) • [Server Support](${support}) • [Vote](${vote})**`, + }, + footer: ({ bot }) => `**Terima kasih telah memilih ${bot}!**`, + select: "Pilih kategori", + categoryTitle: ({ category }: { category: string }) => + `Perintah ${category}`, + notFound: "Perintah tidak ditemukan!", + unknown: "Tidak Dikenal", + }, + }, + // Nodes Commands + nodes: { + name: "nodes", + description: "Periksa status node musik", + run: { + title: "Ikhtisar Status Node", + description: "Pilih node untuk melihat informasi detail", + fields: ({ players, uptime }) => + `\`\`\`js\nPemain: ${players}\nWaktu Aktif: ${uptime}\`\`\``, + footer: "Pilih node untuk melihat informasi detail", + status: ({ status }) => `Status: ${status}`, + connected: "Terhubung", + disconnected: "Terputus", + no_nodes: "Tidak ada node yang ditemukan", + }, + }, + // Ping Commands + ping: { + name: "ping", + description: "Periksa latensi bot dan waktu respons API", + run: { + title: "Informasi Latensi Soundy", + description: { + 1: "Latensi Websocket", + 2: "Latensi Klien", + 3: "Latensi Shard", + }, + check_title: "Memeriksa Latensi...", + check_description: "Mohon tunggu sementara aku memeriksa koneksi...", + }, + }, + // Autoplay Commands + autoplay: { + name: "autoplay", + description: "Aktifkan/nonaktifkan fitur autoplay", + run: { + title: "Autoplay", + enabled: "Autoplay telah diaktifkan", + disabled: "Autoplay telah dinonaktifkan", + }, + }, + // Clearqueue Commands + clearqueue: { + name: "clearqueue", + description: "Bersihkan antrean musik saat ini", + }, + // Forward Commands + forward: { + name: "forward", + description: "Majukan trek saat ini sebanyak 10 detik", + run: { + title: "Maju", + description: ({ forwardPosition, currentTrack }) => + `Dimajukan ke ${forwardPosition} / ${currentTrack}`, + no_song: "Tidak ada lagu yang sedang diputar", + stream: "Tidak dapat memajukan pada siaran langsung", + }, + }, + // Grab Commands + grab: { + name: "grab", + description: "Ambil lagu yang sedang diputar dan kirim ke DM Kamu", + run: { + title: "Ambil", + description: { + 1: "Judul", + 2: "Durasi", + 3: "Diminta oleh", + }, + dm: "Periksa DM Kamu! Detail lagu telah dikirim.", + dm_failed: + "Gagal mengirim detail lagu ke DM Kamu. Apakah DM Kamu aktif?", + no_song: "Tidak ada lagu yang sedang diputar", + }, + }, + // Join Commands + join: { + name: "join", + description: "Buat bot bergabung ke voice channels mu", + run: { + title: "Bergabung", + description: ({ voiceChannel }) => + `Woohoo! Aku telah bergabung di ${voiceChannel}!\nSaatnya menaikkan volume dan membuat keajaiban musik terjadi!`, + }, + }, + // Leave Commands + leave: { + name: "leave", + description: "Buat bot meninggalkan voice channels", + run: { + title: "Meninggalkan Voice Channel", + description: + "Pesta telah selesai! Aku telah membersihkan antrean dan meninggalkan saluran.\nSiap kapan saja untuk petualangan musik berikutnya!", + }, + }, + // Loop Commands + loop: { + name: "loop", + description: "Aktifkan/nonaktifkan mode pengulangan", + }, + // Lyrics Commands + lyrics: { + name: "lyrics", + description: "Cari lirik lagu", + options: { + query: { + name: "query", + description: + "Lagu yang dicari atau URL musik (kosongkan untuk lagu saat ini)", + }, + }, + run: { + title: ({ song }) => `Lirik untuk ${song}`, + description: "Lirik untuk lagu saat ini atau lagu tertentu", + footer: ({ user, provider }) => + `Diminta oleh ${user} | Didukung oleh ${provider}`, + no_tracks: "Tidak ada trek yang ditemukan", + invalid_url: "URL yang diberikan tidak valid", + provide_song: + "Harap berikan nama lagu atau URL, atau putar lagu terlebih dahulu.", + no_lyrics: "Tidak ada lirik yang ditemukan untuk lagu ini.", + error: "Terjadi kesalahan saat mengambil lirik.", + }, + }, + // Move Commands + move: { + name: "move", + description: "Pindahkan pemain ke voice channel yang berbeda", + options: { + voice: { + name: "voice", + description: "Pilih voice channel", + }, + text: { + name: "text", + description: "Pilih saluran teks.", + }, + }, + run: { + description: ({ voiceChannel, textChannel }) => + `Memindahkan pemain ke voice channel ${voiceChannel}${textChannel ? ` dan text channel ${textChannel}` : ""}.`, + }, + }, + // Nowplaying Commands + nowplaying: { + name: "nowplaying", + description: "Dapatkan lagu yang sedang diputar", + run: { + now_playing: "Sedang Diputar", + artist: "Artis", + duration: "Durasi", + requested_by: "Direquest oleh", + }, + }, + // Pause Commands + pause: { + name: "pause", + description: "Jeda trek saat ini", + run: { + paused: "Trek sudah dijeda", + }, + }, + // Play Commands + play: { + name: "play", + description: "Putar lagu atau playlist", + options: { + query: { + name: "query", + description: "Masukkan nama trek atau url.", + }, + }, + }, + // Previous Commands + previous: { + name: "previous", + description: "Putar trek sebelumnya dalam antrean", + }, + // Queue Commands + queue: { + name: "queue", + description: "Tampilkan antrean musik saat ini", + }, + // Replay Commands + replay: { + name: "replay", + description: "Putar ulang trek saat ini dari awal", + run: { + title: "Memutar Ulang Trek", + }, + }, + resume: { + name: "resume", + description: "Lanjutkan trek yang dijeda", + run: { + resumed: "Trek sudah diputar.", + }, + }, + rewind: { + name: "rewind", + description: "Mundurkan trek saat ini sebanyak 10 detik", + run: { + title: "Mundur", + description: ({ rewindPosition, currentTrack }) => + `Dimundurkan ke ${rewindPosition} / ${currentTrack}`, + no_song: "Tidak ada lagu yang sedang diputar", + no_stream: "Tidak dapat mundur pada siaran langsung", + }, + }, + // Seek Commands + seek: { + name: "seek", + description: "Cari posisi dalam trek saat ini", + options: { + time: { + name: "time", + description: "Masukkan waktu. (Contoh: 2min)", + }, + }, + run: { + title: "Mencari", + description: ({ time }) => `Mencari ke ${time}`, + invalid_time: ({ time }) => `Waktu tidak valid: ${time}`, + no_track: "Tidak ada trek yang sedang diputar", + no_seekable: "Trek ini tidak dapat dicari.", + time_exceeds: ({ time }) => `Waktu melebihi durasi trek: ${time}`, + }, + }, + // Shuffle Commands + shuffle: { + name: "shuffle", + description: "Acak antrean", + }, + // Skip Commands + skip: { + name: "skip", + description: "Lewati trek saat ini", + }, + // Stop Commands + stop: { + name: "stop", + description: "Hentikan pemain", + }, + // Volume Commands + volume: { + name: "volume", + description: "Atur volume pemain", + options: { + volume: { + name: "volume", + description: "Masukkan volume", + }, + }, + run: { + paused: "Dijeda", + paused_description: + "Istirahat sebentar! Musik sedang dijeda untuk saat ini", + }, + }, + // Playlist Commands + playlist: { + name: "playlist", + description: "Kelola playlist musik mu", + run: { + footer: ({ page, total }) => + `Halaman ${page} • Total playlist: ${total}`, + not_found: "Playlist tidak ditemukan", + no_tracks: "Tidak ada trek yang ditemukan", + }, + sub: { + add: { + name: "add", + description: "Tambahkan trek ke playlist", + options: { + playlist: { + name: "playlist", + description: "Nama playlist", + }, + query: { + name: "query", + description: "URL trek, URL playlist, atau kata kunci pencarian", + }, + }, + run: { + added: ({ track, playlist }) => + `Menambahkan **${track} trek** ke playlist ${playlist}`, + error: "Terjadi kesalahan saat menambahkan trek ke playlist", + }, + }, + create: { + name: "create", + description: "Buat playlist baru", + options: { + name: { + name: "name", + description: "Nama playlist", + }, + }, + run: { + success: ({ playlist }) => + `Berhasil membuat playlist \`${playlist}\``, + already_exists: "Playlist dengan nama ini sudah ada", + error: "Terjadi kesalahan saat membuat playlist", + }, + }, + delete: { + name: "delete", + description: "Hapus playlist", + options: { + name: { + name: "name", + description: "Nama playlist", + }, + }, + run: { + deleted: ({ playlist }) => `Menghapus playlist \`${playlist}\``, + error: "Terjadi kesalahan saat menghapus playlist.", + }, + }, + list: { + name: "list", + description: "Tampilkan semua playlist mu", + run: { + title: ({ author }) => `Playlist ${author}`, + list: ({ playlist, tracks }) => `${playlist} - ${tracks} trek`, + no_playlists: "Kamu tidak memiliki playlist", + error: "Terjadi kesalahan saat mengambil playlist mu", + }, + }, + load: { + name: "load", + description: "Muat dan putar playlist", + options: { + name: { + name: "name", + description: "Nama playlist", + }, + }, + run: { + loaded: ({ tracks, playlist }) => + `Memuat **${tracks} trek** dari playlist ${playlist}`, + error: "Terjadi kesalahan saat memuat playlist", + }, + }, + remove: { + name: "remove", + description: "Hapus trek dari playlist", + options: { + name: { + name: "name", + description: "Nama playlist", + }, + track: { + name: "track", + description: "Nomor trek yang akan dihapus", + }, + }, + run: { + removed: ({ name }) => `Menghapus trek dari playlist ${name}`, + invalid: "Nomor trek tidak valid", + error: "Terjadi kesalahan saat menghapus trek dari playlist", + }, + }, + view: { + name: "view", + description: "Lihat trek dalam playlist", + options: { + name: { + name: "name", + description: "Nama playlist", + }, + }, + run: { + title: ({ name }) => `Playlist: ${name}`, + empty: "Playlist ini kosong", + failed: "Gagal memuat detail trek", + error: "Terjadi kesalahan saat melihat playlist", + }, + }, + }, + }, + // Report Commands + report: { + name: "report", + description: "Laporkan bug, pengguna atau saran", + sub: { + bug: { + name: "bug", + description: "Laporkan bug yang kamu temukan di bot", + run: { + label: "Laporkan Bug", + init_title: "Laporan Bug", + init_description: + "Klik tombol di bawah untuk melaporkan bug yang kamu temukan di bot", + description: "Jelaskan bug yang kamu temui", + description_placeholder: "Apa yang terjadi? Apa yang kamu alami?", + steps: "Langkah-langkah untuk mereproduksi bug", + steps_placeholder: + "1. Langkah pertama\n2. Langkah kedua\n3. Langkah ketiga...", + success: "Laporan Bug Terkirim", + error: "Kesalahan Mengirim Laporan Bug", + success_description: ({ reportId }) => + `Laporan bug kamu telah berhasil dikirim.\n\n**ID Laporan:** ${reportId}`, + error_description: + "Terjadi kesalahan saat mengirim laporan bug kamu. Silakan coba lagi nanti", + invalid_user: + "Hanya pengguna yang memulai perintah ini yang dapat melaporkan bug", + }, + }, + suggestion: { + name: "suggestion", + description: "Berikan saran yang ingin kamu berikan ke bot", + run: { + label: "Berikan Saran", + init_title: "Saran", + init_description: + "Klik tombol di bawah untuk memberikan saran yang ingin kamu berikan ke bot", + description: "Jelaskan saran yang kamu miliki", + description_placeholder: + "Apa yang ingin kamu lihat ditambahkan atau ditingkatkan?", + steps: "Langkah-langkah untuk mereproduksi bug", + steps_placeholder: + "1. Langkah pertama\n2. Langkah kedua\n3. Langkah ketiga...", + success: "Saran Terkirim", + error: "Kesalahan Mengirim Saran", + success_description: ({ reportId }) => + `Saran kamu telah berhasil dikirim.\n\n**ID Laporan:** ${reportId}`, + error_description: + "Terjadi kesalahan saat mengirim saran kamu. Silakan coba lagi nanti", + invalid_user: + "Hanya pengguna yang memulai perintah ini yang dapat memberikan saran", + }, + }, + }, + }, + }, + // Events + event: { + setup: { + title: "Soundy Music Player", + description: + "Bergabung dengan voice channel dan antri lagu berdasarkan nama atau url di voice channel ini.", + no_voice: "Kamu harus berada di voice channel untuk menggunakan ini!", + no_connect: + "Aku membutuhkan izin `CONNECT` dan `SPEAK` di voice channel kamu!", + failed: "Gagal bergabung ke voice channel kamu!", + no_results: ({ query }) => + `Tidak ada hasil yang ditemukan untuk ${query}`, + error: "Terjadi kesalahan saat memproses permintaan kamu!", + }, + // Music Events + music: { + title: "Judul", + artist: "Artis", + duration: "Durasi", + requested_by: "Diminta oleh", + now_playing: "Sedang Diputar", + node: "Node", + finish_time: "Waktu Selesai", + tracks: "Trek", + added: "Ditambahkan ke Antrean", + added_playlist: "Playlist Ditambahkan ke Antrean", + added_songs: ({ songs }) => `${songs} lagu`, // 79 lagu + no_results: "Tidak ada hasil yang ditemukan untuk kueri yang diberikan.", + pause: { + title: "Trek Dijeda", + description: + "Ritme telah ditunda dengan lembut!\nPerjalanan musik kamu sedang dalam jeda ajaib.", + }, + resume: { + title: "Trek Dilanjutkan", + description: "Musik telah dilanjutkan!\nMari kita lanjutkan pestanya!", + }, + }, + cooldown: ({ seconds }) => + `Harap tunggu ${seconds} detik sebelum menggunakan perintah ini lagi.`, + // Manager + manager: { + no_nodes: + "Tidak ada node yang tersedia saat ini. Silakan coba lagi nanti.", + no_player: "Tidak ada pemain musik aktif di server ini.", + no_tracks: "Tidak ada trek dalam antrean.", + not_enough: + "Tidak cukup trek dalam antrean untuk melakukan tindakan ini.", + }, + // Premium + premium: { + limit_reached: { + title: "Kamu telah menggunakan semua perintah gratis kamu!", + description: ({ time }) => + `Silakan vote untuk Soundy di top.gg untuk mendapatkan ${time} jam akses tanpa batas.`, + }, + vote_now: "Vote Sekarang", + }, + // Verifications + verifications: { + only_developer: "Perintah ini hanya tersedia untuk pengembang.", + only_guild_owner: "Perintah ini hanya tersedia untuk pemilik server.", + }, + // Voice + voice: { + no_same: ({ channel }) => + `Kamu harus berada di voice channel yang sama dengan ku di ${channel}!`, + no_vc: + "Kamu harus berada di voice channel untuk menggunakan perintah ini!", + no_perms: ({ channel }) => + `Aku tidak memiliki izin yang diperlukan di ${channel}!`, + missing_perms: "Izin Tidak Mencukupi", + failed: "Gagal bergabung ke voice channel kamu!", + }, + // Listeners + listeners: { + no_members: "Tidak ada anggota yang tersisa di voice channel", + disconnect: ({ time }) => + `Voice channel kosong! Pemain akan diputuskan dalam ${time}`, + resume: "Anggota bergabung! Melanjutkan pemutaran", + }, + // Mention + mention: { + title: "Selamat datang di Soundy!", + description: { + 1: ({ prefix }) => + `Gunakan \`${prefix}help\` atau \`/help\` untuk menemukan semua perintah luar biasa ku`, + 2: "Butuh bantuan? Bergabunglah dengan Server Dukungan kami untuk bantuan", + 3: ({ prefix }) => + `Ingin memulai? Cukup ketik \`${prefix}play\` atau \`/play\` untuk memulai perjalanan musik kamu!`, + 4: "Fitur:", + 5: "Streaming musik berkualitas tinggi", + 6: "Manajemen daftar putar yang kaya", + 7: "Dukungan untuk berbagai platform", + }, + footer: + "Putar musik berkualitas tinggi di server Discord kamu secara gratis.", + button: { + add: "Invite ke Server", + support: "Server Support", + vote: "Vote", + }, + }, + // Overrides + overrides: { + error: "Terjadi kesalahan saat menjalankan perintah ini", + missing_perms: "Izin Tidak Mencukupi", + missing_user_perms: + "Kamu tidak memiliki izin yang diperlukan untuk menggunakan perintah ini", + missing_bot_perms: + "Aku tidak memiliki izin yang diperlukan untuk menggunakan perintah ini", + invalid_command: { + 1: "Penggunaan perintah tidak valid. Berikut cara menggunakannya:", + 2: "Opsi:", + }, + }, + // Paginator + paginator: { + only_author: + "Maaf, hanya pembuat perintah yang dapat menggunakan menu ini.", + }, + }, + // Components + component: { + // Clear Queue + clear: { + description: "Antrian telah dibersihkan", + }, + // Loop + loop: { + title: "Mode Loop Diperbarui", + description: ({ mode }) => `Mode loop diperbarui ke ${mode}`, + select_title: "Pilihan Mode Loop", + select_description: "Pilih mode loop untuk diubah:", + off: "Mati", + track: "Lagu", + queue: "Antrian", + loop_off: "Loop saat ini dinonaktifkan", + loop_track: "Saat ini mengulang lagu yang sedang diputar", + loop_queue: "Saat ini mengulang seluruh antrian", + }, + // Previous + previous: { + title: "Memutar lagu sebelumnya", + description: + "Mengulang perjalanan musik kembali ke awal!\nSaatnya menikmati lagu keren ini sekali lagi!", + no_previous: "Tidak ada lagu sebelumnya", + no_previous_description: + "Ups! Tidak ada lagu sebelumnya untuk diputar!\nMari lanjutkan dengan lagu yang sedang diputar!", + }, + // Queue + queue: { + name: "Antrian", + now_playing: "Sedang Diputar", + total: ({ total }) => `Total lagu: ${total}`, + track: ({ track, author }) => `${track} oleh ${author}`, + requested_by: ({ user }) => `Diminta oleh ${user}`, + up_next: "Berikutnya", + unknown_artist: "Artis Tidak Dikenal", + }, + // Shuffle + shuffle: { + description: + "Antrian telah diacak!\nMari lanjutkan pesta dengan campuran baru!", + }, + skip: { + title: "Dilewati", + description: "Melompat ke lagu berikutnya dalam antrian", + autoplay: "Melompat ke lagu rekomendasi yang keren", + end: "Selesai! Kita telah mencapai akhir perjalanan musik kita untuk saat ini.\nSaatnya memulai yang baru dengan lagu-lagu segar!", + }, + stop: { + title: "Dihentikan", + description: + "Pesta telah selesai! Aku telah membersihkan antrian dan membereskan speaker.\nSiap kapanpun kamu ingin memulai petualangan musik lainnya!", + }, + // Volume + volume: { + title: "Volume Diatur", + description: ({ volume }) => `Volume telah diatur ke ${volume}%`, + }, + + // Node Select + nodeSelect: { + title: ({ node }) => `Informasi Node - ${node}`, + status: ({ status }) => `Status: ${status}`, + connected: "Terhubung", + disconnected: "Terputus", + description: "Pilih node untuk melihat informasi detail", + players: ({ players }) => `Pemain: ${players}`, + playing_players: ({ playingPlayers }) => + `Pemain Aktif: ${playingPlayers}`, + uptime: ({ uptime }) => `Waktu Aktif: ${uptime}`, + cpu: "CPU", + cores: ({ cores }) => `Inti: ${cores}`, + system_load: ({ systemLoad }) => `Load Sistem: ${systemLoad}%`, + lavalink_load: ({ lavalinkLoad }) => `Load Lavalink: ${lavalinkLoad}%`, + memory: "Memori", + used: ({ used }) => `Terpakai: ${used}`, + reservable: ({ reservable }) => `Dapat Direservasi: ${reservable}`, + no_node: "Node ini tidak lagi tersedia.", + }, + }, + // Middleware + middlewares: { + cooldown: { + description: ({ seconds }) => + `Mohon tunggu ${seconds} detik sebelum menggunakan perintah ini lagi.`, + }, + }, + // Autocomplete + autocomplete: { + music: { + no_nodes: "Tidak ada node yang tersedia", + no_voice: "Tidak ada voice channel", + no_tracks: "Tidak ada lagu yang ditemukan", + }, + }, +} satisfies typeof English;