首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取用户角色discord.py

如何获取用户角色discord.py
EN

Stack Overflow用户
提问于 2020-05-23 19:35:21
回答 3查看 4.4K关注 0票数 2

我试图执行一个info命令,正如您可以看到的那样,但是在角色部分,我不能显示用户的角色。起初,我执行了一个工作命令,但是它也显示了"@everyone“角色,所以我做了一个字符串来删除它(mention.remove("everyone")),但是它不能工作--它给出了一个错误:

代码语言:javascript
运行
复制
Command raised an exception: ValueError: list.remove(x): x not in list

我也试着用“每个人”来代替“每个人”,但它仍然不起作用。

代码语言:javascript
运行
复制
@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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-23 19:55:12

您只需使用if语句来检查角色的名称是否为@everyone

代码语言:javascript
运行
复制
@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)
票数 1
EN

Stack Overflow用户

发布于 2020-05-23 19:44:37

在添加到列表之前,您应该简单地使用if检查值-然后不需要remove

代码语言:javascript
运行
复制
mention = []

for role in user.roles:
    if role.mention != "@everyone":
        mention.append(role.mention)

和列表理解一样

代码语言:javascript
运行
复制
mention = [role.mention for role in user.roles if role.mention != "@everyone"]

BTW:如果您想要删除某些内容,那么只在for-loop之后执行一次,并使用if检查是否存在元素

代码语言:javascript
运行
复制
mention = []

for role in user.roles:
    mention.append(role.mention)


if "@everyone" in mention:
    mention.remove("@everyone")
票数 0
EN

Stack Overflow用户

发布于 2021-10-09 23:38:15

Try

代码语言:javascript
运行
复制
roles = ""
for role in user.roles:
    if role.id == ctx.guild.id:
      continue
    roles += f" <@&{role.id}>"

然后可能打印角色或将角色发送到通道中(嵌入是建议的,因为它不会平任何人,而且看起来更漂亮)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61977624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档