discord.py机器人指令不响应且停止时报Event loop is closed错误
前缀指令无响应解决方案
导致该问题有两个核心原因:
- 自定义
on_message事件未兼容指令处理逻辑:discord.py框架中如果手动重写on_message事件,会覆盖默认的前缀指令匹配流程,需要在事件逻辑末尾手动调用指令处理方法才能让自定义指令生效。 - 代码未启用
message_content权限:discord.py 2.0及以上版本中,discord.Intents.default()默认不会开启消息内容读取权限,即便你在Discord开发者后台开启了对应权限,也需要在代码中手动配置启用。
修改后的对应代码段如下:
# intents配置修改 intents = discord.Intents.default() intents.typing = False intents.message_content = True # 新增该行启用消息内容读取权限 client = commands.Bot(command_prefix="!", intents=intents) # on_message事件修改 @client.event async def on_message(message): if message.author == client.user: return await client.process_commands(message) # 新增该行调用指令处理逻辑
停止运行时报
Event loop is closed解决方案 该报错是Windows系统下Python 3.8+版本与discord.py默认事件循环兼容的已知问题,可任选以下一种方法修复:
- 方法一:修改机器人启动参数,禁用默认日志处理器
# 将原有client.run(TOKEN)替换为下行 client.run(TOKEN, log_handler=None)
- 方法二:修改系统默认事件循环策略,在代码最开头添加如下配置即可
import asyncio asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
内容的提问来源于stack exchange,提问作者Witalik Zarscikov
相关产品推荐
相关产品推荐

