Discord bot获取服务器管理员角色成员仅返回自身问题求助
问题排查与解决方法
核心原因
该问题由Discord Bot的成员缓存未正确加载导致,从你输出的日志中chunked=False字段也可以验证这一点:Bot只缓存了自身的成员数据,其余用户的成员数据没有被拉取到本地,所以遍历角色成员列表返回为空。
具体解决步骤
- 第一步:开启开发者后台的特权网关意图
进入Discord Developer Portal,找到你的Bot应用,在「Bot」设置页的「Privileged Gateway Intents」板块,开启Server Members Intent开关。 - 第二步:初始化Bot时启用成员意图
你初始化Bot实例的代码需要显式指定开启members意图,示例如下:import discord from discord.ext import commands intents = discord.Intents.default() intents.members = True # 开启成员意图 bot = commands.Bot(command_prefix="!", intents=intents) - 第三步:主动拉取服务器成员数据(可选,针对未chunked的服务器)
如果还是出现成员列表为空的情况,可以在获取管理员前主动调用服务器的chunk方法,强制拉取全量成员数据,同时可以增加去重逻辑避免同一用户持有多个管理员角色被重复统计,修改后的get_admins代码如下:async def get_admins(ctx): # 主动拉取全量成员数据 await ctx.guild.chunk() admin_roles = [role for role in ctx.guild.roles if role.permissions.administrator] admins = [] for role in admin_roles: print(role) print(role.members) for member in role.members: if member not in admins: admins.append(member) return admins
内容的提问来源于stack exchange,提问作者looke
相关产品推荐
相关产品推荐

