如何在discord.py 2.1.0中获取文本频道指定角色的用户
解决discord.py 2.1.0获取角色成员为空的问题
问题根源
你用role.members得到空列表,本质是discord.py 2.0+版本对成员数据的访问做了限制:必须启用成员意图,同时机器人要有对应权限才能获取成员缓存。
解决方法
1. 开启Discord平台的成员意图
- 进入你的机器人应用的Discord开发者后台
- 切换到「Bot」页面,找到「Privileged Gateway Intents」区域
- 开启「Server Members Intent」开关
2. 代码中配置成员意图
初始化Bot时必须传入启用成员意图的配置:
import discord from discord.ext import commands # 初始化意图,开启成员权限 intents = discord.Intents.default() intents.members = True bot = commands.Bot(command_prefix="!", intents=intents)
3. 给机器人分配「服务器成员列表」权限
在目标服务器的角色设置里,确保机器人拥有「服务器成员列表」权限,否则无法拉取成员数据。
4. (可选)过滤频道内的角色成员
如果你的需求是当前文本频道内拥有该角色的用户(而非整个服务器),需要额外过滤:
role = discord.utils.get(channel.guild.roles, id=1060070158267326565) # 先获取服务器内所有带该角色的成员 all_role_users = role.members # 筛选出当前频道里的成员 channel_role_users = [user for user in all_role_users if user in channel.members] print(channel_role_users)
内容的提问来源于stack exchange,提问作者ahmet güzel
相关产品推荐
相关产品推荐

