summaryrefslogtreecommitdiff
path: root/cogs/Levels.py
blob: c74f616718957e9ab9a26fe1f4a1d46865f23930 (plain)
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]")