Discord Get Guild未返回对象,调用get_guild方法返回None异常
问题原因
- 异步方法未正确执行:
discord.Client的login()、connect()都是异步协程方法,直接调用不会实际触发登录、连接逻辑,仅会返回未被调度的协程对象,这就是你收到coroutine 'Client.connect' was never awaited警告的原因。 - 本地缓存未同步:
get_guild()方法是从客户端本地缓存读取服务器数据,就算连接完成,客户端也需要一定时间同步服务器列表,未同步完成前调用必然返回None。 - 缺少必要意图:Discord API v8及更高版本默认禁用服务器列表读取权限,你需要手动开启
guilds意图才能正常获取服务器对象。
修复后的代码示例
import discord # 开启必要的guilds意图 intents = discord.Intents.default() intents.guilds = True client = discord.Client(intents=intents) TOKEN = "mytoken" SERVER_ID = 846557514476945408 # 客户端完全启动、缓存同步完成后会触发on_ready事件 @client.event async def on_ready(): # 此时再调用get_guild就能拿到正确的服务器对象 guild = client.get_guild(SERVER_ID) print(f"获取到服务器:{guild.name} (ID:{guild.id})") # 后续对guild的操作都可以在这里写 # 启动客户端,这一步会自动处理登录、连接、事件循环调度 client.run(TOKEN)
额外注意事项
- 不要手动拆分调用
login()和connect(),直接用client.run()即可,它会自动管理异步调度、事件循环、登录和连接逻辑,避免出现协程未等待的问题。 - 你还需要去Discord开发者后台的Bot设置页,打开
Privileged Gateway Intents下的Guilds Intent开关,否则仍然无法获取服务器数据。
内容的提问来源于stack exchange,提问作者llu13701
相关产品推荐
相关产品推荐

