Discord.py Userinfo 命令错误:在 embed.fields.2.value 中:此字段为必填项
Posted
技术标签:
【中文标题】Discord.py Userinfo 命令错误:在 embed.fields.2.value 中:此字段为必填项【英文标题】:Discord.py Userinfo Command error: In embed.fields.2.value: This field is required 【发布时间】:2021-04-14 13:46:53 【问题描述】:我的 userinfo 命令有问题。
这是我的命令代码:
@client.command()
async def userinfo(ctx , member: discord.Member = None):
member = ctx.author if not member else member
roles = [role for role in member.roles if role.name != '@everyone']
uiembed = discord.Embed(description = member.mention, timestamp = ctx.message.created_at , color = 0x146da8)
uiembed.set_author(name = f'member' , icon_url = member.avatar_url)
developer = (530894795384815616 , 619621027873423360)
uiembed.set_thumbnail(url=member.avatar_url)
uiembed.set_footer(text=f"ID:member.id" , icon_url = "https://media.discordapp.net/attachments/788938397568991234/790040765346217984/unknown.png")
uiembed.add_field(name = 'Joined' , value = member.joined_at.strftime("%a, %b %d, %Y %I:%M %p"))
uiembed.add_field(name = 'Registered' , value = member.created_at.strftime("%a, %b %d, %Y %I:%M %p") , inline = True)
uiembed.add_field(name = f'Roles (len(roles))' , value = ''.join([role.mention for role in roles[1:]][::-1]) , inline = False)
uiembed.add_field(name = 'Key permissions' , value = "Coming soon" , inline = False)
if member == ctx.guild.owner and developer:
uiembed.add_field(name = 'Acknowledgements' , value = 'Owner , Developer')
elif member.id == ctx.guild.owner:
uiembed.add_field(name = 'Acknowledgements' , value = 'Owner')
elif member.id in developer:
uiembed.add_field(name = 'Acknowledgements' , value = 'Developer')
else:
pass
await ctx.send(embed = uiembed)
这是我过去 2 天遇到的错误:
Traceback (most recent call last):
File "/home/fakeblob/.local/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 903, in invoke
await ctx.command.invoke(ctx)
File "/home/fakeblob/.local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 859, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/home/fakeblob/.local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In embed.fields.2.value: This field is required
如果你能帮我解决这个错误,那对我来说真的很重要。
【问题讨论】:
您提供的代码没有问题,请添加创建嵌入的全过程 @ŁukaszKwieciński 我更新了代码,它显示了整个事情。 【参考方案1】:您不能在添加的字段中使用空字符串作为 name
或 value
。
问题在于这一行:
uiembed.add_field(name=..., value=''.join([role.mention for role in roles[1:]][::-1]), inline=...)
如果用户除了默认角色之外只有 1 个角色,那么您所做的列表理解将为空。
这意味着.join(...
将返回一个空字符串:''
,正如我之前提到的,它会引发您所看到的错误:
>>> ''.join([])
''
有几种方法可以解决这个问题,但归根结底,无论如何你都希望有一个价值。 你如何处理这取决于你,但我个人会这样做:
role_mentions = [role.mentions for role in roles[1:]][::-1]
text = "Nothing was found..." if len(role_mentions) == 0 else ', '.join(role_mentions)
uiembed.add_field(name=..., value=text, inline=...)
我不确定您添加的拼接 ([1:]
) 是否出于其他原因,但如果用户至少有一个除@everyone
之外的角色,这也可以解决问题。
我还添加了 ,
作为加入字符以供偏好,但请随意删除它。
【讨论】:
我的删除声明,只会删除@everyone,因为它看起来很丑 如果我理解你在说什么,那么你之前所做的列表理解已经去掉了@everyone
,这意味着你不需要添加[1:]
on已将其排除在外的列表。以上是关于Discord.py Userinfo 命令错误:在 embed.fields.2.value 中:此字段为必填项的主要内容,如果未能解决你的问题,请参考以下文章