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

启用全部Intents后discord.Guild获取分类为空的问题求助

解决discord.py中guild.categories返回空列表的问题

问题原因

bot.fetch_guild() 仅从Discord API获取公会的基础元数据(如ID、名称、图标等),不会自动拉取公会内的频道、分类等关联数据,所以直接访问guild.categories会得到空列表——这和Intents设置无关,Intents控制的是机器人启动时缓存的数据范围,而fetch_guild是主动发起的单次独立API请求,不受缓存逻辑影响。

解决方案

方案1:优先使用缓存中的公会对象

如果机器人已经加入目标公会,直接用bot.get_guild(key)从缓存获取完整的公会数据,缓存内的对象包含已加载的分类、频道等信息:

guild = bot.get_guild(key)
if guild:
    categories = guild.categories  # 正常返回分类列表
else:
    # 缓存中无该公会时,再调用fetch并手动拉取频道
    guild = await bot.fetch_guild(key)
    await guild.fetch_channels()  # 主动拉取所有频道和分类数据
    categories = guild.categories

方案2:fetch后手动拉取频道数据

如果必须使用fetch_guild(比如机器人未加入该公会但具备查看权限),调用fetch_channels()方法主动拉取频道集合,该方法会自动填充guild.categories和guild.channels:

guild = await bot.fetch_guild(key)
await guild.fetch_channels()  # 关键步骤:触发API请求获取频道数据
categories = guild.categories  # 此时可正确返回分类列表

补充说明

  • 确保机器人对目标公会拥有查看频道的权限,否则fetch_channels()会返回空或抛出权限错误。
  • Intents.all()和特权Intents的作用是让机器人在启动或公会更新时自动缓存频道数据,仅对get_guild这类缓存读取方法生效。

内容的提问来源于stack exchange,提问作者simo.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:50:33