Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
f91314c
test
transorsmth Jan 18, 2023
2b46a0f
added kinda print statements
transorsmth Jan 19, 2023
0e5d0c1
fixed avatar size
transorsmth Jan 19, 2023
9d53acd
a
transorsmth Jan 19, 2023
7bbe5af
more debug
transorsmth Jan 19, 2023
1793353
error on the error message
transorsmth Jan 19, 2023
8e6ebbd
error message too long
transorsmth Jan 19, 2023
7ef3e33
a
transorsmth Jan 19, 2023
70ad0ce
filename
transorsmth Jan 19, 2023
777e9e4
name
transorsmth Jan 19, 2023
8ca7e4a
progressbar
transorsmth Jan 19, 2023
4c527a5
more info
transorsmth Jan 19, 2023
833d395
font size
transorsmth Jan 19, 2023
385b270
a
transorsmth Jan 19, 2023
1e5b518
a
transorsmth Jan 19, 2023
29d273f
a
transorsmth Jan 19, 2023
dc85833
add rank
transorsmth Jan 19, 2023
003d9ff
move text
transorsmth Jan 19, 2023
920dda9
more text movement
transorsmth Jan 19, 2023
9daf74d
more positioning
transorsmth Jan 19, 2023
f6af684
minor text changes
transorsmth Jan 19, 2023
a58c852
circle avatars
transorsmth Jan 20, 2023
394a2c1
idk
transorsmth Jan 20, 2023
64e2a9b
a
transorsmth Jan 20, 2023
98d128a
a
transorsmth Jan 20, 2023
f782bd6
fixed a bad await
transorsmth Jan 20, 2023
c578874
more 'print statements'
transorsmth Jan 20, 2023
268224d
I was stupid, I fixed it
transorsmth Jan 20, 2023
fe9b344
cleaup
transorsmth Jan 20, 2023
535dc48
removed old rank card
transorsmth Jan 20, 2023
4776f15
Missed part, and added levels not enabled message
transorsmth Jan 20, 2023
f637c69
idk i simplified stuff
transorsmth Jan 24, 2023
7f216d7
Remove old code
tweirtx Jun 12, 2023
6531a0d
Merge branch 'master' into master
tweirtx Oct 7, 2023
d20be1b
Merge branch 'master' into master
tweirtx Dec 18, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 48 additions & 7 deletions dozer/cogs/levels.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@
import random
import typing
from datetime import timedelta, timezone, datetime
from io import BytesIO

import aiohttp
import discord
from PIL import Image, ImageFont
from PIL import ImageDraw
from discord.ext.commands import guild_only, has_permissions, BadArgument
from discord.ext.tasks import loop
from discord.utils import escape_markdown
Expand Down Expand Up @@ -640,6 +643,43 @@ async def _cfg_guild_setting(self, ctx: DozerContext, xp_min=None, xp_max=None,
f"Notification channel: {lvl_up_msgs}")
await ctx.send(embed=embed)

def make_new_rank_card(self, member: discord.Member, levels_enabled: bool, level: int = 0, total_xp: int = 0, level_floor: int = 0, rank: int = 0,
count: int = 0, level_xp: int = 0):
img = Image.new('RGB', (400, 100), (44, 47, 51))

avatar = Image.open(BytesIO(await member.display_avatar.with_size(64).read()))
bigsize = (avatar.size[0] * 3, avatar.size[1] * 3)
mask = Image.new('L', bigsize, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + bigsize, fill=255)
mask = mask.resize(avatar.size, Image.ANTIALIAS)
avatar.putalpha(mask)

img.paste(avatar, (18, 18))
draw = ImageDraw.Draw(img)
draw.text((100, 18), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 20))

def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), fg2=(15, 15, 15)):
# Draw the background
draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg2, width=10)
draw.ellipse((x + width, y, x + height + width, y + height), fill=fg2)
draw.ellipse((x, y, x + height, y + height), fill=fg2)
width = int(width * progress)

# Draw the part of the progress bar that is actually filled
draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10)
draw.ellipse((x + width, y, x + height + width, y + height), fill=fg)
draw.ellipse((x, y, x + height, y + height), fill=fg)

if levels_enabled:
draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ')
draw.text((100, 55), f'#{rank} of {count} in this server')

new_bar(100, 73, 250, 12, (total_xp - level_floor) / level_xp)
else:
draw.text((100, 42), "Levels are not enabled in this server")
return img

@command(aliases=["rnak", "level"])
@guild_only()
@discord.ext.commands.cooldown(rate=1, per=5, type=discord.ext.commands.BucketType.user)
Expand All @@ -648,12 +688,11 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None):
If no member is passed, the caller's ranking is shown.
"""
member = member or ctx.author
embed = discord.Embed(color=member.color)

guild_settings = self.guild_settings.get(ctx.guild.id)

if guild_settings is None or not guild_settings.enabled:
embed.description = "Levels are not enabled in this server"
img = self.make_new_rank_card(member, levels_enabled=False)

else:
cache_record = await self.load_member(ctx.guild.id,
member.id) # Grab member from cache to make sure we have the most up to date values
Expand All @@ -679,11 +718,13 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None):
rank = db_record.get("rank")
else:
rank = count
img = self.make_new_rank_card(member, True, level, total_xp, level_floor, rank, count, level_xp)

embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n"
f"#{rank} of {count} in this server")
embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64))
await ctx.send(embed=embed)
arr = BytesIO()
img.save(arr, format='PNG')
arr.seek(0)
file = discord.File(fp=arr, filename=f'{member}.png')
await ctx.send(file=file)

rank.example_usage = """
`{prefix}rank`: show your ranking
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ rstcloth~=0.3.1
humanize~=3.8.0
pre-commit~=2.20.0
loguru~=0.6.0
pillow~=9.4.0
bs4