Nextcord斜杠命令如何按用户Discord语言自定义名称与描述
解决Nextcord中Slash Command多语言名称/描述的问题
要实现Slash Command根据用户Discord语言显示不同名称,核心是在命令注册阶段向Discord API提交多语言本地化配置,而非运行时通过ctx.locale修改。Nextcord完全支持这一特性,具体实现步骤如下:
1. 利用name_localizations和description_localizations参数注册命令
在定义Slash Command时,通过装饰器的name_localizations和description_localizations参数传入多语言映射字典。字典的键为Discord官方语言代码(可参考nextcord.Locale枚举),值为对应语言的命令名称/描述。
代码示例
import nextcord from nextcord import Interaction, Locale from nextcord.ext import commands bot = commands.Bot(command_prefix="!", intents=nextcord.Intents.all()) @bot.slash_command( # 默认名称(英语环境 fallback) name="server", # 多语言名称映射:韩语对应"서버" name_localizations={ Locale.korean: "서버", Locale.english_us: "server" # 可选,显式指定美式英语 }, # 默认描述 description="Retrieve server information", # 多语言描述映射 description_localizations={ Locale.korean: "서버 정보를 가져옵니다", Locale.english_us: "Retrieve server information" }, # 测试阶段建议指定服务器,加快命令同步速度 guild_ids=[1234567890] ) async def server_info(ctx: Interaction): # 此处可继续使用ctx.locale处理命令内容的多语言(你已实现的逻辑) if ctx.locale == Locale.korean: await ctx.send(f"서버 이름: {ctx.guild.name}\n멤버 수: {ctx.guild.member_count}") else: await ctx.send(f"Server Name: {ctx.guild.name}\nMember Count: {ctx.guild.member_count}") bot.run("YOUR_BOT_TOKEN")
2. 关键注意事项
- 语言代码规范:必须使用Discord官方定义的语言代码,可通过
nextcord.Locale枚举直接引用(如Locale.korean对应"ko",Locale.english_us对应"en-US"),避免手动输入字符串出错。 - 同步延迟:全局命令同步可能需要1-2小时,测试时建议通过
guild_ids指定测试服务器,命令会立即同步。 - 默认值必填:
name和description是必填项,作为所有未配置语言环境的 fallback 值。 - 权限要求:确保机器人拥有
applications.commands权限,且已正确邀请到目标服务器。
为什么之前的ctx.locale方法无效?
ctx.locale是在命令触发时获取用户当前的语言设置,仅能用于动态修改命令的响应内容。而命令的名称和描述是存储在Discord服务器端的,必须在注册阶段就提交多语言配置,由Discord根据用户语言自动展示对应版本。
内容的提问来源于stack exchange,提问作者user24731705
相关产品推荐
相关产品推荐

