如何获取用户的角色 discord.py
How to get user's role discord.py
如您所见,我正在尝试执行信息命令,但在角色部分,我无法显示用户的角色。
起初我做了一个工作命令但它也显示了“@everyone”角色,所以我做了一个字符串来删除它(mention.remove("everyone")
)但是它不起作用它给出了这个错误:
Command raised an exception: ValueError: list.remove(x): x not in list
我也试过用“@everyone”替换"everyone",但还是不行..
@client.command()
async def info(ctx, user: discord.Member):
mention = []
for role in user.roles:
mention.append(role.mention)
mention.remove("everyone")
b = ", ".join(mention)
embed = discord.Embed(title="Info:", description=f"Info of: {user.mention}", color=discord.Color.orange())
embed.add_field(name="Top role:", value=user.top_role)
embed.add_field(name="Roles:", value=b)
await ctx.send(embed=embed)
您应该在添加到列表之前简单地使用 if
检查值 - 然后您不需要 remove
mention = []
for role in user.roles:
if role.mention != "@everyone":
mention.append(role.mention)
与列表理解相同
mention = [role.mention for role in user.roles if role.mention != "@everyone"]
顺便说一句: 如果你想删除一些东西,那么在 for
循环之后只做一次,并使用 if
检查元素是否存在
mention = []
for role in user.roles:
mention.append(role.mention)
if "@everyone" in mention:
mention.remove("@everyone")
您可以只使用 if
语句来检查角色名称是否为 @everyone
。
@client.command()
async def info(ctx, user: discord.Member):
mention = []
for role in user.roles:
if role.name != "@everyone":
mention.append(role.mention)
b = ", ".join(mention)
embed = discord.Embed(title="Info:", description=f"Info of: {user.mention}", color=discord.Color.orange())
embed.add_field(name="Top role:", value=user.top_role)
embed.add_field(name="Roles:", value=b)
await ctx.send(embed=embed)
尝试:
roles = ""
for role in user.roles:
if role.id == ctx.guild.id:
continue
roles += f" <@&{role.id}>"
然后可能会打印角色或在频道中发送角色(建议嵌入,因为它不会对任何人发出 ping 信号,而且看起来更漂亮)
如您所见,我正在尝试执行信息命令,但在角色部分,我无法显示用户的角色。
起初我做了一个工作命令但它也显示了“@everyone”角色,所以我做了一个字符串来删除它(mention.remove("everyone")
)但是它不起作用它给出了这个错误:
Command raised an exception: ValueError: list.remove(x): x not in list
我也试过用“@everyone”替换"everyone",但还是不行..
@client.command()
async def info(ctx, user: discord.Member):
mention = []
for role in user.roles:
mention.append(role.mention)
mention.remove("everyone")
b = ", ".join(mention)
embed = discord.Embed(title="Info:", description=f"Info of: {user.mention}", color=discord.Color.orange())
embed.add_field(name="Top role:", value=user.top_role)
embed.add_field(name="Roles:", value=b)
await ctx.send(embed=embed)
您应该在添加到列表之前简单地使用 if
检查值 - 然后您不需要 remove
mention = []
for role in user.roles:
if role.mention != "@everyone":
mention.append(role.mention)
与列表理解相同
mention = [role.mention for role in user.roles if role.mention != "@everyone"]
顺便说一句: 如果你想删除一些东西,那么在 for
循环之后只做一次,并使用 if
检查元素是否存在
mention = []
for role in user.roles:
mention.append(role.mention)
if "@everyone" in mention:
mention.remove("@everyone")
您可以只使用 if
语句来检查角色名称是否为 @everyone
。
@client.command()
async def info(ctx, user: discord.Member):
mention = []
for role in user.roles:
if role.name != "@everyone":
mention.append(role.mention)
b = ", ".join(mention)
embed = discord.Embed(title="Info:", description=f"Info of: {user.mention}", color=discord.Color.orange())
embed.add_field(name="Top role:", value=user.top_role)
embed.add_field(name="Roles:", value=b)
await ctx.send(embed=embed)
尝试:
roles = ""
for role in user.roles:
if role.id == ctx.guild.id:
continue
roles += f" <@&{role.id}>"
然后可能会打印角色或在频道中发送角色(建议嵌入,因为它不会对任何人发出 ping 信号,而且看起来更漂亮)