test / bot /i18n.py
mtaaz's picture
Upload 94 files
91c7f83 verified
"""
Internationalization (i18n) system for the bot.
Provides multi-language support with emoji placeholders and fallback handling.
COMPLETE SYSTEM: All commands, descriptions, buttons, panels, and messages.
"""
from bot.emojis import ui
# ═══════════════════════════════════════════════════════════════════════════════
# COMPLETE TRANSLATIONS DICTIONARY
# ═══════════════════════════════════════════════════════════════════════════════
TRANSLATIONS: dict[str, dict[str, str]] = {}
# ═══════════════════════════════════════════════════════════════════════════════
# ARABIC TRANSLATIONS (اللغة العربية)
# ═══════════════════════════════════════════════════════════════════════════════
TRANSLATIONS["ar"] = {
# === Language Commands ===
"lang.current": "{globe} لغة السيرفر الحالية: **العربية**.",
"lang.updated": "{ok} تم تغيير لغة البوت إلى **العربية**. استخدم `/menu` لرؤية الأوامر باللغة المحددة.",
"lang.invalid": "{no} لغة غير مدعومة. استخدم: `ar`, `de`, `en`, `es`, `fr`, `he`, `hi`, `id`, `it`, `ja`, `pt`, `ru`, `tr`, `zh`.",
# === Menu System ===
"menu.title": "{menu} قائمة أوامر البوت",
"menu.desc": "اختر القسم من القائمة لعرض أوامر واضحة ومختصرة.",
"menu.all": "الكل",
"menu.ai": "لوحة الذكاء الاصطناعي",
"menu.none": "لا توجد أوامر متاحة.",
"menu.total": "الإجمالي: {count} أمر",
"menu.category": "القسم: {name}",
"menu.category_count": "{name}: {count} أمر",
"menu.refresh": "تحديث",
"menu.invite_button": "أضِفنا إلى سيرفرك",
"menu.support_button": "دعم على GitHub",
"menu.stats_title": "إحصاءات النيون",
"menu.stats.commands": "الأوامر: {total}",
"menu.stats.categories": "الفئات: {categories}",
"menu.stats.selected": "{name}: {count} أمر",
"menu.categories_header": "أبرز الفئات",
"menu.tip_title": "نصيحة",
"menu.tip": "استخدم القائمة لاستكشاف الأوامر أو اضغط تحديث للحصول على معلومات جديدة.",
"menu.footer": "الحالة الحالية: {selected}",
"menu.select_placeholder": "📂 اختر قسم...",
"menu.select_all_desc": "📚 عرض جميع الأوامر",
"menu.select_ai_desc": "🤖 أوامر الذكاء الاصطناعي",
"menu.hub_title": "📚 مركز الأوامر",
"menu.hub_welcome": "✨ **مرحباً بك في مركز الأوامر!**",
"menu.hub_explore": "🔍 استخدم القائمة أدناه لاستكشاف جميع الأوامر",
"menu.hub_usage": "⌨️ اكتب `/<أمر>` لاستخدام أي أمر",
"menu.stats_heading": "📊 الإحصائيات",
"menu.categories_heading": "🏆 أفضل الفئات",
"menu.tips_heading": "💡 نصائح سريعة",
"menu.quick_heading": "✨ أوامر سريعة",
"menu.tip_line_1": "استخدم `/help <أمر>` للتفاصيل",
"menu.tip_line_2": "معظم الأوامر تدعم السلاش والبادئة",
"menu.tip_line_3": "تحقق من `/menu` لجميع الأوامر",
"menu.quick_music": "تحكم الموسيقى",
"menu.quick_gamehub": "غرف الألعاب",
"menu.quick_tournament": "البطولات",
"menu.quick_economy": "لوحة الاقتصاد",
"menu.footer_viewing": "📚 عرض: {selected}",
"menu.category_desc.music": "🎵 أوامر الموسيقى والتحكم بالتشغيل",
"menu.category_desc.admin": "🛡️ أدوات إدارة السيرفر",
"menu.category_desc.fun": "🎮 ألعاب وترفيه",
"menu.category_desc.ai": "🤖 ميزات الذكاء الاصطناعي",
"menu.category_desc.utility": "🔧 أوامر مفيدة يومية",
"menu.category_desc.config": "⚙️ إعدادات البوت",
# === Menu - Command Descriptions (الأوامر ووصفها) ===
# Music Commands
"menu.cmd.play": "تشغيل أغنية بالرابط أو الاسم",
"menu.cmd.music_play": "تشغيل أغنية داخل لوحة الموسيقى",
"menu.cmd.music_panel": "فتح لوحة التحكم بالموسيقى",
"menu.cmd.music_skip": "تخطي المقطع الحالي",
"menu.cmd.music_stop": "إيقاف الموسيقى وتفريغ الطابور",
"menu.cmd.music_pause": "إيقاف مؤقت للموسيقى",
"menu.cmd.music_resume": "استئناف التشغيل",
"menu.cmd.music_queue": "عرض طابور الموسيقى",
"menu.cmd.music_volume": "تغيير مستوى الصوت",
"menu.cmd.music_nowplaying": "عرض المقطع الحالي",
"menu.cmd.music_filter": "تطبيق فلتر صوتي",
"menu.cmd.music_loop": "تغيير وضع التكرار",
"menu.cmd.music_shuffle": "خلط ترتيب الطابور",
"menu.cmd.music_247": "تفعيل/إيقاف وضع 24/7",
"menu.cmd.music_previous": "تشغيل المقطع السابق",
"menu.cmd.music_seek": "الانتقال لوقت محدد",
"menu.cmd.music_clear": "مسح طابور الموسيقى",
"menu.cmd.music_remove": "إزالة مقطع من الطابور",
"menu.cmd.music_move": "تحريك مقطع في الطابور",
"menu.cmd.music_jump": "القفز لمقطع محدد",
"menu.cmd.music_lyrics": "عرض كلمات الأغنية",
# Admin Commands
"menu.cmd.purge": "حذف عدد من الرسائل بسرعة",
"menu.cmd.ban": "حظر عضو من السيرفر",
"menu.cmd.unban": "فك حظر عضو",
"menu.cmd.kick": "طرد عضو من السيرفر",
"menu.cmd.mute": "كتم عضو لمدة محددة",
"menu.cmd.unmute": "فك كتم عضو",
"menu.cmd.warn": "تحذير عضو",
"menu.cmd.warnings": "عرض تحذيرات العضو",
"menu.cmd.clearwarn": "مسح تحذيرات العضو",
"menu.cmd.slowmode": "ضبط البطيء في القناة",
"menu.cmd.lock": "قفل القناة الحالية",
"menu.cmd.unlock": "فتح القناة المقفلة",
"menu.cmd.cloneemoji": "نسخ إيموجي للسيرفر",
"menu.cmd.awesomeroles": "إنشاء أدوار ملونة رائعة",
"menu.cmd.backupserver": "إنشاء نسخة احتياطية للسيرفر",
# Fun Commands
"menu.cmd.8ball": "اسأل الكرة السحرية",
"menu.cmd.meme": "صورة مضحكة عشوائية",
"menu.cmd.trivia": "أسئلة ثقافية متنوعة",
"menu.cmd.gaming_news": "آخر أخبار الألعاب",
"menu.cmd.free_games": "عروض ألعاب مجانية",
"menu.cmd.gamehub": "مركز الألعاب مع غرف خاصة",
"menu.cmd.xo": "لعبة إكس-أو",
"menu.cmd.choose": "اختيار عشوائي من خيارات",
"menu.cmd.mario": "تحدي ماريو الآركيد",
"menu.cmd.dice": "رمي نرد",
"menu.cmd.slots": "لعبة سلوتس",
"menu.cmd.coinflip": "رمي عملة",
"menu.cmd.roll": "رمي رقم عشوائي",
# AI Commands
"menu.cmd.chat": "دردشة مع الذكاء الاصطناعي",
"menu.cmd.ask_image": "تحليل صورة بالذكاء الاصطناعي",
"menu.cmd.imagine": "إنشاء وصف لتوليد صور",
"menu.cmd.image_gen": "توليد صورة من وصف",
"menu.cmd.upscale": "تحسين جودة صورة",
"menu.cmd.summarize": "تلخيص محادثات القناة",
"menu.cmd.ai": "إعدادات الذكاء الاصطناعي",
"menu.cmd.ai_model": "تغيير موديل AI",
"menu.cmd.ai_channel": "تحديد قناة الشات التلقائي",
"menu.cmd.ai_auto": "تفعيل/إيقاف الشات التلقائي",
# Utility Commands
"menu.cmd.serverinfo": "معلومات السيرفر التفصيلية",
"menu.cmd.userinfo": "معلومات العضو التفصيلية",
"menu.cmd.botstats": "إحصائيات البوت",
"menu.cmd.poll": "إنشاء تصويت تفاعلي",
"menu.cmd.remind": "تعيين تذكير",
"menu.cmd.avatar": "عرض صورة البروفايل",
"menu.cmd.banner": "عرض بانر العضو",
"menu.cmd.translate": "ترجمة نص",
# Configuration Commands
"menu.cmd.set": "إعدادات السيرفر",
"menu.cmd.set_log": "تحديد قناة السجلات",
"menu.cmd.set_welcome": "تحديد قناة الترحيب",
"menu.cmd.set_suggestions": "تحديد قناة الاقتراحات",
"menu.cmd.set_automod": "تفعيل/إيقاف المراقبة التلقائية",
"menu.cmd.set_dailymessage": "رسالة اليومية",
"menu.cmd.set_dailychannel": "قناة الرسالة اليومية",
"menu.cmd.set_dailytime": "وقت الرسالة اليومية",
"menu.cmd.set_dailytitle": "عنوان الرسالة اليومية",
"menu.cmd.set_dailyimage": "صورة الرسالة اليومية",
"menu.cmd.set_dailybutton": "زر الرسالة اليومية",
"menu.cmd.set_dailytoggle": "تفعيل/إيقاف اليومية",
"menu.cmd.set_pollchannel": "قناة التصويتات",
"menu.cmd.set_freegames": "قناة عروض الألعاب",
"menu.cmd.set_gamenews": "قناة أخبار الألعاب",
"menu.cmd.set_supportai": "قناة الدعم الذكي",
"menu.cmd.set_wisdom": "قناة الحكم اليومية",
# Language Commands
"menu.cmd.language": "تغيير لغة البوت",
"menu.cmd.languages": "عرض اللغات المدعومة",
# Menu Commands
"menu.cmd.menu": "عرض قائمة الأوامر التفاعلية",
"menu.cmd.ping": "فحص سرعة البوت",
# Verification Commands
"menu.cmd.verify": "التحقق في السيرفر",
"menu.cmd.verifysetup": "إعداد نظام التحقق",
# Economy Commands
"menu.cmd.economy": "لوحة الاقتصاد",
"menu.cmd.balance": "عرض رصيدك",
"menu.cmd.daily": "المكافأة اليومية",
"menu.cmd.work": "اعمل واكسب مالاً",
"menu.cmd.gamble": "قمار برصيدك",
"menu.cmd.rob": "سرقة من عضو",
"menu.cmd.leaderboard": "لوحة المتصدرين",
"menu.cmd.shop": "المتجر",
"menu.cmd.buy": "شراء من المتجر",
"menu.cmd.inventory": "مخزونك",
"menu.cmd.transfer": "تحويل أموال لعضو",
# Engagement Commands
"menu.cmd.xp": "عرض نقاط خبرتك",
"menu.cmd.level": "عرض مستواك",
"menu.cmd.rank": "عرض رتبتك",
# Tournament Commands
"menu.cmd.tournament": "إدارة البطولات",
"menu.cmd.tournament_panel": "لوحة البطولة",
"menu.cmd.tournament_create": "إنشاء بطولة جديدة",
"menu.cmd.tournament_join": "الانضمام لبطولة",
"menu.cmd.tournament_start": "بدء البطولة",
"menu.cmd.tournament_end": "إنهاء البطولة",
"menu.cmd.tournament_lb": "لوحة تصنيف البطولات",
# Music Commands (Basic)
"menu.cmd.join": "دخول الروم الصوتي",
"menu.cmd.leave": "الخروج من الروم الصوتي",
"menu.cmd.play": "تشغيل أغنية",
"menu.cmd.pause": "إيقاف مؤقت",
"menu.cmd.skip": "تخطي المقطع",
"menu.cmd.stop": "إيقاف التشغيل",
"menu.cmd.queue": "عرض الطابور",
# Board Games Commands
"menu.cmd.boardgames": "عرض ألعاب اللوح",
"menu.cmd.board_start": "بدء لعبة لوح",
"menu.cmd.board_move": "لعب حركة",
"menu.cmd.board_forfeit": "الانسحاب من اللعبة",
"menu.cmd.chess": "بدء لعبة شطرنج",
"menu.cmd.checkers": "بدء لعبة الداما",
"menu.cmd.connect4": "بدء لعبة الاتصال 4",
"menu.cmd.othello": "بدء لعبة أوثيلو",
"menu.cmd.games_panel": "لوحة الألعاب",
# Poll Commands
"menu.cmd.createpoll": "إنشاء تصويت",
"menu.cmd.quickpoll": "تصويت سريع",
"menu.cmd.votepoll": "تصويت بخيارات",
"menu.cmd.strawpoll": "تصويت مجهول",
"menu.cmd.pollpanel": "لوحة التصويت",
"menu.cmd.pollstats": "إحصائيات التصويت",
"menu.cmd.endpoll": "إنهاء التصويت",
"menu.cmd.poll": "إنشاء تصويت",
# Suggestion Commands
"menu.cmd.suggest": "إرسال اقتراح",
"menu.cmd.suggestion": "إدارة الاقتراحات",
"menu.cmd.setsuggestionchannel": "قناة الاقتراحات",
"menu.cmd.setpollchannel": "قناة التصويتات",
# Economy Extended
"menu.cmd.deposit": "إيداع في البنك",
"menu.cmd.withdraw": "سحب من البنك",
"menu.cmd.profile": "ملفك الشخصي",
# Wisdom Command
"menu.cmd.wisdom_today": "حكمة اليوم",
# Gaming Commands
"menu.cmd.gaming_news": "أخبار الألعاب",
"menu.cmd.free_games": "ألعاب مجانية",
"menu.cmd.gamehub": "مركز الألعاب",
# Misc Commands
"menu.cmd.guess": "لعبة التخمين",
"menu.cmd.rps": "حجر ورقة مقص",
"menu.cmd.make_event": "إنشاء فعالية",
"menu.cmd.setupserver": "إعداد السيرفر",
"menu.cmd.listbackups": "عرض النسخ الاحتياطية",
"menu.cmd.restorebackup": "استعادة نسخة احتياطية",
"menu.cmd.organizechannels": "ترتيب القنوات",
# Bot Stats
"menu.cmd.botstats": "إحصائيات البوت",
# === Music Panel ===
"music.panel.title": "{music} لوحة الموسيقى",
"music.panel.desc": "لوحة موسيقى محسنة: تشغيل، بحث، اقتراحات، معاينة، السابق/التالي، إيقاف، وطابور + 24/7.",
"music.need_voice": "ادخل روم صوتي أولاً.",
"music.joined": "{join} دخلت إلى {channel}",
"music.not_in_voice": "لست داخل أي روم صوتي.",
"music.left": "👋 تم الخروج من الروم الصوتي.",
"music.added": "{ok} تمت الإضافة للطابور: **{title}**",
"music.nothing_playing": "لا يوجد تشغيل حالي.",
"music.skipped": "{skip} تم التخطي",
"music.stopped": "{stop} تم إيقاف التشغيل وتفريغ الطابور.",
"music.paused": "{pause} تم إيقاف الموسيقى مؤقتاً.",
"music.resumed": "{resume} تم استئناف التشغيل.",
"music.queue_empty": "الطابور فارغ.",
"music.now_playing": "{queue} الآن يتم التشغيل",
"music.play.prompt": "أرسل اسم الأغنية أو رابط الفيديو/الصوت.",
"music.video.result": "{video} نتيجة الفيديو",
"music.playlist.detected": "{music} تم اكتشاف قائمة تشغيل - جاري تحميل جميع المقاطع...",
"music.extract_failed": "{no} تعذر تشغيل هذا الرابط/الاسم. جرّب رابطًا آخر أو أعد المحاولة.",
"music.volume.set": "🔊 تم ضبط الصوت على **{volume}%**",
"music.filter.set": "🎛️ تم تطبيق الفلتر: **{filter}**",
"music.loop.off": "🔁 التكرار: **مغلق**",
"music.loop.track": "🔂 التكرار: **المقطع الحالي**",
"music.loop.queue": "🔄 التكرار: **الطابور كامل**",
"music.shuffle.done": "🔀 تم خلط الطابور!",
"music.247.enabled": "♾️ وضع 24/7 **مفعّل** - البوت لن يغادر الروم.",
"music.247.disabled": "✅ وضع 24/7 **معطّل**.",
# === Music Panel Buttons ===
"music.btn.join": "دخول",
"music.btn.leave": "خروج",
"music.btn.play": "تشغيل",
"music.btn.pause": "إيقاف مؤقت",
"music.btn.stop": "إيقاف",
"music.btn.skip": "تخطي",
"music.btn.previous": "السابق",
"music.btn.queue": "الطابور",
"music.btn.filters": "الفلاتر",
"music.btn.247": "24/7",
"music.btn.refresh": "تحديث",
"music.btn.preview": "معاينة",
"music.btn.close": "إغلاق",
"music.btn.shuffle": "خلط",
"music.btn.clear": "مسح",
"music.btn.mute": "كتم",
"music.btn.unmute": "فك الكتم",
# === Music Panel Embed ===
"music.panel.now_playing": "🎵 يعمل الآن",
"music.panel.up_next": "📜 التالي",
"music.panel.playback_status": "⚙️ حالة التشغيل",
"music.panel.status": "الحالة",
"music.panel.volume": "الصوت",
"music.panel.loop": "التكرار",
"music.panel.247": "24/7",
"music.enabled": "مفعّل",
"music.disabled": "معطّل",
"music.panel.no_track": "لا يوجد مقطع يعمل حالياً.",
"music.panel.empty_queue": "الطابور فارغ.",
"music.panel.queue_hint": "أضف مقاطع باستخدام `/music play` أو لوحة الموسيقى.",
"music.panel.and_more": "أخرى",
"music.loop.off_label": "إيقاف",
"music.loop.track_label": "مقطع",
"music.loop.queue_label": "الطابور",
"music.panel.playing": "يعزف",
"music.panel.paused": "متوقف مؤقتاً",
"music.panel.stopped": "متوقف",
# === Music Panel Fields ===
"music.field.now_playing": "🎵 الآن يعمل",
"music.field.up_next": "📜 التالي ({count} مقطع)",
"music.field.playback": "⚙️ التشغيل",
"music.field.volume": "🔊 الصوت",
"music.field.loop": "🔁 التكرار",
"music.field.status": "📊 الحالة",
"music.field.filter": "🎛️ الفلتر",
"music.field.requester": "🙋 الطالب",
"music.field.duration": "⏱️ المدة",
# === Filters Panel ===
"filters.title": "🎛️ لوحة الفلاتر الصوتية",
"filters.current": "الفلتر الحالي",
"filters.volume": "الصوت",
"filters.select": "اختر فلتر...",
"filters.none": "بدون فلتر",
"filters.nightcore": "نايتكور",
"filters.vaporwave": "فايبوريف",
"filters.bassboost": "تعزيز الباس",
"filters.8d": "صوت 8D",
"filters.karaoke": "كاريوكي",
"filters.tremolo": "تريمولو",
"filters.vibrato": "فيبراتو",
"filters.echo": "صدى",
"filters.chipmunk": "سنجاب",
"filters.deep": "صوت عميق",
"filters.speedup": "تسريع",
"filters.slowdown": "تبطيء",
"filters.pop": "بوب",
"filters.rock": "روك",
"filters.electronic": "إلكترونية",
"filters.classical": "كلاسيكية",
# === Utility ===
"utility.serverinfo.title": "{stats} معلومات السيرفر",
"utility.serverinfo.members": "{members} الأعضاء",
"utility.serverinfo.channels": "{channels} القنوات",
"utility.serverinfo.roles": "{roles} الرتب",
"utility.serverinfo.boost": "{boost} مستوى البوست",
"utility.serverinfo.created": "تاريخ الإنشاء",
"utility.serverinfo.id": "معرف السيرفر",
"utility.userinfo.title": "{user} معلومات العضو",
"utility.userinfo.id": "{user} المعرف",
"utility.userinfo.joined": "{join} انضم للسيرفر",
"utility.userinfo.created": "{stats} تاريخ إنشاء الحساب",
"utility.userinfo.level": "المستوى",
"utility.userinfo.xp": "الخبرة",
"utility.userinfo.xp_progress": "تقدم الخبرة",
"utility.userinfo.xp_next": "الخبرة للمستوى التالي",
"utility.refresh": "{refresh} تحديث",
"botstats.title": "{bot} إحصائيات البوت",
"botstats.servers": "{globe} السيرفرات",
"botstats.users": "{members} المستخدمون",
"botstats.latency": "{ping} اللاتنسي",
"botstats.cpu": "{settings} المعالج",
"botstats.ram": "{stats} الرام",
"botstats.uptime": "{refresh} مدة التشغيل",
# === Trivia ===
"trivia.title": "{trivia} تراڤيا مباشرة",
"trivia.category": "القسم",
"trivia.topics": "التصنيفات",
"trivia.invalid_category": "{no} قسم غير مدعوم. استخدم: gaming أو movies أو series.",
"trivia.correct": "✅ إجابة صحيحة!",
"trivia.wrong": "❌ إجابة خاطئة.",
"trivia.answered": "⚠️ تمت الإجابة بالفعل.",
"trivia.not_owner": "❌ هذا السؤال لصاحب الأمر فقط.",
"trivia.reward": "💰 **+{reward}** عملة!",
# === GameHub ===
"gamehub.title": "{gamehub} مركز الألعاب",
"gamehub.desc": "اختر لعبة لإنشاء غرفة خاصة. ادعُ صديقًا أو العب ضد البوت.",
"gamehub.room_created": "✅ تم إنشاء الغرفة: {room}",
"gamehub.invited": " | تمت دعوة {invitee}",
"gamehub.select_game": "🎮 اختر لعبة",
"gamehub.close_room": "🔒 أغلق الغرفة عند الانتهاء",
"gamehub.invite_friend": "➕ دعوة صديق",
"gamehub.room_ready": "🎮 الغرفة جاهزة. العب الآن!",
"gamehub.host": "👤 المضيف",
"gamehub.invitee": "🎯 المدعو",
# === Games ===
"games.tictactoe.title": "❎ تيك تاك تو",
"games.tictactoe.turn": "🎮 الدور",
"games.tictactoe.winner": "🏆 الفائز",
"games.tictactoe.draw": "🤝 تعادل!",
"games.tictactoe.vs": "ضد",
"games.tictactoe.bot": "🤖 بوت",
"games.8ball.title": "🎱 الكرة السحرية",
"games.8ball.question": "❓ السؤال",
"games.8ball.answer": "🎱 الجواب",
"games.dice.title": "🎲 رمي النرد",
"games.dice.result": "🎯 النتيجة",
"games.dice.sides": "وجوه",
"games.slots.title": "🎰 سلوتس",
"games.slots.bet": "الرهان",
"games.slots.win": "فوز!",
"games.slots.lose": "خسارة!",
"games.slots.jackpot": "🎉 جاكبوت!",
"games.choose.title": "🎲 اختيار عشوائي",
"games.choose.options": "📝 الخيارات",
"games.choose.selected": "🎯 المختار",
"games.coinflip.title": "🪏 رمي عملة",
"games.coinflip.result": "النتيجة",
"games.coinflip.heads": "صورة",
"games.coinflip.tails": "كتابة",
"games.mario.title": "🍄 تحدي الآركيد",
"games.mario.coins": "عملات",
"games.mario.level": "مرحلة",
"games.mario.bonus": "🎁 مكافأة",
# === Economy ===
"economy.panel.title": "💰 لوحة الاقتصاد",
"economy.balance": "الرصيد",
"economy.wallet": "المحفظة",
"economy.bank": "البنك",
"economy.daily": "يومي",
"economy.daily.claimed": "🕒 لقد استلمت مكافأتك اليومية بالفعل. ارجع غدًا!",
"economy.daily.reward": "🎁 مكافأتك اليومية: **{reward}** عملة!",
"economy.work.cooldown": "⏳ ارجع بعد **{mins}** دقيقة.",
"economy.work.earned": "💼 عملت وربحت `{reward}` عملة!",
"economy.gamble.win": "🎲 رهنت `{bet}` و **فزت** 🤑! `+{bet}` عملة.",
"economy.gamble.lose": "🎲 رهنت `{bet}` و **خسرت** 💀! `-{bet}` عملة.",
"economy.gamble.need": "❌ تحتاج على الأقل 50 عملة للمقامرة.",
"economy.rob.success": "🦝 نجحت! سرقت `{stolen}` عملة من {target}.",
"economy.rob.fail": "🚨 تم القبض عليك! دفعت `{fine}` عملة كغرامة.",
"economy.rob.target_poor": "❌ الهدف لديه أقل من 100 عملة، لا يستحق.",
"economy.transfer.done": "✅ تم تحويل **{amount}** عملة إلى {target}.",
"economy.transfer.insufficient": "❌ رصيدك غير كافي.",
"economy.leaderboard.title": "🏆 لوحة المتصدرين",
"economy.shop.title": "🛒 المتجر",
"economy.shop.buy": "شراء",
"economy.inventory.title": "📦 مخزونك",
# === Admin ===
"admin.purge.title": "🗑️ حذف الرسائل",
"admin.purge.done": "📝 تم حذف **{count}** رسالة.",
"admin.purge.moderator": "👤 المشرف",
"admin.warn.title": "⚠️ تحذير للعضو",
"admin.warn.user": "👤 المستخدم",
"admin.warn.moderator": "🛡️ المشرف",
"admin.warn.reason": "📝 السبب",
"admin.warn.dm_title": "⚠️ تم تحذيرك",
"admin.warn.server": "🏛️ السيرفر",
"admin.warn.cleared": "✅ تم مسح التحذيرات",
"admin.warn.none": "لا توجد تحذيرات. ✅",
"admin.warn.title_list": "📋 التحذيرات",
"admin.kick.title": "👢 طرد عضو",
"admin.kick.done": "تم طرد العضو",
"admin.kick.dm_title": "👢 تم طردك",
"admin.ban.title": "🔨 حظر عضو",
"admin.ban.done": "تم حظر العضو",
"admin.ban.dm_title": "🔨 تم حظرك",
"admin.unban.title": "🔓 فك حظر",
"admin.unban.done": "تم فك الحظر",
"admin.mute.title": "🔇 كتم عضو",
"admin.mute.done": "تم كتم العضو",
"admin.mute.duration": "⏰ المدة",
"admin.unmute.title": "🔊 فك كتم",
"admin.unmute.done": "تم فك الكتم",
"admin.slowmode.title": "⏱️ الوضع البطيء",
"admin.slowmode.enabled": "تم تفعيل الوضع البطيء",
"admin.slowmode.disabled": "تم إيقاف الوضع البطيء",
"admin.slowmode.duration": "🕒 المدة",
"admin.slowmode.channel": "📺 القناة",
"admin.lock.title": "🔒 قفل القناة",
"admin.lock.done": "تم قفل القناة",
"admin.unlock.title": "🔓 فتح القناة",
"admin.unlock.done": "تم فتح القناة",
"admin.cloneemoji.title": "✅ تم نسخ الإيموجي",
"admin.cloneemoji.new": "😀 الإيموجي الجديد",
"admin.cloneemoji.name": "📝 الاسم",
"admin.awesomeroles.title": "✨ الأدوار الرائعة",
"admin.awesomeroles.created": "✅ تم إنشاؤها",
"admin.awesomeroles.skipped": "⏭️ موجودة مسبقاً",
"admin.awesomeroles.tip": "💡 نصيحة",
"admin.backup.title": "💾 نسخة احتياطية",
"admin.backup.done": "تم إنشاء نسخة احتياطية",
"admin.backup.roles": "🎭 الأدوار",
"admin.backup.channels": "📺 القنوات",
"admin.backup.by": "👤 أنشئت بواسطة",
"admin.permission.denied": "❌ لا يمكنك فعل ذلك مع شخص برتبة أعلى أو مساوية.",
# === AI ===
"ai.title": "🤖 الذكاء الاصطناعي",
"ai.panel.title": "🤖 لوحة تحكم الذكاء الاصطناعي",
"ai.panel.desc": "إعدادات الذكاء الاصطناعي المباشرة للسيرفر مع معلومات تشخيصية.",
"ai.model": "🧠 الموديل الحالي",
"ai.model_default": "🧩 الموديل الافتراضي",
"ai.channel": "💬 قناة الشات",
"ai.auto": "⚙️ الوضع التلقائي",
"ai.enabled": "✅ مفعّل",
"ai.disabled": "❌ متوقف",
"ai.ready": "✅ جاهز",
"ai.not_ready": "❌ غير مضبوط",
"ai.cache": "📚 كاش الموديلات المجانية",
"ai.refresh": "اضغط تحديث لتحديث الحالة فوراً",
"ai.select_personality": "اختر شخصية الرد",
"ai.select_model": "اختر موديل مجاني من القائمة",
"ai.regenerate": "🔄 إعادة التوليد",
"ai.summarize": "📝 تلخيص الرد",
"ai.change_personality": "👤 تغيير الشخصية",
"ai.copy_code": "📋 نسخ الكود",
"ai.publish": "📢 نشر",
"ai.retry": "🔁 إعادة المحاولة",
"ai.prev": "⬅️ السابق",
"ai.next": "➡️ التالي",
"ai.toggle_auto": "🤖 تفعيل/إيقاف Auto",
"ai.change_model": "🧠 تغيير Model",
"ai.personality.wise": "🧠 حكيم",
"ai.personality.sarcastic": "😏 ساخر",
"ai.personality.technical": "🛠️ تقني",
"ai.personality.funny": "😄 فكاهي",
"ai.error.no_content": "لا يوجد محتوى كافٍ للتلخيص.",
"ai.error.owner_only": "هذا الزر لصاحب الطلب فقط.",
"ai.error.server_only": "هذا الأمر يعمل داخل السيرفر فقط.",
"ai.error.manage_required": "تحتاج صلاحية Manage Server.",
"ai.error.model_failed": "الموديل المختار غير متاح حالياً.",
"ai.error.rate_limit": "تم تجاوز الحصة (429). حاول بعد دقيقة.",
"ai.error.memory": "استهلاك ذاكرة مرتفع. جرّب طلباً أقصر.",
# === Configuration ===
"config.title": "⚙️ إعدادات السيرفر",
"config.log_channel": "📝 قناة السجلات",
"config.welcome_channel": "👋 قناة الترحيب",
"config.suggestion_channel": "💡 قناة الاقتراحات",
"config.verify_channel": "✅ قناة التحقق",
"config.verify_role": "🎭 رتبة التحقق",
"config.automod": "🛡️ المراقبة التلقائية",
"config.daily_channel": "📨 قناة الرسالة اليومية",
"config.daily_enabled": "📅 اليومية",
"config.daily_time": "⏰ وقت اليومية",
"config.daily_utc": "🌍 توقيت UTC",
"config.daily_title": "🖋️ عنوان اليومية",
"config.daily_message": "📝 نص اليومية",
"config.daily_image": "🖼️ صورة اليومية",
"config.daily_button": "🔗 زر اليومية",
"config.poll_channel": "📊 قناة التصويتات",
"config.free_games_channel": "🎁 قناة العروض المجانية",
"config.free_games_role": "🎭 رتبة العروض",
"config.support_channel": "🛟 قناة الدعم الذكي",
"config.support_ai": "🤖 الدعم الذكي",
"config.wisdom_channel": "🧠 قناة الحكم",
"config.wisdom_enabled": "📖 الحكمة اليومية",
"config.game_news_channel": "📰 قناة أخبار الألعاب",
"config.game_news_role": "🎭 رتبة الأخبار",
"config.not_set": "غير محدد",
"config.on": "مفعّل",
"config.off": "معطّل",
"config.refresh_panel": "🔄 تحديث اللوحة",
"config.footer": "استخدم أوامر /set للتحديث • اضغط تحديث للوحة",
# === Poll ===
"poll.title": "🗳️ تصويت المجتمع",
"poll.total_voters": "إجمالي المصوتين",
"poll.by": "تصويت بواسطة",
"poll.can_change": "يمكنك تغيير تصويتك في أي وقت",
"poll.vote_saved": "✅ تم حفظ التصويت: **{option}**",
# === Reminder ===
"remind.set": "⏰ تم تعيين تذكير بعد **{seconds}** ثانية.",
"remind.message": "⏰ تذكير: {message}",
# === Errors ===
"error.generic": "⚠️ حدث خطأ. حاول مرة أخرى!",
"error.server_only": "هذا الأمر يعمل داخل السيرفر فقط.",
"error.no_permission": "❌ ليس لديك صلاحية لاستخدام هذا الأمر.",
"error.not_found": "❌ غير موجود.",
"error.cooldown": "⏳ انتظر قليلاً قبل إعادة المحاولة.",
"error.missing_argument": "❌ ينقص معلومة مطلوبة.",
"error.invalid_input": "❌ إدخال غير صحيح.",
# === Success ===
"success.done": "✅ تم بنجاح!",
"success.updated": "✅ تم التحديث!",
"success.created": "✅ تم الإنشاء!",
"success.deleted": "🗑️ تم الحذف!",
"success.saved": "💾 تم الحفظ!",
# === General ===
"general.loading": "⏳ جاري التحميل...",
"general.processing": "⚙️ جاري المعالجة...",
"general.please_wait": "⏳ يرجى الانتظار...",
"general.click_below": "👇 اضغط أدناه",
"general.or": "أو",
"general.and": "و",
}
# ═══════════════════════════════════════════════════════════════════════════════
# ENGLISH TRANSLATIONS
# ═══════════════════════════════════════════════════════════════════════════════
TRANSLATIONS["en"] = {
# === Language Commands ===
"lang.current": "{globe} Current server language: **English**.",
"lang.updated": "{ok} Bot language changed to **English**. Use `/menu` to view commands in the selected language.",
"lang.invalid": "{no} Unsupported language. Use: `ar`, `de`, `en`, `es`, `fr`, `he`, `hi`, `id`, `it`, `ja`, `pt`, `ru`, `tr`, `zh`.",
# === Menu System ===
"menu.title": "{menu} Bot Command Menu",
"menu.desc": "Choose a category to see clear command docs.",
"menu.all": "All",
"menu.ai": "AI Dashboard",
"menu.none": "No commands available.",
"menu.total": "Total: {count} commands",
"menu.category": "Category: {name}",
"menu.category_count": "{name}: {count} commands",
"menu.refresh": "Refresh",
"menu.invite_button": "Add to your server",
"menu.support_button": "Support on GitHub",
"menu.stats_title": "Neon Stats",
"menu.stats.commands": "Commands: {total}",
"menu.stats.categories": "Categories: {categories}",
"menu.stats.selected": "{name}: {count} commands",
"menu.categories_header": "Category Highlights",
"menu.tip_title": "Need more?",
"menu.tip": "Use the selector to explore commands and refresh anytime for new highlights.",
"menu.footer": "Current view: {selected}",
"menu.select_placeholder": "📂 Select a category...",
"menu.select_all_desc": "📚 View all commands",
"menu.select_ai_desc": "🤖 AI-powered commands",
"menu.hub_title": "📚 Master Hub",
"menu.hub_welcome": "✨ **Welcome to the Command Center!**",
"menu.hub_explore": "🔍 Use the dropdown below to explore all commands",
"menu.hub_usage": "⌨️ Type `/<command>` to use any command",
"menu.stats_heading": "📊 Statistics",
"menu.categories_heading": "🏆 Top Categories",
"menu.tips_heading": "💡 Pro Tips",
"menu.quick_heading": "✨ Quick Commands",
"menu.tip_line_1": "Use `/help <command>` for details",
"menu.tip_line_2": "Most commands support slash & prefix",
"menu.tip_line_3": "Check `/menu` for all commands",
"menu.quick_music": "Music controls",
"menu.quick_gamehub": "Game rooms",
"menu.quick_tournament": "Tournaments",
"menu.quick_economy": "Economy dashboard",
"menu.footer_viewing": "📚 Viewing: {selected}",
"menu.category_desc.music": "🎵 Music commands for playback control",
"menu.category_desc.admin": "🛡️ Server administration tools",
"menu.category_desc.fun": "🎮 Fun games and entertainment",
"menu.category_desc.ai": "🤖 AI-powered features",
"menu.category_desc.utility": "🔧 Useful utility commands",
"menu.category_desc.config": "⚙️ Bot configuration settings",
# === Menu - Command Descriptions ===
# Music Commands
"menu.cmd.play": "Play a song by URL or name",
"menu.cmd.music_play": "Play music from the music panel",
"menu.cmd.music_panel": "Open the music control panel",
"menu.cmd.music_skip": "Skip the current track",
"menu.cmd.music_stop": "Stop music and clear the queue",
"menu.cmd.music_pause": "Pause the music",
"menu.cmd.music_resume": "Resume playback",
"menu.cmd.music_queue": "View the music queue",
"menu.cmd.music_volume": "Change the volume level",
"menu.cmd.music_nowplaying": "Show current track info",
"menu.cmd.music_filter": "Apply an audio filter",
"menu.cmd.music_loop": "Change loop mode",
"menu.cmd.music_shuffle": "Shuffle the queue",
"menu.cmd.music_247": "Toggle 24/7 mode",
"menu.cmd.music_previous": "Play the previous track",
"menu.cmd.music_seek": "Seek to a specific time",
"menu.cmd.music_clear": "Clear the music queue",
"menu.cmd.music_remove": "Remove a track from queue",
"menu.cmd.music_move": "Move a track in the queue",
"menu.cmd.music_jump": "Jump to a specific track",
"menu.cmd.music_lyrics": "Show song lyrics",
# Admin Commands
"menu.cmd.purge": "Delete a number of recent messages.",
"menu.cmd.ban": "Ban a member from the server",
"menu.cmd.unban": "Unban a member",
"menu.cmd.kick": "Kick a member from the server",
"menu.cmd.mute": "Mute a member for a duration",
"menu.cmd.unmute": "Unmute a member",
"menu.cmd.warn": "Warn a member",
"menu.cmd.warnings": "View member's warnings",
"menu.cmd.clearwarn": "Clear member's warnings",
"menu.cmd.slowmode": "Set slowmode in channel",
"menu.cmd.lock": "Lock the current channel",
"menu.cmd.unlock": "Unlock a locked channel",
"menu.cmd.cloneemoji": "Clone an emoji to this server",
"menu.cmd.awesomeroles": "Create awesome colored roles",
"menu.cmd.backupserver": "Create a server backup",
# Fun Commands
"menu.cmd.8ball": "Ask the magic 8-ball",
"menu.cmd.meme": "Random meme image",
"menu.cmd.trivia": "Various trivia questions",
"menu.cmd.gaming_news": "Latest gaming news",
"menu.cmd.free_games": "Free game offers",
"menu.cmd.gamehub": "Game hub with private rooms",
"menu.cmd.xo": "Tic-tac-toe game",
"menu.cmd.choose": "Random choice from options",
"menu.cmd.mario": "Mario arcade challenge",
"menu.cmd.dice": "Roll a dice",
"menu.cmd.slots": "Slots game",
"menu.cmd.coinflip": "Flip a coin",
"menu.cmd.roll": "Roll a random number",
# AI Commands
"menu.cmd.chat": "Chat with AI directly",
"menu.cmd.ask_image": "Analyze image with AI",
"menu.cmd.imagine": "Create prompt for image generation",
"menu.cmd.image_gen": "Generate image from description",
"menu.cmd.upscale": "Upscale an image",
"menu.cmd.summarize": "Summarize channel messages",
"menu.cmd.ai": "AI settings panel",
"menu.cmd.ai_model": "Change AI model",
"menu.cmd.ai_channel": "Set auto-chat channel",
"menu.cmd.ai_auto": "Toggle auto-chat mode",
# Utility Commands
"menu.cmd.serverinfo": "Detailed server information",
"menu.cmd.userinfo": "Detailed user information",
"menu.cmd.botstats": "Bot statistics",
"menu.cmd.poll": "Create an interactive poll",
"menu.cmd.remind": "Set a reminder",
"menu.cmd.avatar": "View profile picture",
"menu.cmd.banner": "View member banner",
"menu.cmd.translate": "Translate text",
# Configuration Commands
"menu.cmd.set": "Server settings panel",
"menu.cmd.set_log": "Set log channel",
"menu.cmd.set_welcome": "Set welcome channel",
"menu.cmd.set_suggestions": "Set suggestions channel",
"menu.cmd.set_automod": "Toggle auto-moderation",
"menu.cmd.set_dailymessage": "Daily message text",
"menu.cmd.set_dailychannel": "Daily message channel",
"menu.cmd.set_dailytime": "Daily message time",
"menu.cmd.set_dailytitle": "Daily message title",
"menu.cmd.set_dailyimage": "Daily message image",
"menu.cmd.set_dailybutton": "Daily message button",
"menu.cmd.set_dailytoggle": "Toggle daily message",
"menu.cmd.set_pollchannel": "Poll channel",
"menu.cmd.set_freegames": "Free games channel",
"menu.cmd.set_gamenews": "Gaming news channel",
"menu.cmd.set_supportai": "AI support channel",
"menu.cmd.set_wisdom": "Daily wisdom channel",
# Language Commands
"menu.cmd.language": "Change bot language",
"menu.cmd.languages": "View supported languages",
# Menu Commands
"menu.cmd.menu": "Show the interactive command menu.",
"menu.cmd.ping": "Check bot latency",
# Verification Commands
"menu.cmd.verify": "Verify in the server",
"menu.cmd.verifysetup": "Setup verification system",
# Economy Commands
"menu.cmd.economy": "Economy panel",
"menu.cmd.balance": "View your balance",
"menu.cmd.daily": "Daily reward",
"menu.cmd.work": "Work and earn money",
"menu.cmd.gamble": "Gamble your balance",
"menu.cmd.rob": "Rob from a member",
"menu.cmd.leaderboard": "Leaderboard",
"menu.cmd.shop": "Shop",
"menu.cmd.buy": "Buy from shop",
"menu.cmd.inventory": "Your inventory",
"menu.cmd.transfer": "Transfer money to member",
# Engagement Commands
"menu.cmd.xp": "View your XP points",
"menu.cmd.level": "View your level",
"menu.cmd.rank": "View your rank",
# Tournament Commands
"menu.cmd.tournament": "Tournament management",
"menu.cmd.tournament_panel": "Tournament panel",
"menu.cmd.tournament_create": "Create a new tournament",
"menu.cmd.tournament_join": "Join a tournament",
"menu.cmd.tournament_start": "Start tournament",
"menu.cmd.tournament_end": "End tournament",
"menu.cmd.tournament_lb": "Tournament leaderboard",
# Music Commands (Basic)
"menu.cmd.join": "Join a voice channel",
"menu.cmd.leave": "Leave voice channel",
"menu.cmd.play": "Play a song",
"menu.cmd.pause": "Pause playback",
"menu.cmd.skip": "Skip current track",
"menu.cmd.stop": "Stop playback",
"menu.cmd.queue": "View the queue",
# Board Games Commands
"menu.cmd.boardgames": "Show board games",
"menu.cmd.board_start": "Start a board game",
"menu.cmd.board_move": "Play a move",
"menu.cmd.board_forfeit": "Forfeit the game",
"menu.cmd.chess": "Start a chess game",
"menu.cmd.checkers": "Start a checkers game",
"menu.cmd.connect4": "Start a connect 4 game",
"menu.cmd.othello": "Start an othello game",
"menu.cmd.games_panel": "Games panel",
# Poll Commands
"menu.cmd.createpoll": "Create a poll",
"menu.cmd.quickpoll": "Quick yes/no poll",
"menu.cmd.votepoll": "Create vote poll",
"menu.cmd.strawpoll": "Create anonymous poll",
"menu.cmd.pollpanel": "Poll creation panel",
"menu.cmd.pollstats": "Show active polls",
"menu.cmd.endpoll": "End an active poll",
"menu.cmd.poll": "Create a poll",
# Suggestion Commands
"menu.cmd.suggest": "Submit a suggestion",
"menu.cmd.suggestion": "Manage suggestions",
"menu.cmd.setsuggestionchannel": "Set suggestion channel",
"menu.cmd.setpollchannel": "Set poll channel",
# Economy Extended
"menu.cmd.deposit": "Deposit to bank",
"menu.cmd.withdraw": "Withdraw from bank",
"menu.cmd.profile": "Your profile",
# Wisdom Command
"menu.cmd.wisdom_today": "Today's wisdom",
# Gaming Commands
"menu.cmd.gaming_news": "Gaming news",
"menu.cmd.free_games": "Free games",
"menu.cmd.gamehub": "Game hub",
# Misc Commands
"menu.cmd.guess": "Guessing game",
"menu.cmd.rps": "Rock paper scissors",
"menu.cmd.make_event": "Create an event",
"menu.cmd.setupserver": "Setup server",
"menu.cmd.listbackups": "List backups",
"menu.cmd.restorebackup": "Restore a backup",
"menu.cmd.organizechannels": "Organize channels",
# Bot Stats
"menu.cmd.botstats": "Bot statistics",
# === Music Panel ===
"music.panel.title": "{music} Music Panel",
"music.panel.desc": "Enhanced controls: play, search, suggestions, preview, previous/next, stop, queue + 24/7 mode.",
"music.need_voice": "Join a voice channel first.",
"music.joined": "{join} Joined {channel}",
"music.not_in_voice": "I'm not in any voice channel.",
"music.left": "👋 Left the voice channel.",
"music.added": "{ok} Added to queue: **{title}**",
"music.nothing_playing": "Nothing is currently playing.",
"music.skipped": "{skip} Skipped.",
"music.stopped": "{stop} Stopped playback and cleared queue.",
"music.paused": "{pause} Paused.",
"music.resumed": "{resume} Resumed.",
"music.queue_empty": "The queue is empty.",
"music.now_playing": "{queue} Now Playing",
"music.play.prompt": "Send a song name or a video/audio URL.",
"music.video.result": "{video} Video Result",
"music.playlist.detected": "{music} Playlist detected — loading all tracks...",
"music.extract_failed": "{no} Could not play this song/link. Please try another one.",
"music.volume.set": "🔊 Volume set to **{volume}%**",
"music.filter.set": "🎛️ Filter applied: **{filter}**",
"music.loop.off": "🔁 Loop: **Off**",
"music.loop.track": "🔂 Loop: **Current Track**",
"music.loop.queue": "🔄 Loop: **Full Queue**",
"music.shuffle.done": "🔀 Queue shuffled!",
"music.247.enabled": "♾️ 24/7 mode **enabled** - Bot won't leave the voice channel.",
"music.247.disabled": "✅ 24/7 mode **disabled**.",
# === Music Panel Buttons ===
"music.btn.join": "Join",
"music.btn.leave": "Leave",
"music.btn.play": "Play",
"music.btn.pause": "Pause",
"music.btn.stop": "Stop",
"music.btn.skip": "Skip",
"music.btn.previous": "Previous",
"music.btn.queue": "Queue",
"music.btn.filters": "Filters",
"music.btn.247": "24/7",
"music.btn.refresh": "Refresh",
"music.btn.preview": "Preview",
"music.btn.close": "Close",
"music.btn.shuffle": "Shuffle",
"music.btn.clear": "Clear",
"music.btn.mute": "Mute",
"music.btn.unmute": "Unmute",
# === Music Panel Embed ===
"music.panel.now_playing": "🎵 Now Playing",
"music.panel.up_next": "📜 Up Next",
"music.panel.playback_status": "⚙️ Playback Status",
"music.panel.status": "Status",
"music.panel.volume": "Volume",
"music.panel.loop": "Loop",
"music.panel.247": "24/7",
"music.enabled": "Enabled",
"music.disabled": "Disabled",
"music.panel.no_track": "No track is currently playing.",
"music.panel.empty_queue": "The queue is empty.",
"music.panel.queue_hint": "Add tracks with `/music play` or the music panel.",
"music.panel.and_more": "more",
"music.loop.off_label": "Off",
"music.loop.track_label": "Track",
"music.loop.queue_label": "Queue",
"music.panel.playing": "Playing",
"music.panel.paused": "Paused",
"music.panel.stopped": "Stopped",
# === Music Panel Fields ===
"music.field.now_playing": "🎵 Now Playing",
"music.field.up_next": "📜 Up Next ({count} tracks)",
"music.field.playback": "⚙️ Playback",
"music.field.volume": "🔊 Volume",
"music.field.loop": "🔁 Loop",
"music.field.status": "📊 Status",
"music.field.filter": "🎛️ Filter",
"music.field.requester": "🙋 Requester",
"music.field.duration": "⏱️ Duration",
# === Filters Panel ===
"filters.title": "🎛️ Audio Filters Panel",
"filters.current": "Current Filter",
"filters.volume": "Volume",
"filters.select": "Select a filter...",
"filters.none": "No Filter",
"filters.nightcore": "Nightcore",
"filters.vaporwave": "Vaporwave",
"filters.bassboost": "Bass Boost",
"filters.8d": "8D Audio",
"filters.karaoke": "Karaoke",
"filters.tremolo": "Tremolo",
"filters.vibrato": "Vibrato",
"filters.echo": "Echo",
"filters.chipmunk": "Chipmunk",
"filters.deep": "Deep Voice",
"filters.speedup": "Speed Up",
"filters.slowdown": "Slow Down",
"filters.pop": "Pop",
"filters.rock": "Rock",
"filters.electronic": "Electronic",
"filters.classical": "Classical",
# === Utility ===
"utility.serverinfo.title": "{stats} Server Info",
"utility.serverinfo.members": "{members} Members",
"utility.serverinfo.channels": "{channels} Channels",
"utility.serverinfo.roles": "{roles} Roles",
"utility.serverinfo.boost": "{boost} Boost Level",
"utility.serverinfo.created": "Created",
"utility.serverinfo.id": "Server ID",
"utility.userinfo.title": "{user} User Info",
"utility.userinfo.id": "{user} ID",
"utility.userinfo.joined": "{join} Joined Server",
"utility.userinfo.created": "{stats} Account Created",
"utility.userinfo.level": "Level",
"utility.userinfo.xp": "XP",
"utility.userinfo.xp_progress": "XP Progress",
"utility.userinfo.xp_next": "XP to next level",
"utility.refresh": "{refresh} Refresh",
"botstats.title": "{bot} Bot Stats",
"botstats.servers": "{globe} Servers",
"botstats.users": "{members} Users",
"botstats.latency": "{ping} Latency",
"botstats.cpu": "{settings} CPU",
"botstats.ram": "{stats} RAM",
"botstats.uptime": "{refresh} Uptime",
# === Trivia ===
"trivia.title": "{trivia} Live Trivia",
"trivia.category": "Category",
"trivia.topics": "Topics",
"trivia.invalid_category": "{no} Unsupported category. Use: gaming, movies, or series.",
"trivia.correct": "✅ Correct answer!",
"trivia.wrong": "❌ Wrong answer.",
"trivia.answered": "⚠️ Already answered.",
"trivia.not_owner": "❌ This question is for the command author only.",
"trivia.reward": "💰 **+{reward}** coins!",
# === GameHub ===
"gamehub.title": "{gamehub} Game Hub",
"gamehub.desc": "Select a game to create a private room. Invite a friend or play vs the bot.",
"gamehub.room_created": "✅ Room created: {room}",
"gamehub.invited": " | Invited {invitee}",
"gamehub.select_game": "🎮 Choose a game",
"gamehub.close_room": "🔒 Close the room when done",
"gamehub.invite_friend": "➕ Invite Friend",
"gamehub.room_ready": "🎮 Room is ready. Play now!",
"gamehub.host": "👤 Host",
"gamehub.invitee": "🎯 Invited",
# === Games ===
"games.tictactoe.title": "❎ TicTacToe",
"games.tictactoe.turn": "🎮 Turn",
"games.tictactoe.winner": "🏆 Winner",
"games.tictactoe.draw": "🤝 Draw!",
"games.tictactoe.vs": "vs",
"games.tictactoe.bot": "🤖 Bot",
"games.8ball.title": "🎱 Magic 8 Ball",
"games.8ball.question": "❓ Question",
"games.8ball.answer": "🎱 Answer",
"games.dice.title": "🎲 Dice Roll",
"games.dice.result": "🎯 Result",
"games.dice.sides": "sides",
"games.slots.title": "🎰 Slots",
"games.slots.bet": "Bet",
"games.slots.win": "Win!",
"games.slots.lose": "Lose!",
"games.slots.jackpot": "🎉 Jackpot!",
"games.choose.title": "🎲 Random Choice",
"games.choose.options": "📝 Options",
"games.choose.selected": "🎯 Selected",
"games.coinflip.title": "🪏 Coin Flip",
"games.coinflip.result": "Result",
"games.coinflip.heads": "Heads",
"games.coinflip.tails": "Tails",
"games.mario.title": "🍄 Arcade Challenge",
"games.mario.coins": "coins",
"games.mario.level": "level",
"games.mario.bonus": "🎁 Bonus",
# === Economy ===
"economy.panel.title": "💰 Economy Panel",
"economy.balance": "Balance",
"economy.wallet": "Wallet",
"economy.bank": "Bank",
"economy.daily": "Daily",
"economy.daily.claimed": "🕒 Already claimed today. Come back tomorrow!",
"economy.daily.reward": "🎁 Your daily reward: **{reward}** coins!",
"economy.work.cooldown": "⏳ Come back in **{mins}** minutes.",
"economy.work.earned": "💼 You worked and earned `{reward}` coins!",
"economy.gamble.win": "🎲 You bet `{bet}` and **won** 🤑! `+{bet}` coins.",
"economy.gamble.lose": "🎲 You bet `{bet}` and **lost** 💀! `-{bet}` coins.",
"economy.gamble.need": "❌ Need at least 50 coins to gamble.",
"economy.rob.success": "🦝 Success! You stole `{stolen}` coins from {target}.",
"economy.rob.fail": "🚨 You got caught! Paid `{fine}` coins as a fine.",
"economy.rob.target_poor": "❌ Target has less than 100 coins, not worth it.",
"economy.transfer.done": "✅ Transferred **{amount}** coins to {target}.",
"economy.transfer.insufficient": "❌ Insufficient balance.",
"economy.leaderboard.title": "🏆 Leaderboard",
"economy.shop.title": "🛒 Shop",
"economy.shop.buy": "Buy",
"economy.inventory.title": "📦 Your Inventory",
# === Admin ===
"admin.purge.title": "🗑️ Messages Purged",
"admin.purge.done": "📝 Deleted **{count}** messages.",
"admin.purge.moderator": "👤 Moderator",
"admin.warn.title": "⚠️ Member Warned",
"admin.warn.user": "👤 User",
"admin.warn.moderator": "🛡️ Moderator",
"admin.warn.reason": "📝 Reason",
"admin.warn.dm_title": "⚠️ You have been warned",
"admin.warn.server": "🏛️ Server",
"admin.warn.cleared": "✅ Warnings Cleared",
"admin.warn.none": "has no warnings. ✅",
"admin.warn.title_list": "📋 Warnings",
"admin.kick.title": "👢 Member Kicked",
"admin.kick.done": "Member kicked",
"admin.kick.dm_title": "👢 You have been kicked",
"admin.ban.title": "🔨 Member Banned",
"admin.ban.done": "Member banned",
"admin.ban.dm_title": "🔨 You have been banned",
"admin.unban.title": "🔓 Member Unbanned",
"admin.unban.done": "Member unbanned",
"admin.mute.title": "🔇 Member Muted",
"admin.mute.done": "Member muted",
"admin.mute.duration": "⏰ Duration",
"admin.unmute.title": "🔊 Member Unmuted",
"admin.unmute.done": "Member unmuted",
"admin.slowmode.title": "⏱️ Slowmode",
"admin.slowmode.enabled": "Slowmode enabled",
"admin.slowmode.disabled": "Slowmode disabled",
"admin.slowmode.duration": "🕒 Duration",
"admin.slowmode.channel": "📺 Channel",
"admin.lock.title": "🔒 Channel Locked",
"admin.lock.done": "Channel locked",
"admin.unlock.title": "🔓 Channel Unlocked",
"admin.unlock.done": "Channel unlocked",
"admin.cloneemoji.title": "✅ Emoji Cloned",
"admin.cloneemoji.new": "😀 New Emoji",
"admin.cloneemoji.name": "📝 Name",
"admin.awesomeroles.title": "✨ Awesome Roles",
"admin.awesomeroles.created": "✅ Created",
"admin.awesomeroles.skipped": "⏭️ Already Exist",
"admin.awesomeroles.tip": "💡 Tip",
"admin.backup.title": "💾 Server Backup",
"admin.backup.done": "Backup created",
"admin.backup.roles": "🎭 Roles",
"admin.backup.channels": "📺 Channels",
"admin.backup.by": "👤 Created by",
"admin.permission.denied": "❌ You cannot do that to someone with a higher or equal role.",
# === AI ===
"ai.title": "🤖 Artificial Intelligence",
"ai.panel.title": "🤖 AI Control Panel",
"ai.panel.desc": "Live AI configuration for this server with quick diagnostics.",
"ai.model": "🧠 Active Model",
"ai.model_default": "🧩 Default Model",
"ai.channel": "💬 Chat Channel",
"ai.auto": "⚙️ Auto Mode",
"ai.enabled": "✅ Enabled",
"ai.disabled": "❌ Disabled",
"ai.ready": "✅ Ready",
"ai.not_ready": "❌ Missing API key",
"ai.cache": "📚 Free Models Cache",
"ai.refresh": "Press Refresh to update status instantly",
"ai.select_personality": "Choose response personality",
"ai.select_model": "Select a free model from the list",
"ai.regenerate": "🔄 Regenerate",
"ai.summarize": "📝 Summarize Response",
"ai.change_personality": "👤 Change Personality",
"ai.copy_code": "📋 Copy Code",
"ai.publish": "📢 Publish",
"ai.retry": "🔁 Retry",
"ai.prev": "⬅️ Previous",
"ai.next": "➡️ Next",
"ai.toggle_auto": "🤖 Toggle Auto",
"ai.change_model": "🧠 Change Model",
"ai.personality.wise": "🧠 Wise",
"ai.personality.sarcastic": "😏 Sarcastic",
"ai.personality.technical": "🛠️ Technical",
"ai.personality.funny": "😄 Funny",
"ai.error.no_content": "No content to summarize.",
"ai.error.owner_only": "This button is for the request owner only.",
"ai.error.server_only": "This command works in servers only.",
"ai.error.manage_required": "You need Manage Server permission.",
"ai.error.model_failed": "Selected model is currently unavailable.",
"ai.error.rate_limit": "Rate limit exceeded (429). Try again in a minute.",
"ai.error.memory": "High memory usage. Try a shorter request.",
# === Configuration ===
"config.title": "⚙️ Server Settings",
"config.log_channel": "📝 Log Channel",
"config.welcome_channel": "👋 Welcome Channel",
"config.suggestion_channel": "💡 Suggestion Channel",
"config.verify_channel": "✅ Verification Channel",
"config.verify_role": "🎭 Verification Role",
"config.automod": "🛡️ Auto Moderation",
"config.daily_channel": "📨 Daily Channel",
"config.daily_enabled": "📅 Daily Enabled",
"config.daily_time": "⏰ Daily Time",
"config.daily_utc": "🌍 UTC Offset",
"config.daily_title": "🖋️ Daily Title",
"config.daily_message": "📝 Daily Message",
"config.daily_image": "🖼️ Daily Image",
"config.daily_button": "🔗 Daily Button",
"config.poll_channel": "📊 Poll Channel",
"config.free_games_channel": "🎁 Free Games Channel",
"config.free_games_role": "🎭 Free Games Role",
"config.support_channel": "🛟 Support AI Channel",
"config.support_ai": "🤖 Support AI",
"config.wisdom_channel": "🧠 Wisdom Channel",
"config.wisdom_enabled": "📖 Daily Wisdom",
"config.game_news_channel": "📰 Game News Channel",
"config.game_news_role": "🎭 Game News Role",
"config.not_set": "Not set",
"config.on": "On",
"config.off": "Off",
"config.refresh_panel": "🔄 Refresh Panel",
"config.footer": "Use /set commands to update • Click Refresh to update panel",
# === Poll ===
"poll.title": "🗳️ Community Poll",
"poll.total_voters": "Total voters",
"poll.by": "Poll by",
"poll.can_change": "You can change your vote any time",
"poll.vote_saved": "✅ Vote saved: **{option}**",
# === Reminder ===
"remind.set": "⏰ Reminder set in **{seconds}** seconds.",
"remind.message": "⏰ Reminder: {message}",
# === Errors ===
"error.generic": "⚠️ An error occurred. Try again!",
"error.server_only": "This command works in servers only.",
"error.no_permission": "❌ You don't have permission to use this command.",
"error.not_found": "❌ Not found.",
"error.cooldown": "⏳ Wait a bit before trying again.",
"error.missing_argument": "❌ Missing required information.",
"error.invalid_input": "❌ Invalid input.",
# === Success ===
"success.done": "✅ Done!",
"success.updated": "✅ Updated!",
"success.created": "✅ Created!",
"success.deleted": "🗑️ Deleted!",
"success.saved": "💾 Saved!",
# === General ===
"general.loading": "⏳ Loading...",
"general.processing": "⚙️ Processing...",
"general.please_wait": "⏳ Please wait...",
"general.click_below": "👇 Click below",
"general.or": "or",
"general.and": "and",
}
# ═══════════════════════════════════════════════════════════════════════════════
# OTHER LANGUAGE TRANSLATIONS (Spanish, French, German, Turkish, etc.)
# ═══════════════════════════════════════════════════════════════════════════════
# Spanish
TRANSLATIONS["es"] = {
"lang.current": "{globe} Idioma actual del servidor: **Español**.",
"lang.updated": "{ok} El idioma del bot se cambió a **Español**.",
"lang.invalid": "{no} Idioma no compatible.",
"menu.title": "{menu} Menú de comandos",
"menu.all": "Todo",
"menu.ai": "Panel IA",
"menu.refresh": "Actualizar",
"menu.invite_button": "Invitar al bot",
"menu.cmd.play": "Reproducir canción por URL o nombre",
"menu.cmd.purge": "Eliminar varios mensajes recientes",
"menu.cmd.ban": "Banear un miembro",
"menu.cmd.kick": "Expulsar un miembro",
"menu.cmd.mute": "Silenciar un miembro",
"menu.cmd.warn": "Advertir a un miembro",
"menu.cmd.serverinfo": "Información del servidor",
"menu.cmd.userinfo": "Información del usuario",
"menu.cmd.botstats": "Estadísticas del bot",
"menu.cmd.poll": "Crear una encuesta",
"menu.cmd.chat": "Chatear con IA",
"menu.cmd.gamehub": "Centro de juegos",
"menu.cmd.trivia": "Preguntas de trivia",
"menu.cmd.8ball": "Preguntar a la bola 8",
"menu.cmd.meme": "Meme aleatorio",
"menu.cmd.language": "Cambiar idioma",
"menu.cmd.menu": "Mostrar menú de comandos",
"ping.title": "{ping} Pong",
"ping.desc": "Latencia: **{latency}ms**",
}
# French
TRANSLATIONS["fr"] = {
"lang.current": "{globe} Langue actuelle du serveur : **Français**.",
"lang.updated": "{ok} La langue du bot a été changée en **Français**.",
"lang.invalid": "{no} Langue non prise en charge.",
"menu.title": "{menu} Menu des commandes",
"menu.all": "Tout",
"menu.ai": "Panneau IA",
"menu.refresh": "Actualiser",
"menu.invite_button": "Inviter le bot",
"menu.cmd.play": "Jouer une chanson par URL ou nom",
"menu.cmd.purge": "Supprimer plusieurs messages",
"menu.cmd.ban": "Bannir un membre",
"menu.cmd.kick": "Expulser un membre",
"menu.cmd.mute": "Rendre muet un membre",
"menu.cmd.serverinfo": "Informations du serveur",
"menu.cmd.userinfo": "Informations de l'utilisateur",
"menu.cmd.chat": "Discuter avec l'IA",
"menu.cmd.gamehub": "Centre de jeux",
"menu.cmd.language": "Changer la langue",
"ping.title": "{ping} Pong",
"ping.desc": "Latence : **{latency}ms**",
}
# German
TRANSLATIONS["de"] = {
"lang.current": "{globe} Aktuelle Serversprache: **Deutsch**.",
"lang.updated": "{ok} Bot-Sprache wurde auf **Deutsch** gesetzt.",
"lang.invalid": "{no} Nicht unterstützte Sprache.",
"menu.title": "{menu} Befehlsmenü",
"menu.all": "Alle",
"menu.ai": "KI-Dashboard",
"menu.refresh": "Aktualisieren",
"menu.invite_button": "Bot einladen",
"menu.cmd.play": "Musik nach URL oder Name abspielen",
"menu.cmd.purge": "Mehrere Nachrichten löschen",
"menu.cmd.ban": "Mitglied bannen",
"menu.cmd.kick": "Mitglied kicken",
"menu.cmd.serverinfo": "Server-Informationen",
"menu.cmd.chat": "Mit KI chatten",
"menu.cmd.gamehub": "Spielzentrum",
"menu.cmd.language": "Sprache ändern",
"ping.title": "{ping} Pong",
"ping.desc": "Latenz: **{latency}ms**",
}
# Turkish
TRANSLATIONS["tr"] = {
"lang.current": "{globe} Sunucu dili: **Türkçe**.",
"lang.updated": "{ok} Bot dili **Türkçe** olarak değiştirildi.",
"lang.invalid": "{no} Desteklenmeyen dil.",
"menu.title": "{menu} Komut Menüsü",
"menu.all": "Tümü",
"menu.ai": "YZ Paneli",
"menu.refresh": "Yenile",
"menu.invite_button": "Botu davet et",
"menu.cmd.play": "URL veya isimle şarkı çal",
"menu.cmd.purge": "Mesajları sil",
"menu.cmd.ban": "Üye yasakla",
"menu.cmd.kick": "Üye at",
"menu.cmd.serverinfo": "Sunucu bilgileri",
"menu.cmd.chat": "YZ ile sohbet",
"menu.cmd.gamehub": "Oyun merkezi",
"menu.cmd.language": "Dili değiştir",
"ping.title": "{ping} Pong",
"ping.desc": "Gecikme: **{latency}ms**",
}
# Italian
TRANSLATIONS["it"] = {
"lang.current": "{globe} Lingua corrente del server: **Italiano**.",
"lang.updated": "{ok} Lingua del bot impostata su **Italiano**.",
"lang.invalid": "{no} Lingua non supportata.",
"menu.title": "{menu} Menu Comandi",
"menu.all": "Tutto",
"menu.ai": "Pannello IA",
"menu.refresh": "Aggiorna",
"menu.cmd.play": "Riproduci brano per URL o nome",
"menu.cmd.serverinfo": "Info server",
"menu.cmd.chat": "Chatta con IA",
"ping.title": "{ping} Pong",
"ping.desc": "Latenza: **{latency}ms**",
}
# Portuguese
TRANSLATIONS["pt"] = {
"lang.current": "{globe} Idioma atual do servidor: **Português**.",
"lang.updated": "{ok} Idioma do bot alterado para **Português**.",
"lang.invalid": "{no} Idioma não suportado.",
"menu.title": "{menu} Menu de Comandos",
"menu.all": "Tudo",
"menu.ai": "Painel IA",
"menu.refresh": "Atualizar",
"menu.cmd.play": "Tocar música por URL ou nome",
"menu.cmd.serverinfo": "Info do servidor",
"menu.cmd.chat": "Conversar com IA",
"ping.title": "{ping} Pong",
"ping.desc": "Latência: **{latency}ms**",
}
# Russian
TRANSLATIONS["ru"] = {
"lang.current": "{globe} Текущий язык сервера: **Русский**.",
"lang.updated": "{ok} Язык бота изменён на **Русский**.",
"lang.invalid": "{no} Язык не поддерживается.",
"menu.title": "{menu} Меню команд",
"menu.all": "Все",
"menu.ai": "Панель ИИ",
"menu.refresh": "Обновить",
"menu.cmd.play": "Играть песню по URL или названию",
"menu.cmd.serverinfo": "Информация о сервере",
"menu.cmd.chat": "Чат с ИИ",
"ping.title": "{ping} Pong",
"ping.desc": "Задержка: **{latency}ms**",
}
# Hindi
TRANSLATIONS["hi"] = {
"lang.current": "{globe} सर्वर की वर्तमान भाषा: **हिन्दी**.",
"lang.updated": "{ok} बॉट की भाषा **हिन्दी** कर दी गई है।",
"lang.invalid": "{no} यह भाषा समर्थित नहीं है।",
"menu.title": "{menu} कमांड मेनू",
"menu.all": "सभी",
"menu.ai": "AI पैनल",
"menu.refresh": "रिफ्रेश",
"menu.cmd.play": "URL या नाम से गाना बजाएं",
"menu.cmd.serverinfo": "सर्वर जानकारी",
"menu.cmd.chat": "AI से चैट",
"ping.title": "{ping} Pong",
"ping.desc": "विलंबता: **{latency}ms**",
}
# Indonesian
TRANSLATIONS["id"] = {
"lang.current": "{globe} Bahasa server saat ini: **Indonesia**.",
"lang.updated": "{ok} Bahasa bot diubah ke **Indonesia**.",
"lang.invalid": "{no} Bahasa tidak didukung.",
"menu.title": "{menu} Menu Perintah",
"menu.all": "Semua",
"menu.ai": "Panel AI",
"menu.refresh": "Segarkan",
"menu.cmd.play": "Putar lagu dengan URL atau nama",
"menu.cmd.serverinfo": "Info server",
"menu.cmd.chat": "Chat dengan AI",
"ping.title": "{ping} Pong",
"ping.desc": "Latensi: **{latency}ms**",
}
# Japanese
TRANSLATIONS["ja"] = {
"lang.current": "{globe} 現在のサーバー言語: **日本語**。",
"lang.updated": "{ok} ボットの言語を **日本語** に変更しました。",
"lang.invalid": "{no} サポートされていない言語です。",
"menu.title": "{menu} コマンドメニュー",
"menu.all": "すべて",
"menu.ai": "AIパネル",
"menu.refresh": "更新",
"menu.cmd.play": "URLまたは名前で曲を再生",
"menu.cmd.serverinfo": "サーバー情報",
"menu.cmd.chat": "AIとチャット",
"ping.title": "{ping} Pong",
"ping.desc": "レイテンシ: **{latency}ms**",
}
# Hebrew
TRANSLATIONS["he"] = {
"lang.current": "{globe} שפת השרת הנוכחית: **עברית**.",
"lang.updated": "{ok} שפת הבוט שונתה ל-**עברית**.",
"lang.invalid": "{no} שפה לא נתמכת.",
"menu.title": "{menu} תפריט פקודות",
"menu.all": "הכל",
"menu.ai": "לוח AI",
"menu.refresh": "רענון",
"menu.cmd.play": "נגן שיר לפי URL או שם",
"menu.cmd.serverinfo": "מידע על השרת",
"menu.cmd.chat": "צ'אט עם AI",
"ping.title": "{ping} Pong",
"ping.desc": "זמן תגובה: **{latency}ms**",
}
# Chinese (fallback pack; missing keys are filled from English below)
TRANSLATIONS["zh"] = {
"lang.current": "{globe} 当前服务器语言: **中文**。",
"lang.updated": "{ok} 机器人语言已切换为 **中文**。",
"lang.invalid": "{no} 不支持的语言。",
"menu.title": "{menu} 命令菜单",
"menu.all": "全部",
"menu.ai": "AI 面板",
"menu.refresh": "刷新",
"ping.title": "{ping} Pong",
"ping.desc": "延迟: **{latency}ms**",
}
# ═══════════════════════════════════════════════════════════════════════════════
# HELPER FUNCTIONS
# ═══════════════════════════════════════════════════════════════════════════════
SUPPORTED_LANGUAGES = tuple(sorted(TRANSLATIONS.keys()))
# Fill missing keys from English for all languages
for _lang, _pack in TRANSLATIONS.items():
for _key, _value in TRANSLATIONS["en"].items():
_pack.setdefault(_key, _value)
_MISSING = object()
def t(lang: str, key: str, **kwargs: object) -> str:
"""Get a translation with proper fallback handling.
Falls back to English if the key is missing in the target language,
then falls back to the key itself if not found anywhere.
"""
val = TRANSLATIONS.get(lang, {}).get(key, _MISSING)
if val is _MISSING:
val = TRANSLATIONS.get("en", {}).get(key, key)
if not isinstance(val, str):
return key
result = val
for k, v in kwargs.items():
result = result.replace("{" + k + "}", str(v))
return result
def translate(lang: str, key: str, **kwargs: object) -> str:
"""Translate a key with emoji placeholders and custom kwargs."""
lang_pack = TRANSLATIONS.get(lang, TRANSLATIONS["ar"])
text = lang_pack.get(key) or TRANSLATIONS["en"].get(key) or key
emoji_kwargs: dict[str, object] = {
"ok": ui("ok"),
"no": ui("no"),
"warn": ui("warn"),
"globe": ui("globe"),
"music": ui("music"),
"join": ui("join"),
"leave": ui("leave"),
"play": ui("play"),
"pause": ui("pause"),
"resume": ui("resume"),
"skip": ui("skip"),
"stop": ui("stop"),
"queue": ui("queue"),
"video": ui("video"),
"mario": ui("mario"),
"choose": ui("choose"),
"coin": ui("coin"),
"ping": ui("ping"),
"roll": ui("roll"),
"menu": ui("menu"),
"stats": ui("stats"),
"members": ui("members"),
"channels": ui("channels"),
"roles": ui("roles"),
"boost": ui("boost"),
"refresh": ui("refresh"),
"settings": ui("settings"),
"user": ui("user"),
"trivia": ui("trivia"),
"bot": ui("bot"),
"gamehub": ui("gamehub"),
"diamond": ui("diamond"),
"star": ui("star"),
"catjam": ui("catjam"),
"djpeepo": ui("djpeepo"),
"spotify": ui("spotify"),
"partytime": ui("partytime"),
"letsgo": ui("letsgo"),
"shield": ui("shield"),
"gift": ui("gift"),
"hype": ui("hype"),
"notebook": ui("notebook"),
}
merged = {**emoji_kwargs, **kwargs}
try:
return text.format(**merged)
except Exception:
return text
# ═══════════════════════════════════════════════════════════════════════════════
# COMMAND DESCRIPTION LOADER - Reads from JSON locale files
# ═══════════════════════════════════════════════════════════════════════════════
import json
from pathlib import Path as _Path
_LOCALES_DIR = _Path(__file__).parent / "locales"
_CMD_DESC_CACHE: dict[str, str] | None = None
def _load_cmd_descs() -> dict[str, str]:
"""Load all command descriptions from JSON locale files (English defaults)."""
global _CMD_DESC_CACHE
if _CMD_DESC_CACHE is not None:
return _CMD_DESC_CACHE
_CMD_DESC_CACHE = {}
en_path = _LOCALES_DIR / "en.json"
if not en_path.exists():
return _CMD_DESC_CACHE
try:
data = json.loads(en_path.read_text(encoding="utf-8"))
except Exception:
return _CMD_DESC_CACHE
def _flatten(d: dict, prefix: str = "") -> None:
for k, v in d.items():
nk = f"{prefix}.{k}" if prefix else k
if isinstance(v, str) and k.endswith("_desc"):
_CMD_DESC_CACHE[k] = v # short key
_CMD_DESC_CACHE[nk] = v # full key
elif isinstance(v, dict):
_flatten(v, nk)
_flatten(data)
return _CMD_DESC_CACHE
def get_cmd_desc(cmd_name: str, fallback: str = "") -> str:
"""Get a command description from JSON locale files (English default).
This is used at cog setup time to provide translated descriptions
to Discord slash commands. The description shown when the user types /
will match their client language if Discord supports it.
"""
descs = _load_cmd_descs()
# Try full key first (commands.{cog}.{cmd}_desc), then short key ({cmd}_desc)
return descs.get(cmd_name, descs.get(f"{cmd_name}_desc", fallback))