[英]Discord.py: Info command, How to mention roles of a member?
我正在為我的 Discord.py 機器人制作一個 info 命令。 它還顯示用戶具有的角色。 但它沒有正確顯示角色。
我如何使它如此提及角色,就像其他機器人一樣。
這是我的代碼:
async def info(ctx, member: discord.Member):
info_embed = discord.Embed(color=discord.Color.green())
info_embed.set_thumbnail(url=f"{member.avatar_url_as(format=None, static_format='webp', size=1024)}")
info_embed.add_field(name="Member:", value=f"{member.mention}", inline=False)
info_embed.add_field(name="Member name", value=f"{member}", inline=False)
info_embed.add_field(name="Member id:", value=f"{member.id}", inline=False)
info_embed.add_field(name="Nickname:", value=f"{member.nick}", inline=False)
info_embed.add_field(name="Joined at:", value=f"{member.joined_at}", inline=False)
info_embed.add_field(name="Roles:", value=f"{member.roles}", inline=False)
info_embed.set_footer(text="GG-GamerPub | auto-mod")
await ctx.send(embed=info_embed)
我嘗試將其更改為: member.roles.mention
但這不起作用。 它給了我以下錯誤
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'list' object has no attribute 'mention'
我怎樣才能使它起作用? 提前致謝
那是因為您試圖在roles
而不是role
上使用mention
屬性。 您可以使用List Comprehension和join()
來提及角色:
f"{' '.join([role.mention for role in member.roles])}"
它將返回由空格分隔的role.mention
。 如果你想排除@everyone,你可以在列表理解中使用 if 語句。 像這樣:
f"{' '.join([role.mention for role in member.roles if role.name != '@everyone'])}"
讓我們繼續努力吧。 你不能真正提到整個列表。
例如,我有三個角色:“角色 1”、“角色 2”、“角色 3”
當我使用member.roles
它會給我您在嵌入中看到的信息。
但是我們可以通過使用for
循環並遍歷角色列表並逐一提及來解決此問題。
因此,在您的嵌入中,您需要將其加入Roles:
領域Roles:
我會這樣做:
roles = " ".join([role.mention for role in member.roles])
info_embed.add_field(name="Roles:", value=f"{roles}", inline=False)
這將返回如下內容:
將其添加到您的代碼中:
async def info(ctx, member: discord.Member):
info_embed = discord.Embed(color=discord.Color.green())
info_embed.set_thumbnail(url=f"{member.avatar_url_as(format=None, static_format='webp', size=1024)}")
info_embed.add_field(name="Member:", value=f"{member.mention}", inline=False)
info_embed.add_field(name="Member name", value=f"{member}", inline=False)
info_embed.add_field(name="Member id:", value=f"{member.id}", inline=False)
info_embed.add_field(name="Nickname:", value=f"{member.nick}", inline=False)
info_embed.add_field(name="Joined at:", value=f"{member.joined_at}", inline=False)
roles = " ".join([role.mention for role in member.roles if role.name != "@everyone"])
info_embed.add_field(name="Roles:", value=f"{roles}", inline=False)
info_embed.set_footer(text="GG-GamerPub | auto-mod")
await ctx.send(embed=info_embed)
我想添加一個即興功能,所以我這樣做了。 如果沒有提到用戶,則成員是執行命令的用戶。
async def info(ctx, member: discord.Member=None):
if member:
info_user = member
elif member == None:
info_user = ctx.author
info_embed = discord.Embed(color=discord.Color.green())
info_embed.set_thumbnail(url=f"{info_user.avatar_url_as(format=None, static_format='webp', size=1024)}")
info_embed.add_field(name="Member:", value=f"{info_user.mention}", inline=False)
info_embed.add_field(name="Member name", value=f"{info_user}", inline=False)
info_embed.add_field(name="Member id:", value=f"{info_user.id}", inline=False)
info_embed.add_field(name="Nickname:", value=f"{info_user.nick}", inline=False)
info_embed.add_field(name="Joined at:", value=f"{info_user.joined_at}", inline=False)
roles = " ".join([role.mention for role in info_user.roles if role.name != "@everyone"])
info_embed.add_field(name="Roles:", value=f"{roles}", inline=False)
info_embed.set_footer(text="GG-GamerPub | auto-mod")
await ctx.send(embed=info_embed)
我希望你能理解,如果你還有任何疑問,請在評論中問我。
謝謝! :D
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.