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

时间:2020-08-19 01:21:48

标签: discord.py

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

这是我的问题,我无法让角色读取我该怎么办?

@client.command()
@commands.has_permissions(administrator=True)
async def dmall(ctx, number, *, message):
    guild = discord.Guild
    if number == "1":
        if guild.get_role(role_id=690951634183782461):
            for member in ctx.guild.members:
                try:
                    await member.send(message)
                    print(f"Messaggio inviato a {member.name}")
                except:
                    print(f"{member.name} non ha ricevuto il messaggio perchè i suoi messaggi privati sono chiusi.")
        else:
            return
        elif number == "2":
        if get(guild.roles, name='Triumvirato'):
            for member in ctx.guild.members:
                try:
                    await member.send(message)
                    print(f"Messaggio inviato a {member.name}")
                except:
                    print(f"{member.name} non ha ricevuto il messaggio perchè i suoi messaggi privati sono chiusi.")
        elif get(guild.roles, name='Co-Triumvirato'):
            for member in ctx.guild.members:
                try:
                    await member.send(message)
                    print(f"Messaggio inviato a {member.name}")
                except:
                    print(f"{member.name} non ha ricevuto il messaggio perchè i suoi messaggi privati sono chiusi.")
        else:
            return
    elif number == "3":
        if get(guild.roles, name='Triumvirato'):
            for member in ctx.guild.members:
                try:
                    await member.send(message)
                    print(f"Messaggio inviato a {member.name}")
                except:
                    print(f"{member.name} non ha ricevuto il messaggio perchè i suoi messaggi privati sono chiusi.")
        elif get(guild.roles, name='Co-Triumvirato'):
            for member in ctx.guild.members:
                try:
                    await member.send(message)
                    print(f"Messaggio inviato a {member.name}")
                except:
                    print(f"{member.name} non ha ricevuto il messaggio perchè i suoi messaggi privati sono chiusi.")
        elif get(guild.roles, name='Presidente ad Interim del LMII'):
            for member in ctx.guild.members:
                try:
                    await member.send(message)
                    print(f"Messaggio inviato a {member.name}")
                except:
                    print(f"{member.name} non ha ricevuto il messaggio perchè i suoi messaggi privati sono chiusi.")
        else:
            return
    return

1 个答案:

答案 0 :(得分:1)

使用SingleProducerConstrained = true获取角色成员列表,而不是使用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返回的列表的索引

通过这种方式,您输入!dmall 2 hi ,它将执行与上面的代码相同的操作,但是现在它将使用ctx.guild.roles中的第三个角色id

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)