如何将Discord bot命令的ctx参数传递到自定义函数中使用
问题解答
是的,你需要给自定义函数加上async修饰,调用时搭配await使用,这是导致你当前代码无输出也无报错的核心原因。
discord.py 的命令回调函数本身是异步执行的,如果你直接在异步函数中调用不加await的协程对象,系统只会生成一个未调度的协程实例,不会真正执行函数内部逻辑,默认配置下甚至不会抛出明显的错误提示,只会输出隐藏的运行时警告,所以你看不到控制台打印也没有崩溃提示。
正确修改方案
- 给自定义的
start_command加上async修饰符
async def start_command(ctx): user_id = ctx.message.author.id if user_id == 1234: print('1234') # 其他业务逻辑 else: print('error') # 其他业务逻辑
- 在命令回调中调用时加上
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
相关产品推荐
相关产品推荐

