discord.py开发Discord机器人报错RuntimeError: Event loop is closed如何解决
问题原因
你遇到的两个问题对应不同的原因:
- 命令无法调用:当前Discord API要求必须开启消息内容特权意图才能识别前缀命令,你没有在代码和开发者后台开启该配置
RuntimeError: Event loop is closed报错:这是Windows平台Python 3.8及以上版本的默认Proactor事件循环和discord.py的退出逻辑不兼容导致的常见问题,该报错仅在机器人退出时触发,不影响运行过程中的功能使用,也可以通过修改配置消除
解决方案
第一步:开启消息内容意图
- 打开Discord开发者后台的对应机器人管理页,在「Privileged Gateway Intents」板块开启
Message Content Intent开关 - 修改代码,显式声明启用消息内容意图
第二步:修复事件循环报错
在代码开头加入事件循环配置,将默认事件循环改为SelectorEventLoop即可消除报错
额外注意
你写的回复命令函数名拼写为asnwer,属于拼写错误,调用!answer不会触发,可修改为正确拼写或者直接调用!asnwer测试
修正后完整代码
import asyncio # 修复Windows平台事件循环关闭报错 asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) import discord from discord.ext import commands TOKEN = "TOKEN-HERE" # 声明启用intents intents = discord.Intents.default() intents.message_content = True client = commands.Bot(command_prefix = '!', intents=intents) @client.command() async def embed(ctx): em = discord.Embed(title="Title",description ="This is a description",color=0x20B2AA) em.set_footer(text='This is a footer.') em.set_image(url='') em.set_thumbnail(url='https://cdn.discordapp.com/attachments/823480191493210113/886011319688527892/Screenshot_808.png') em.set_author(name='Author Name', icon_url='https://cdn.discordapp.com/attachments/823480191493210113/886011319688527892/Screenshot_808.png') em.add_field(name='Field Name', value='Field Value', inline=False) em.add_field(name='Field Name', value='Field Value', inline=True) em.add_field(name='Field Name', value='Field Value', inline=True) await ctx.send(embed=em) # 修正拼写错误可改为async def answer(ctx): @client.command() async def asnwer(ctx): await ctx.send("Hi !") client.run(TOKEN)
内容的提问来源于stack exchange,提问作者Witalik Zarscikov
相关产品推荐
相关产品推荐

