obține lista tuturor membrilor cu rol specific discord bot discord (Programare, Python, Discord, Bots, Discord.Py)

elmehdi haytom a intrebat.

Vreau ca robotul să trimită toți membrii cu rolul numit buruiană, dar în loc să trimită doar numele robotului

codul meu:

@commands.command(pass_context=True)
    @commands.has_permissions(manage_messages=True)
    async def mom(self,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}")

Comentarii

  • În mod ideal, adăugați ce importuri trebuie să utilizați pentru ca altcineva să poată rula acest cod. Ați putea edita întrebarea dvs. astfel încât să fie mai clară pentru alții –  > Por markushinsche.
  • vă rugăm să postați codul complet și să ajustați identificarea –  > Por Danizavtz.
2 răspunsuri
Łukasz Kwieciński

Puteți folosi pur și simplu role.members

@commands.command()            # ↓ This will make sure that the argument passed is a discord.Role object
async def mom(self, ctx, role: discord.Role):
    members = role.members
    for member in members:
        await ctx.send(f'{member.display_name} - {member.id}')

Referință:

Comentarii

  • încă trimite doar numele botului. cred că ar trebui să fie un parametru pentru tipul de membri( btw m working with cogs ) – –  > Por elmehdi haytom.
  • ai activat intents.members? –  > Por Łukasz Kwieciński.
Mysterious K

Cred că există ceva numit role.members care returnează toți membrii cu rolul „role”. Iată un exemplu de cod:

@commands.command(pass_context=True)
@commands.has_permissions(manage_messages=True)
async def mom(self,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 role.members:
        await ctx.send(f"{member.display_name} - {member.id}")

Încercați să înlocuiți comanda dvs. cu aceasta.