命令参数似乎不起作用:discord.py

时间:2020-02-18 06:39:25

标签: python discord.py

尝试使用Rank命令显示成员的等级和XP。该命令是这样的: .rank <member>。 给定成员后,将显示该成员的等级卡。否则,它将返回命令执行者的等级卡。下面是我的代码:

    @commands.command()
    async def rank(self, ctx, member: discord.Member = None):
        rank_card = Image.new('RGB', (934, 282), color=0xafb6b8)

        rank_card_font = ImageFont.truetype('Font/01_APompadourTextSample.ttf', 50)

        rank_card_font2 = ImageFont.truetype('Font/02_APompadourTextSample.ttf', 100)

        rank_card_font3 = ImageFont.truetype('Font/03_APompadourTextSample.ttf', 30)

        draw_rank_card = ImageDraw.Draw(rank_card)

        if member is None:
            try:
                user_guild: discord.Guild = ctx.message.guild

                user: discord.User = ctx.message.author

                with open(f'levels/{user_guild.id}_levels.yaml') as accessor:
                    data = yaml.safe_load(accessor)

                    print(data)

                current_xp = data[user.id]['xp']

                level_end_xp = 5 * (int(data[user.id]['level']) ** 2) + 50 * int(data[user.id]['level']) + 100

                draw_rank_card.text((450, 50), "Rank", fill="white", font=rank_card_font)
                draw_rank_card.text((575, 14), "N", fill="white", font=rank_card_font2)
                draw_rank_card.text((675, 50), "Level", fill="blue", font=rank_card_font)
                draw_rank_card.text((810, 14), str(data[user.id]['level']), fill="blue", font=rank_card_font2)
                draw_rank_card.text((50, 125), f"{user.name} # {user.discriminator}", fill="white", font=rank_card_font)
                draw_rank_card.text((700, 140), f"{current_xp}", fill="white", font=rank_card_font3)
                draw_rank_card.text((750, 140), f" / {level_end_xp} XP", fill=0x333434, font=rank_card_font3)

                rank_card.save('card.png')

                await ctx.send(file=discord.File('card.png'))
            except KeyError:
                await ctx.send("Please send some messages!")
        else:
            if not member.bot:
                member_guild: discord.Guild = member.guild

                try:
                    with open(f'levels/{member_guild.id}_levels.yaml') as accessor:
                        data = yaml.safe_load(accessor)

                    current_xp = data[member.id]['xp']

                    level_end_xp = 5 * (int(data[member.id]['level']) ** 2) + 50 * int(data[member.id]['level']) + 100

                    draw_rank_card.text((450, 50), "Rank", fill="white", font=rank_card_font)
                    draw_rank_card.text((575, 14), "N", fill="white", font=rank_card_font2)
                    draw_rank_card.text((675, 50), "Level", fill="blue", font=rank_card_font)
                    draw_rank_card.text((810, 14), str(data[member.id]['level']), fill="blue", font=rank_card_font2)
                    draw_rank_card.text((50, 125), f"{member.name} # {member.discriminator}", fill="white",
                                        font=rank_card_font)
                    draw_rank_card.text((700, 140), f"{current_xp}", fill="white", font=rank_card_font3)
                    draw_rank_card.text((750, 140), f" / {level_end_xp} XP", fill=0x333434, font=rank_card_font3)

                    await ctx.send(file=discord.File('card.png'))
                except KeyError:
                    await ctx.send("The user you specified doesn't have a rank card!")
            else:
                await ctx.send("Bots can't have a rank card!")

但是由于未知的原因,机器人每次都会返回命令执行者的等级卡。是什么原因造成的?

0 个答案:

没有答案