You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:22:02