Nextcord异步改造后出现AttributeError:coroutine对象无edit属性求助
解决Nextcord机器人中
AttributeError: 'coroutine' object has no attribute 'edit'错误 核心问题原因
你遇到的错误根源是协程对象未被正确等待,导致传递给任务的不是预期的消息实例:
- 调用
seed_channel.send()时未加await,使得seed_ping是一个协程对象而非Message实例,后续调用.edit()自然会报错,因为协程对象没有这个方法。 - 代码中还有其他几处遗漏
await的地方,进一步触发了连锁错误。
修复步骤
- 获取真实的Message实例:在
seed_channel.send()前添加await,确保拿到可编辑的消息对象 - 所有异步调用都加await:
edit()是异步方法,必须用await触发执行 - 清理冗余代码:移除不必要的短睡眠,避免阻塞事件循环
修正后的完整代码
class SeedPingHLL(commands.Cog): def __init__(self, legionnaire): self.legionnaire = legionnaire self.check_to_start_seed_ping.start() # 定时检查启动种子玩家提醒 @tasks.loop(time=Start_seeding_time) async def check_to_start_seed_ping(self): print("Task started") while True: players = await api_request_public() event_check = await Seed_API() min_player_count = await Seed_API() if event_check[0] == False and not self.seed_ping_hll.is_running(): if players[1] >= 1: print("started") seed_channel = self.legionnaire.get_channel(Channel_id) # 关键修复:添加await获取Message实例 seed_ping = await seed_channel.send(embed=await Seed_Ping_Embed()) self.seed_ping_hll.start(seed_ping) break # await asyncio.sleep(1.0) # 按需保留,避免频繁API调用 @tasks.loop(minutes=1.0) async def seed_ping_hll(self, seed_ping_message): player_count_end_seeding = await Seed_API() players = await api_request_public() # 修复:添加await调用edit await seed_ping_message.edit(embed=await Seed_Ping_Embed()) print("player checked") if players[1] > player_count_end_seeding[2]: # 修复:添加await调用edit await seed_ping_message.edit(embed=await Seed_Ping_Embed(server_seeded=True)) print("stopping") self.seed_ping_hll.cancel() # 若players_vip_reward_check是异步函数,需添加await # await players_vip_reward_check() players_vip_reward_check()
其他错误说明
- 终端中的
RuntimeWarning: coroutine 'Messageable.send' was never awaited就是因为未加await导致的协程泄漏问题。 TypeError: Loop._error() takes 2 positional arguments but 3 were given是任务执行异常后触发的连锁错误,修复核心的await问题后该错误会自动消失。
内容的提问来源于stack exchange,提问作者Shannonlee Gafney
相关产品推荐
相关产品推荐

