discord.py commands扩展中Intents不生效、成员列表获取异常问题
错误1:NameError: name 'discord' is not defined 原因与修复
- 原因:你仅导入了
discord.ext.commands子模块,没有导入根级discord模块,因此调用discord.Intents时无法识别discord命名空间。其他用户的可运行代码通常默认包含import discord语句只是未在贴出的片段中体现。 - 修复方案:在代码首行添加
import discord即可,你已经完成了这步操作。
错误2:仅能获取机器人自身信息、其他成员返回None的修复方案
按优先级依次排查:
- 补全Intents配置
你当前仅开启了messages和membersIntent,还需要开启guilds(服务器基础信息必选)和message_content(v2.x版本强制要求的特权权限),同时开启启动时全量成员拉取配置,修改后的完整初始化代码如下:
import discord from discord.ext import commands # 基础intent配置 intents = discord.Intents.default() intents.members = True # 你已经开启的成员权限 intents.message_content = True # 消息内容特权权限 intents.guilds = True # 服务器基础信息权限 bot = commands.Bot( command_prefix=',', intents=intents, chunk_guilds_at_startup=True # 启动时主动拉取全量服务器成员缓存 )
- 调整获取成员信息的时机
不要在on_ready事件刚触发时立刻拉取成员列表,此时机器人还未完成全量成员缓存的加载,可以监听on_guild_available事件触发后再执行拉取操作,示例代码:
@bot.event async def on_guild_available(guild): # 服务器加载完成后再遍历拉取成员 print(f"服务器{guild.name}成员列表:") async for member in guild.fetch_members(limit=None): print(member.name, member.id)
- 确认开发者后台配置
除了已经开启的Server Members Intent,还要确认Message Content Intent也处于开启状态,两个特权Intent都开启才能正常拉取非机器人用户的完整信息。
内容的提问来源于stack exchange,提问作者hydraxic
相关产品推荐
相关产品推荐

