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

discord.py开发Discord机器人报错RuntimeError: Event loop is closed如何解决

问题原因

你遇到的两个问题对应不同的原因:

  • 命令无法调用:当前Discord API要求必须开启消息内容特权意图才能识别前缀命令,你没有在代码和开发者后台开启该配置
  • RuntimeError: Event loop is closed报错:这是Windows平台Python 3.8及以上版本的默认Proactor事件循环和discord.py的退出逻辑不兼容导致的常见问题,该报错仅在机器人退出时触发,不影响运行过程中的功能使用,也可以通过修改配置消除

解决方案

第一步:开启消息内容意图

  1. 打开Discord开发者后台的对应机器人管理页,在「Privileged Gateway Intents」板块开启Message Content Intent开关
  2. 修改代码,显式声明启用消息内容意图

第二步:修复事件循环报错

在代码开头加入事件循环配置,将默认事件循环改为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:45:03