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

如何将Discord bot命令的ctx参数传递到自定义函数中使用

问题解答

是的,你需要给自定义函数加上async修饰,调用时搭配await使用,这是导致你当前代码无输出也无报错的核心原因。

discord.py 的命令回调函数本身是异步执行的,如果你直接在异步函数中调用不加await的协程对象,系统只会生成一个未调度的协程实例,不会真正执行函数内部逻辑,默认配置下甚至不会抛出明显的错误提示,只会输出隐藏的运行时警告,所以你看不到控制台打印也没有崩溃提示。

正确修改方案

  1. 给自定义的start_command加上async修饰符
async def start_command(ctx):
    user_id = ctx.message.author.id
    if user_id == 1234:
        print('1234')
        # 其他业务逻辑
    else:
        print('error')
        # 其他业务逻辑
  1. 在命令回调中调用时加上await关键字
@commands.command()
async def start(ctx):
    await start_command(ctx)

拓展优化方案

如果只是做用户权限校验,你可以直接使用discord.py原生的检查器装饰器,写法更简洁也更符合框架规范:

# 自定义权限检查装饰器
def is_allowed_user():
    async def predicate(ctx):
        # 可自行拓展多个允许的用户ID
        return ctx.author.id in [1234]
    return commands.check(predicate)

# 直接给命令加装饰器即可完成校验
@commands.command()
@is_allowed_user()
async def start(ctx):
    await ctx.reply('some answer by the bot')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:39:03