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

Nextcord异步改造后出现AttributeError:coroutine对象无edit属性求助

解决Nextcord机器人中AttributeError: 'coroutine' object has no attribute 'edit'错误

核心问题原因

你遇到的错误根源是协程对象未被正确等待,导致传递给任务的不是预期的消息实例:

  • 调用seed_channel.send()时未加await,使得seed_ping是一个协程对象而非Message实例,后续调用.edit()自然会报错,因为协程对象没有这个方法。
  • 代码中还有其他几处遗漏await的地方,进一步触发了连锁错误。

修复步骤

  1. 获取真实的Message实例:在seed_channel.send()前添加await,确保拿到可编辑的消息对象
  2. 所有异步调用都加await:edit()是异步方法,必须用await触发执行
  3. 清理冗余代码:移除不必要的短睡眠,避免阻塞事件循环

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:55:58