discord.py - 我的 if 语句在我的 whois 命令中不起作用 | 不和谐.py
问题描述
所以我正在制作一个 whois 命令,并且我正在制作的 if 语句使得如果用户没有角色,则 value=None。但是,我遇到了麻烦。这是代码
@commands.command(aliases=["whois"])
async def userinfo(self, ctx, member: discord.Member = None):
if not member:
member = ctx.message.author
embed = discord.Embed(colour=discord.Colour(random.randint(1, 16777215)), timestamp=ctx.message.created_at,title=f"User Info - {member}")
embed.set_thumbnail(url=member.avatar_url)
embed.add_field(name="Name", value=member.name)
embed.add_field(name="ID:", value=member.id)
embed.add_field(name="Nickname:", value=member.display_name)
embed.add_field(name="Status", value=member.status)
embed.add_field(name="Created Account On:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M UTC"))
embed.add_field(name="Joined Server On:", value=(member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p UTC")))
roles = [role.mention for role in member.roles[1:]]
embed.add_field(name=f"Roles({len(roles)}):",value=",".join(roles),
inline=False)
embed.add_field(name="Highest Role:", value=member.top_role.mention)
await ctx.send(embed=embed)
if roles == None:
embed.add_field(name="Roles", value="None", inline=False)
所以我问了我的朋友谁擅长python,他给我发了这个:
@commands.command(aliases=["whois"])
async def userinfo(self, ctx, member: discord.Member = None):
if not member:
member = ctx.message.author
embed = discord.Embed(colour=discord.Colour(random.randint(1, 16777215)), timestamp=ctx.message.created_at,title=f"User Info - {member}")
embed.set_thumbnail(url=member.avatar_url)
embed.add_field(name="Name", value=member.name)
embed.add_field(name="ID:", value=member.id)
embed.add_field(name="Nickname:", value=member.display_name)
embed.add_field(name="Status", value=member.status)
embed.add_field(name="Created Account On:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M UTC"))
embed.add_field(name="Joined Server On:", value=(member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p UTC")))
roles = [role.mention for role in member.roles[1:]]
if roles == None: embed.add_field(name=f"Roles({len(roles)}):",value=",".join(roles), inline=False)
embed.add_field(name="Highest Role:", value=member.top_role.mention)
await ctx.send(embed=embed)
这是错误
In embed.fields.6.value: This field is required
它有效,但问题是它显示了@@everyone 角色,我怎样才能摆脱@@everyone 角色?
解决方案
这是固定代码,@everyone
角色始终是成员的第一个角色,因此只需通过从第二个元素访问列表来排除他:member.roles[1:]
,同样当您尝试发送嵌入但用户除了角色之外没有其他@everyone
角色时由于列表为空,因此会出现错误roles
,因此您必须包含检查以防止插入空值。
commands.command(aliases=["whois"])
async def userinfo(self, ctx, member: discord.Member = None):
if not member:
member = ctx.message.author
embed = discord.Embed(colour=discord.Colour(random.randint(1, 16777215)), timestamp=ctx.message.created_at,title=f"User Info - {member}")
embed.set_thumbnail(url=member.avatar_url)
embed.add_field(name="Name", value=member.name)
embed.add_field(name="ID:", value=member.id)
embed.add_field(name="Nickname:", value=member.display_name)
embed.add_field(name="Status", value=member.status)
embed.add_field(name="Created Account On:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M UTC"))
embed.add_field(name="Joined Server On:", value=(member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p UTC")))
# Fixed part
roles = [role.mention for role in member.roles[1:]]
if len(member.roles[1:]) < 1:
embed.add_field(name=f"Roles:",value="None", inline=False)
embed.add_field(name="Highest Role:", value="None")
elif roles != None:
embed.add_field(name=f"Roles({len(roles)}):",value=",".join(roles), inline=False)
embed.add_field(name="Highest Role:", value=member.top_role.mention)
# End of fix
await ctx.send(embed=embed)
推荐阅读
- python - Scrapy和解释代码输出中get()和getall()的区别
- java - ExceptionHandler 在控制器中不起作用
- node.js - 创建实时通知系统的不同选项
- ansible - Ansible Jinja2 模板 - 捕获 textfsm 异常
- powershell - 哪个命令列出系统上的所有防火墙规则,输出包含信息和标头:规则名称、TCP 端口、已启用?
- c# - 使用 WinDbg 和 wpr 调试 OutOfMemory 异常。为什么这些符号显示为?!?- jited .net?
- eclipse - sbt 1.4 文件夹在哪里?
- php - 如何检查列是否为空或已满?
- javascript - 如何将 Vuex 分解为模块
- bash - wget 将帖子回复写入文件,我不知道为什么