Python Discord.py Userinfo命令错误:在embed.fields.2.value中:此字段是必需的

Python Discord.py Userinfo命令错误:在embed.fields.2.value中:此字段是必需的,python,python-3.x,discord,bots,discord.py,Python,Python 3.x,Discord,Bots,Discord.py,我的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

我的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)
这是我在过去两天遇到的错误:

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


如果你能帮我修复这个错误,那对我来说真的意义重大。

在添加的字段中不能有空字符串作为
名称

问题在于这一行:

uiembed.add_field(name=..., value=''.join([role.mention for role in roles[1:]][::-1]), inline=...)
如果用户只有一个角色而不是默认角色,则您创建的列表将为空。
这意味着
.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://code>)是否出于其他原因,但如果用户至少有一个角色而不是
@everyone
,那么这也可以解决问题


我还添加了
作为首选项的连接字符,但可以随意删除。

您提供的代码中没有任何错误,请添加创建嵌入@ukaszkwiecinski的整个过程。我更新了代码,它显示了全部内容。我的删除声明只会删除@everyone,因为它看起来很丑陋我理解你的意思,然后列出你之前所做的理解已经去掉了
@everyone
,这意味着你不需要在已经排除它的列表中添加
[1://code>。