1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
from discord.ext import commands
import discord
import importlib
import utils
importlib.reload(utils)
class Levels(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_message(self, message):
"""No Description."""
if message.author.bot:
return
msg_xp = int((len(message.content)-10)/2)+8 if len(message.content) > 15 else 10
msg_xp = 30 if msg_xp > 30 else msg_xp
user_level = await utils.sql_get("SELECT `xp` FROM `levels` WHERE `user_id`=%s AND `guild_id`=%s;",
(message.author.id, message.guild.id,))
await utils.sql_proc("add_xp", (message.author.id, message.guild.id, msg_xp, ), True)
# print(user_level[0])
c_xp = int(user_level[0]["xp"])
curr_level = 25 * c_xp * (1 + c_xp)
new_level = 25 * c_xp+msg_xp * (1 + c_xp+msg_xp)
# print(f"old:{curr_level} new:{new_level}")
@commands.bot_has_permissions(embed_links=True)
@commands.group(invoke_without_command=True)
async def rank(self, ctx):
"""✓Check your rank in the server"""
ranks = await utils.sql_proc("levels_ranks", (ctx.guild.id,), False)
for rank in ranks:
if rank["user_id"] == ctx.author.id:
str_details = f"**Rank**: {int(rank['rank'])}/{len(ranks)} ({ctx.guild.member_count})\n" + \
f"**Messages**: {rank['messages']}\n" + \
f"**XP:** {rank['xp']}\n" + \
f"**Level:** {int(rank['level'])}\n"
emb = await utils.embed(ctx, ctx.author.name, str_details)
await ctx.send(embed=emb)
break
@commands.bot_has_permissions(embed_links=True)
@commands.group(invoke_without_command=True)
async def leaderboard(self, ctx):
"""✓Check the top 10 ranks in the server"""
str_details = ""
ranks = await utils.sql_proc("levels_ranks", (ctx.guild.id,), False)
members = ctx.guild.members
# Obtain the top 10 members
for rank in ranks:
for tmp_member in members:
if rank['user_id'] == tmp_member.id:
member = tmp_member
break
str_details = str_details + f"{int(rank['rank'])}: {member.name} - {rank['xp']}\n"
if int(rank['rank']) == 10:
break
emb = await utils.embed(ctx, "", str_details)
await ctx.send(embed=emb)
def setup(bot):
print("INFO: Loading [Levels]... ", end="")
bot.add_cog(Levels(bot))
print("Done!")
def teardown(bot):
print("INFO: Unloading [Levels]")
|