Discord机器人启动报错TypeError:需asyncio.Future/协程/可等待对象
问题解决步骤
核心错误原因
client.run()调用位置错误:你将启动机器人的代码放在了on_ready事件定义之前,导致机器人启动时该事件还未完成注册,因此不会触发打印提示语的逻辑。- Spyder环境与异步循环冲突:
nest_asyncio的引入加剧了Spyder内核与discord.py异步循环的冲突,直接引发了TypeError报错。
解决方案
方案1:调整代码顺序+使用普通Python环境运行(推荐)
修改代码结构,将client.run()移至所有事件函数定义之后,同时移除不必要的异步依赖(discord.py内部已处理异步循环逻辑):
import discord client = discord.Client(intents=discord.Intents.default()) @client.event async def on_ready(): print("Le bot est prêt !") # 启动代码必须放在事件定义之后 client.run("你的机器人Token")
运行方式:不要用Spyder,直接打开命令行,进入代码所在目录执行:
python 你的代码文件名.py
方案2:Spyder环境兼容运行(不推荐)
若必须使用Spyder,调整启动方式,用asyncio.run替代client.run:
import discord import asyncio import nest_asyncio nest_asyncio.apply() client = discord.Client(intents=discord.Intents.default()) @client.event async def on_ready(): print("Le bot est prêt !") # 改用asyncio.run启动机器人 asyncio.run(client.start("你的机器人Token"))
注:此方式仍可能存在环境冲突问题,优先选择方案1。
重要提醒
- 你提供的机器人Token已公开泄露,请立即前往Discord开发者平台重置Token,避免账号被盗用。
- 确保在Discord开发者平台为机器人开启了必要的Intents权限,否则可能出现功能异常。
内容的提问来源于stack exchange,提问作者Daeltam
相关产品推荐
相关产品推荐

