Advertisement
Fsoky

Python Economic BOT from Fsoky

Jul 12th, 2020 (edited)
7,419
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.07 KB | None | 0 0
  1. import discord
  2. from discord.ext import commands
  3.  
  4. import sqlite3
  5. from config import settings
  6. from Cybernator import Paginator as pag
  7.  
  8. client = commands.Bot(command_prefix = settings['PREFIX'], intents=discord.Intents.all())
  9. client.remove_command('help')
  10.  
  11. connection = sqlite3.connect('server.db')
  12. cursor = connection.cursor()
  13.  
  14.  
  15. @client.event
  16. async def on_ready():
  17.     cursor.execute("""CREATE TABLE IF NOT EXISTS users (
  18.         name TEXT,
  19.         id INT,
  20.         cash BIGINT,
  21.         rep INT,
  22.         lvl INT,
  23.         server_id INT
  24.     )""")
  25.  
  26.     cursor.execute("""CREATE TABLE IF NOT EXISTS shop (
  27.         role_id INT,
  28.         id INT,
  29.         cost BIGINT
  30.     )""")
  31.  
  32.     for guild in client.guilds:
  33.         for member in guild.members:
  34.             if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
  35.                 cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1, {guild.id})")
  36.             else:
  37.                 pass
  38.  
  39.     connection.commit()
  40.     print('client connected')
  41.  
  42.  
  43. @client.event
  44. async def on_member_join(member):
  45.     if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
  46.         cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1, {member.guild.id})")
  47.         connection.commit()
  48.     else:
  49.         pass
  50.  
  51.  
  52. @client.command(aliases = ['balance', 'cash'])
  53. async def __balance(ctx, member: discord.Member = None):
  54.     if member is None:
  55.         await ctx.send(embed = discord.Embed(
  56.             description = f"""Баланс пользователя **{ctx.author}** составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} :leaves:**"""
  57.         ))
  58.        
  59.     else:
  60.         await ctx.send(embed = discord.Embed(
  61.             description = f"""Баланс пользователя **{member}** составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(member.id)).fetchone()[0]} :leaves:**"""
  62.         ))  
  63.  
  64.  
  65. @client.command(aliases = ['award'])
  66. async def __award(ctx, member: discord.Member = None, amount: int = None):
  67.     if member is None:
  68.         await ctx.send(f"**{ctx.author}**, укажите пользователя, которому желаете выдать определенную сумму")
  69.     else:
  70.         if amount is None:
  71.             await ctx.send(f"**{ctx.author}**, укажите сумму, которую желаете начислить на счет пользователя")
  72.         elif amount < 1:
  73.             await ctx.send(f"**{ctx.author}**, укажите сумму больше 1 :leaves:")
  74.         else:
  75.             cursor.execute("UPDATE users SET cash = cash + {} WHERE id = {}".format(amount, member.id))
  76.             connection.commit()
  77.  
  78.             await ctx.message.add_reaction('✅')
  79.  
  80.  
  81. @client.command(aliases = ['take'])
  82. async def __take(ctx, member: discord.Member = None, amount = None):
  83.     if member is None:
  84.         await ctx.send(f"**{ctx.author}**, укажите пользователя, у которого желаете отнять сумму денег")
  85.     else:
  86.         if amount is None:
  87.             await ctx.send(f"**{ctx.author}**, укажите сумму, которую желаете отнять у счета пользователя")
  88.         elif amount == 'all':
  89.             cursor.execute("UPDATE users SET cash = {} WHERE id = {}".format(0, member.id))
  90.             connection.commit()
  91.  
  92.             await ctx.message.add_reaction('✅')
  93.         elif int(amount) < 1:
  94.             await ctx.send(f"**{ctx.author}**, укажите сумму больше 1 :leaves:")
  95.         else:
  96.             cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(int(amount), member.id))
  97.             connection.commit()
  98.  
  99.             await ctx.message.add_reaction('✅')
  100.  
  101.  
  102. @client.command(aliases = ['add-shop'])
  103. async def __add_shop(ctx, role: discord.Role = None, cost: int = None):
  104.     if role is None:
  105.         await ctx.send(f"**{ctx.author}**, укажите роль, которую вы желаете внести в магазин")
  106.     else:
  107.         if cost is None:
  108.             await ctx.send(f"**{ctx.author}**, укажите стоимость для даннойй роли")
  109.         elif cost < 0:
  110.             await ctx.send(f"**{ctx.author}**, стоимость роли не может быть такой маленькой")
  111.         else:
  112.             cursor.execute("INSERT INTO shop VALUES ({}, {}, {})".format(role.id, ctx.guild.id, cost))
  113.             connection.commit()
  114.  
  115.             await ctx.message.add_reaction('✅')
  116.  
  117.  
  118. @client.command(aliases = ['remove-shop'])
  119. async def __remove_shop(ctx, role: discord.Role = None):
  120.     if role is None:
  121.         await ctx.send(f"**{ctx.author}**, укажите роль, которую вы желаете удалить из магазина")
  122.     else:
  123.         cursor.execute("DELETE FROM shop WHERE role_id = {}".format(role.id))
  124.         connection.commit()
  125.  
  126.         await ctx.message.add_reaction('✅')
  127.  
  128.  
  129. @client.command(aliases = ['shop'])
  130. async def __shop(ctx):
  131.     embed = discord.Embed(title = 'Магазин ролей')
  132.  
  133.     for row in cursor.execute("SELECT role_id, cost FROM shop WHERE id = {}".format(ctx.guild.id)):
  134.         if ctx.guild.get_role(row[0]) != None:
  135.             embed.add_field(
  136.                 name = f"Стоимость **{row[1]} :leaves:**",
  137.                 value = f"Вы приобрете роль {ctx.guild.get_role(row[0]).mention}",
  138.                 inline = False
  139.             )
  140.         else:
  141.             pass
  142.  
  143.     await ctx.send(embed = embed)
  144.  
  145.  
  146. @client.command(aliases = ['buy', 'buy-role'])
  147. async def __buy(ctx, role: discord.Role = None):
  148.     if role is None:
  149.         await ctx.send(f"**{ctx.author}**, укажите роль, которую вы желаете приобрести")
  150.     else:
  151.         if role in ctx.author.roles:
  152.             await ctx.send(f"**{ctx.author}**, у вас уже имеется данная роль")
  153.         elif cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role.id)).fetchone()[0] > cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]:
  154.             await ctx.send(f"**{ctx.author}**, у вас недостаточно средств для покупки данной роли")
  155.         else:
  156.             await ctx.author.add_roles(role)
  157.             cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role.id)).fetchone()[0], ctx.author.id))
  158.             connection.commit()
  159.  
  160.             await ctx.message.add_reaction('✅')
  161.  
  162.  
  163. @client.command(aliases = ['rep', '+rep'])
  164. async def __rep(ctx, member: discord.Member = None):
  165.     if member is None:
  166.         await ctx.send(f"**{ctx.author}**, укажите участника сервера")
  167.     else:
  168.         if member.id == ctx.author.id:
  169.             await ctx.send(f"**{ctx.author}**, вы не можете указать смого себя")
  170.         else:
  171.             cursor.execute("UPDATE users SET rep = rep + {} WHERE id = {}".format(1, member.id))
  172.             connection.commit()
  173.  
  174.             await ctx.message.add_reaction('✅')
  175.  
  176.  
  177. @client.command(aliases = ['leaderboard', 'lb'])
  178. async def __leaderboard(ctx):
  179.     embed = discord.Embed(title = 'Топ 10 сервера')
  180.     counter = 0
  181.  
  182.     for row in cursor.execute("SELECT name, cash FROM users WHERE server_id = {} ORDER BY cash DESC LIMIT 10".format(ctx.guild.id)):
  183.         counter += 1
  184.         embed.add_field(
  185.             name = f'# {counter} | `{row[0]}`',
  186.             value = f'Баланс: {row[1]}',
  187.             inline = False
  188.         )
  189.  
  190.     await ctx.send(embed = embed)
  191.  
  192.  
  193. client.run(settings['TOKEN'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement