尝试使用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!")
但是由于未知的原因,机器人每次都会返回命令执行者的等级卡。是什么原因造成的?