Advertisement
Guest User

Leveling

a guest
Sep 15th, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.57 KB | None | 0 0
  1. import discord
  2. from discord.ext import commands
  3. import asyncio
  4. import datetime
  5. import sqlite3
  6. import math
  7.  
  8. class LvlCog(commands.Cog, name='Leveling'):
  9.  
  10.     def __init__(self, bot):
  11.         self.bot = bot
  12.  
  13.     @commands.Cog.listener()
  14.     async def on_message(self, message):
  15.         db = sqlite3.connect('main.sqlite')
  16.         cursor = db.cursor()
  17.         cursor.execute(f"SELECT user_id FROM levels WHERE guild_id = '{message.author.guild.id}' and user_id = '{message.author.id}'")
  18.         result = cursor.fetchone()
  19.         if result is None:
  20.             sql = ("INSERT INTO levels(guild_id, user_id, exp, lvl) VALUES(?,?,?,?)")
  21.             val = (message.author.guild.id, message.author.id, 2, 0)
  22.             cursor.execute(sql, val)
  23.             db.commit()
  24.         else:
  25.             cursor.execute(f"SELECT user_id, exp, lvl FROM levels WHERE guild_id = '{message.author.guild.id}' and user_id = '{message.author.id}'")
  26.             result1 = cursor.fetchone()
  27.             exp = int(result1[1])
  28.             sql = ('UPDATE levels SET exp = ? WHERE guild_id = ? and user_id = ?')
  29.             val = (exp + 2, str(message.guild.id), str(message.author.id))
  30.             cursor.execute(sql, val)
  31.             db.commit()
  32.  
  33.             cursor.execute(f"SELECT user_id, exp, lvl FROM levels WHERE guild_id = '{message.author.guild.id}' and user_id = '{message.author.id}'")
  34.             result2 = cursor.fetchone()
  35.  
  36.             xp_start = int(result2[1])
  37.             lvl_start = int(result2[2])
  38.             xp_end = math.floor(5 * (lvl_start ^ 2) + 20 * lvl_start + 30)
  39.             if xp_end < xp_start:
  40.                 await message.channel.send(f'{message.author.mention} has leveled up to level {lvl_start + 1}.')
  41.                 sql = ("UPDATE levels SET lvl = ? WHERE guild_id = ? and user_id = ?")
  42.                 val = (int(lvl_start + 1), str(message.guild.id), str(message.author.id))
  43.                 cursor.execute(sql, val)
  44.                 db.commit()
  45.                 sql = ("UPDATE levels SET exp = ? WHERE guild_id = ? and user_id = ?")
  46.                 val = (0, str(message.guild.id), str(message.author.id))
  47.                 cursor.execute(sql, val)
  48.                 db.commit()
  49.                 cursor.close()
  50.                 db.close()
  51.  
  52.     @commands.command()
  53.     async def rank(self, ctx, user:discord.User=None):
  54.         if user is not None:
  55.             db = sqlite3.connect('main.sqlite')
  56.             cursor = db.cursor()
  57.             cursor.execute(f"SELECT user_id, exp, lvl FROM levels WHERE guild_id = '{ctx.message.author.guild.id}' and user_id = '{ctx.message.author.id}'")
  58.             result = cursor.fetchone()
  59.             if result is None:
  60.                 await ctx.send('That user is not yet ranked.')
  61.             else:
  62.                 await ctx.send(f'{user.name} is currently level {str(result[2])} and has {str(result[1])} XP.')
  63.             cursor.close()
  64.             db.close()
  65.         elif user is None:
  66.             db = sqlite3.connect('main.sqlite')
  67.             cursor = db.cursor()
  68.             cursor.execute(f"SELECT user_id, exp, lvl FROM levels WHERE guild_id = '{ctx.message.author.guild.id}' and user_id = '{ctx.message.author.id}'")
  69.             result = cursor.fetchone()
  70.             if result is None:
  71.                 await ctx.send('That user is not yet ranked.')
  72.             else:
  73.                 await ctx.send(f'{ctx.message.author.name} is currently level {str(result[2])} and has {str(result[1])} XP.')
  74.             cursor.close()
  75.             db.close()
  76.  
  77. def setup(bot):
  78.     bot.add_cog(LvlCog(bot))
  79.     print('Leveling is fully loaded')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement