使用discord.py定时发消息遇AttributeError问题求助
错误原因分析
- 频道对象获取失败:
client.get_channel(1017890755462824078)返回None,可能的触发场景包括:- 机器人未加入目标频道所在的服务器
- 频道ID填写错误
- 机器人缺少查看该频道的权限
- 机器人启动后缓存未完全加载,就执行了获取频道的操作(
on_ready触发时,服务器缓存可能还没就绪)
- 异步方法调用错误:
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
相关产品推荐
相关产品推荐

