discord.py添加on_message事件后指令失效 需事件与指令同时生效
故障原因
重写on_message事件会覆盖discord.py内置的默认消息处理逻辑,框架不会自动将收到的消息转发给指令解析模块,因此所有通过@bot.command()注册的指令都无法被触发。on_ready属于客户端连接生命周期事件,不经过消息处理流程,所以始终可以正常运行。
修复方法
在自定义的on_message事件逻辑末尾添加await bot.process_commands(message),手动将消息对象传递给指令处理器,即可同时实现消息监听和指令响应功能。
修正后代码
@bot.event async def on_message(message): if message.content == "hey it looks like you already have a full bank BUD": await message.channel.send('pls use banknote') # 手动将消息移交指令处理流程 await bot.process_commands(message) @bot.command() async def d(ctx): print(Fore.BLUE + ('Running Farmer 1.0 - Dank Memer') + Fore.RESET) while True: await ctx.send('pls fish') await ctx.send('pls dig') await ctx.send('pls hunt') await ctx.send('pls beg') await ctx.send('pls dep all')
额外提示:上述指令中的无间隔无限循环会高频发送消息,极易触发Discord平台风控或Dank Memer的反作弊机制,建议在循环末尾添加适当延时,例如引入asyncio模块后添加await asyncio.sleep(35)匹配Dank Memer的命令冷却时间。
内容的提问来源于stack exchange,提问作者Redz
相关产品推荐
相关产品推荐

