Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
discord.py对具有特定角色的用户运行该命令_Discord.py - Fatal编程技术网

discord.py对具有特定角色的用户运行该命令

discord.py对具有特定角色的用户运行该命令,discord.py,Discord.py,我正在创建一个命令,该命令向具有特定角色的多个用户发送私有消息。 为此,我创建了一个当前数字类别,根据选择的类别,它必须将dm发送给具有特定角色的用户 我的问题是我无法阅读角色,我能做什么 @client.command() @commands.has_权限(administrator=True) 异步def dmall(ctx,编号,*,消息): 帮会,帮会 如果数字==“1”: if guild.get_角色(角色id=690951634183782461): 对于ctx.guild.mem

我正在创建一个命令,该命令向具有特定角色的多个用户发送私有消息。 为此,我创建了一个当前数字类别,根据选择的类别,它必须将dm发送给具有特定角色的用户

我的问题是我无法阅读角色,我能做什么

@client.command()
@commands.has_权限(administrator=True)
异步def dmall(ctx,编号,*,消息):
帮会,帮会
如果数字==“1”:
if guild.get_角色(角色id=690951634183782461):
对于ctx.guild.members中的成员:
尝试:
等待成员。发送(消息)
打印(f“Messaggio inviato a{member.name}”)
除:
打印(f“{member.name}不包含任何信息,包括个人信息和个人信息。”)
其他:
返回
elif编号==“2”:
如果get(guild.roles,name='Triumvirato'):
对于ctx.guild.members中的成员:
尝试:
等待成员。发送(消息)
打印(f“Messaggio inviato a{member.name}”)
除:
打印(f“{member.name}不包含任何信息,包括个人信息和个人信息。”)
elif get(guild.roles,name='Co-Triumvirato'):
对于ctx.guild.members中的成员:
尝试:
等待成员。发送(消息)
打印(f“Messaggio inviato a{member.name}”)
除:
打印(f“{member.name}不包含任何信息,包括个人信息和个人信息。”)
其他:
返回
elif编号==“3”:
如果get(guild.roles,name='Triumvirato'):
对于ctx.guild.members中的成员:
尝试:
等待成员。发送(消息)
打印(f“Messaggio inviato a{member.name}”)
除:
打印(f“{member.name}不包含任何信息,包括个人信息和个人信息。”)
elif get(guild.roles,name='Co-Triumvirato'):
对于ctx.guild.members中的成员:
尝试:
等待成员。发送(消息)
打印(f“Messaggio inviato a{member.name}”)
除:
打印(f“{member.name}不包含任何信息,包括个人信息和个人信息。”)
elif get(guild.roles,name='Presidente ad Missional del LMII'):
对于ctx.guild.members中的成员:
尝试:
等待成员。发送(消息)
打印(f“Messaggio inviato a{member.name}”)
除:
打印(f“{member.name}不包含任何信息,包括个人信息和个人信息。”)
其他:
返回
返回

使用
discord.role.members
获取角色成员列表,而不是返回整个公会成员列表的
ctx.guild.members
,通过该列表迭代发送此列表中所有人的消息

@commands.command()
async def dmall(ctx, number, *, message):
    if number == '1':
        specific_role = ctx.guild.get_role(690951634183782461)
        sr_members = specific_role.members
        for member in sr_members:
            await member.send(message)

    elif number == '2':
        specific_role = ctx.guild.get_role(second_role_id)
        sr_members = specific_role.members
        for member in sr_members:
            await member.send(message)
等等,以获得更多的角色

如果您需要所有角色的列表,可以使用
ctx.guild.roles
并更有效地使用
number
参数作为
ctx.guild.roles

@commands.command()
async def dmall(ctx, num, *, message):
    sr_members = ctx.guild.roles[num].members
    for member in sr_members:
        await member.send(message)
这样你就可以打字了!dmall 2 hi,它将执行与上述代码相同的操作,但现在它将使用
ctx.guild.roles中的第三个角色id

@commands.command()
async def dmall(ctx, num, *, message):
    sr_members = ctx.guild.roles[num].members
    for member in sr_members:
        await member.send(message)
你可以调用任何你想要的角色,你只需要知道它的索引

需要检查他们的索引吗

@commands.command()
async def info(ctx, *, role:discord.Role):
    print(ctx.guild.roles.index(role))

如果我需要更多的角色,我会为每个角色创建不同的角色吗?我想这就是为什么要使用
number
参数。我更新了你想使用同一命令引用多个角色的情景的答案,也许我解释错了。我把它当作一个暂定的数字,因为我将用category替换它。我更新了错误的代码,以便更好地解释我想做什么。现在,据我所知,您编写的第二个代码应该计算角色数,但我不太了解。假设您在代码中列出了服务器中的所有角色,并且您的bot有一个名为“bot”的bot角色,那么对于ctx.guild.roles中的role,应该按如下顺序返回一个循环:@everyone,bot,Co-Triumvirato,三人临时总统。这意味着“Triumvirato”的索引将是4,这就是计算角色的方式。我更新了应答器您希望能够使用该命令选择角色数、要发送的消息以及要发送消息的角色?或者,如果您选择1,您确定它适用于Triumvirato成员,选择2,您确定它适用于联合Triumvirato和Triumvirato成员?