Python Discord.py Userinfo命令错误:在embed.fields.2.value中:此字段是必需的
我的userinfo命令有问题 以下是我的命令代码: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
@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>。