Discord.py〜显示用户信息的命令

时间:2020-08-09 16:31:03

标签: python-3.x discord.py

我正在尝试创建一个userinfo命令,该命令有效,但仅不提及“获取我的信息,但是当我提及某人时不起作用”。当我提到某人来查看其信息时,命令会向我显示此信息 Command raised an exception: AttributeError: 'ClientUser' object has no attribute 'joined_at' 这是代码

@bot.command()
async def userinfo(ctx, *, user: discord.User = None): # b'\xfc'
    if user is None:
        user = ctx.author      
    date_format = "%a, %d %b %Y %I:%M %p"
    embed = discord.Embed(color=0xdfa3ff, description=user.mention)
    embed.set_author(name=str(user), icon_url=user.avatar_url)
    embed.set_thumbnail(url=user.avatar_url)
    embed.add_field(name="Joined", value=user.joined_at.strftime(date_format))
    members = sorted(ctx.guild.members, key=lambda m: m.joined_at)
    embed.add_field(name="Join position", value=str(members.index(user)+1))
    embed.add_field(name="Registered", value=user.created_at.strftime(date_format))
    if len(user.roles) > 1:
        role_string = ' '.join([r.mention for r in user.roles][1:])
        embed.add_field(name="Roles [{}]".format(len(user.roles)-1), value=role_string, inline=False)
    perm_string = ', '.join([str(p[0]).replace("_", " ").title() for p in user.guild_permissions if p[1]])
    embed.add_field(name="Guild permissions", value=perm_string, inline=False)
    embed.set_footer(text='ID: ' + str(user.id))
    return await ctx.send(embed=embed)

2 个答案:

答案 0 :(得分:1)

discord.User没有joined_at变量。
请改用此变量:

    @bot.command()
async def userinfo(ctx, *, user: discord.Member = None):
...

我还建议您检查该命令是否未在私人聊天中执行,否则会引发错误。

if isinstance(ctx.channel, discord.DMChannel):
    return

答案 1 :(得分:0)

你正在使用的是

user = ctx.author

你应该使用的是

async def userinfo(ctx, *, user:discord.Member = None):
    .
    .
    .