我正在尝试制作一个机器人来制作一个拥有角色的成员列表,我问(命令:$role Admin答案:3人有角色Admin),当我问(命令:$role list Admin答案:@Justyn, @JustBoy, @JustBoss)。
我试过这个代码:
@bot.command(pass_context=True)
@commands.has_permissions(manage_messages=True)
async def members(ctx,*args):
server = ctx.message.guild
role_name = (' '.join(args))
role_id = server.roles[0]
for role in server.roles:
if role_name == role.name:
role_id = role
break
else:
await ctx.send("Role doesn't exist")
return
for member in server.members:
if role_id in member.roles:
await ctx.send(f"{member.display_name} - {member.id}")
但是当我问$members Botz时,答案只有"Justyn Bot - 799779320906121236"(在服务器上,我有8机器人角色Botz,但它只列出自己的机器人(本身))。所以我很困惑。
如果有人知道怎么做,请告诉我!谢谢你。列出成员
Guild.members
要求启用intents.members
,以启用它们:
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(..., intents=intents)
还要确保在开发人员门户中启用它们,(如下所示)
编辑列出具有特定角色的成员async def whatever(ctx, role: discord.Role): # The `role` arg will be converted to a `discord.Role` instance
await ctx.send(f"There's {len(role.members)} users with the role {role.name}")
参考:-
Guild.get_role
-
Role.members
-
Role.name
您必须启用Discord Developer Portal的意图,并且您必须在代码中定义它,以便使用一些事件和方法,如discord.Member.roles
。
在Developer Portal中,您必须执行:
Select Application ->机器人→特权网关意图->启用存在意图&Server Members Intent
在你的代码中:
import discord
from discord.ext import commands
intents = discord.Intents().all()
bot = commands.Bot(command_prefix="<prefix>", intents=intents)
要了解更多信息,可以查看有关intent的API References。