首页 > 编程问答 >Python Discord Bot 的应用程序命令的区域设置名称(多语言别名)

Python Discord Bot 的应用程序命令的区域设置名称(多语言别名)

时间:2024-07-29 05:50:45浏览次数:15  
标签:python discord.py

如何根据用户的语言设置,使应用程序命令的名称具有不同的名称

例如,如果一个用户将其discord的语言设置为英语,则用户可以看到英语的应用程序命令名称。另一方面,如果另一个用户将其不和谐语言设置为法语,则用户可以看到法语中的相同应用程序命令的名称。

为此,我尝试使用 app_commands.locale_str 但它不起作用。我认为这是因为 **kwarg 被传递并存储在参数 extras 中,所以它不会影响任何翻译。以下代码显示了我尝试过的代码示例。

@bot.tree.command(name=app_commands.locale_str(
        "hello",
        fr = 'bonjour',
    ), 
    guild=guild)
@app_commands.default_permissions(manage_channels = True)
async def hello(interaction: Interaction) -> None:
    await interaction.response.send_message(content='hello')

请问有人可以建议方法来实现我上面解释的命令吗?或者如果有人知道这个方法,请告诉我如何实现。


很遗憾,目前 Discord API 还不直接支持通过用户语言设置自动翻译应用程序命令的名称和描述。 app_commands.locale_str 主要用于本地化命令的参数名称和描述,以及在交互式响应中使用的字符串,而不是命令本身的名称。

也就是说,你可以通过以下两种方法实现类似的效果:

1. 为不同语言创建独立的命令:

你可以为每种支持的语言创建单独的应用程序命令,并在命令名称中包含语言代码或标识符。 例如:

@bot.tree.command(name="hello_en", description="Greets the user (English)", guild=guild)
@app_commands.guilds(guild)
async def hello_en(interaction: Interaction):
    await interaction.response.send_message("Hello!")

@bot.tree.command(name="bonjour_fr", description="Salue l'utilisateur (Français)", guild=guild)
@app_commands.guilds(guild)
async def bonjour_fr(interaction: Interaction):
    await interaction.response.send_message("Bonjour !")

然后,你可以在你的机器人的其他功能中获取用户的语言设置,并引导他们使用相应语言的命令。

2. 使用 Discord API 进行动态更新:

你可以使用 Discord API 定期更新应用程序命令的名称和描述,以匹配用户的语言设置。 这需要你:

  • 获取服务器上用户的语言偏好设置。
  • 使用 Discord API 更新应用程序命令的名称和描述,为每个语言版本创建一个新的命令。

这种方法比较复杂,需要更多的 API 调用,但可以提供更无缝的用户体验。

需要注意的是:

  • 无论你选择哪种方法,都需要在你的机器人的界面中清楚地传达哪些语言可用。
  • 你需要手动翻译所有命令和描述。

希望这些信息能帮到你!

标签:python,discord.py
From: 78804140

相关文章

  • 如何在Python中添加热键?
    我正在为游戏制作一个机器人,我想在按下热键时调用该函数。我已经尝试了一些解决方案,但效果不佳。这是我的代码:defstart():whileTrue:ifkeyboard.is_pressed('alt+s'):break...defmain():whileTrue:ifkeyboard.is_pr......
  • 在Python中解压文件
    我通读了zipfile文档,但不明白如何解压缩文件,只了解如何压缩文件。如何将zip文件的所有内容解压缩到同一目录中?importzipfilewithzipfile.ZipFile('your_zip_file.zip','r')aszip_ref:zip_ref.extractall('target_directory')将......
  • 如何在Python中从RSA公钥中提取N和E?
    我有一个RSA公钥,看起来像-----BEGINPUBLICKEY-----MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAvm0WYXg6mJc5GOWJ+5jkhtbBOe0gyTlujRER++cvKOxbIdg8So3mV1eASEHxqSnp5lGa8R9Pyxz3iaZpBCBBvDB7Fbbe5koVTmt+K06o96ki1/4NbHGyRVL/x5fFiVuTVfmk+GZNakH5dXDq0fwvJyVmUtGYA......
  • Swagger、Docker、Python-Flask: : https://editor.swagger.io/ 生成服务器 python-fl
    在https://editor.swagger.io/上您可以粘贴一些json/yaml。我正在将此作为JSON进行测试(不要转换为YAML):{"swagger":"2.0","info":{"version":"1.0","title":"OurfirstgeneratedRES......
  • 使用 Matplotlib 的 Python 代码中出现意外的控制流
    Ubuntu22.04上的此Python3.12代码的行为符合预期,除非我按q或ESC键退出。代码如下:importnumpyasnp,matplotlib.pyplotaspltfrompathlibimportPathfromcollectionsimportnamedtuplefromskimage.ioimportimreadfrommatplotlib.widgets......
  • 参考 - Python 类型提示
    这是什么?这是与在Python中使用类型提示主题相关的问题和答案的集合。这个问题本身就是一个社区维基;欢迎大家参与维护。这是为什么?Python类型提示是一个不断增长的话题,因此许多(可能的)新问题已经被提出,其中许多甚至已经有了答案。该集合有助于查找现有内容。范......
  • 我的 Python 程序中解决 UVa 860 的运行时错误 - 熵文本分析器
    我正在尝试为UVa860编写一个解决方案,但是当我通过vJudge发送它时,它一直显示“运行时错误”。fromsysimportstdinimportmathdefmain():end_of_input=Falselambda_words=0dictionary={}text_entropy=0relative_entropy=0whilenotend_of_in......
  • Python进度条
    当我的脚本正在执行某些可能需要时间的任务时,如何使用进度条?例如,一个需要一些时间才能完成并在完成后返回True的函数。如何在函数执行期间显示进度条?请注意,我需要实时显示进度条,所以我不知道该怎么办。我需要thread为此吗?我不知道。现在在执行函数......
  • 此 Python 代码给出了超出时间限制的错误。由于其中使用的输入或输出方法而在其中传递
    N=int(input())L1=input()L=L1.split()s=set(L)d={}foreins:d[e]=L.count(e)print(d)max_value=max(d.values())print(max_value)L=list(d.values())print(L)res=L.count(max_value)print(res)/在提供正常输入时,它运行良好,但在提......
  • @staticmethod 在 Python 中意味着什么?
    我正在使用Python学习OOP。我想知道@staticmethod在OOP中到底做了什么。为什么我应该/不应该使用它?classCar:@staticmethoddefstart():print("carstarted")defstop():print("carstopped")当然,让我们来分解一下Pyth......