You need to enable JavaScript to run this app. discord.py rewrite如何将函数名转换为可触发的Discord命令?
优惠活动
大模型
产品
解决方案
定价
更多

discord.py rewrite如何将函数名转换为可触发的Discord命令?

示例代码

bot = commands.Bot(command_prefix="$", help_command=None)
@bot.command(pass_context=True)
async def say(ctx, *, message):
    await ctx.send(message)

调用该命令的格式为 $say something,对应的注册与识别机制如下:


核心实现机制

整个逻辑基于Python装饰器语法和discord.py内置的命令注册表实现,具体流程:

  • 装饰器触发:你给say函数加@bot.command()装饰器的时候,Python解释器会先执行bot.command(pass_context=True),这个调用会返回一个专门用来处理命令注册的高阶函数
  • 函数名读取:返回的高阶函数会接收say函数作为入参,默认会直接读取函数的__name__属性(也就是字符串"say")作为默认的命令触发名;如果手动给bot.command()传了name参数,比如@bot.command(name="speak"),会优先用传入的名称覆盖函数名
  • 命令实例包装:内部会把你写的异步函数、命令名、传入的配置参数打包成一个Command类的实例
  • 存入注册表:这个Command实例会被添加到bot对象内部的命令映射字典里,键就是命令名"say",值是对应的Command实例
  • 运行时匹配:bot启动后收到任意消息时,会先校验消息前缀是否匹配设置的$,匹配成功后拆分消息内容,取前缀后第一个空格前的字符串作为命令名,去内部的命令字典里查找对应的实例,找到后就调用对应的函数执行逻辑。

内容的提问来源于stack exchange,提问作者Aayaan Sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:54:00