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}")
- Î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
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ță:
- încă trimite doar numele botului. cred că ar trebui să fie un parametru pentru tipul de membri( btw m working with cogs ) – – > .
- ai activat intents.members? – > .
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.