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