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

使用discord.py定时发消息遇AttributeError问题求助

错误原因分析
  1. 频道对象获取失败:client.get_channel(1017890755462824078)返回None,可能的触发场景包括:
    • 机器人未加入目标频道所在的服务器
    • 频道ID填写错误
    • 机器人缺少查看该频道的权限
    • 机器人启动后缓存未完全加载,就执行了获取频道的操作(on_ready触发时,服务器缓存可能还没就绪)
  2. 异步方法调用错误:channel.send("test")是异步函数,必须使用await关键字调用,否则会引发运行异常。
解决方案

1. 修复异步调用问题

修改任务中的发送消息代码,添加await,同时增加频道存在性判断:

@tasks.loop(minutes=1)
async def test():
    channel = client.get_channel(1017890755462824078)
    if channel:  # 先确认频道对象有效,避免None报错
        await channel.send("test")

2. 确保频道能被正确获取

  • 检查机器人是否已加入目标频道所在的Discord服务器
  • 核对频道ID:开启Discord开发者模式后,右键频道复制ID,确保和代码中的一致
  • 给机器人分配查看频道和发送消息的权限
  • 改用fetch_channel(直接从Discord API获取频道,不依赖本地缓存),同时增加异常处理:
@tasks.loop(minutes=1)
async def test():
    try:
        channel = await client.fetch_channel(1017890755462824078)
        await channel.send("test")
    except discord.NotFound:
        print("未找到目标频道,请检查ID是否正确")
    except discord.Forbidden:
        print("机器人无权限查看或发送消息到该频道")

3. 优化任务启动时机

如果使用get_channel,可在on_ready中等待客户端缓存就绪后再启动任务:

@client.event
async def on_ready():
    await client.wait_until_ready()  # 等待客户端完成缓存加载
    test.start()
    print("机器人已就绪")

内容的提问来源于stack exchange,提问作者Bruh Gpt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:45:33