From 49f40398443983db4afa6fb44d886f9070b8177a Mon Sep 17 00:00:00 2001 From: ggodot Date: Sun, 16 Feb 2025 01:39:56 +0100 Subject: [PATCH] rework to 2.0 discord.py --- README.md | 3 +- disbot.py | 259 +++++++++++++++++++++++++++++++----------------------- 2 files changed, 152 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index 442484e..1bc015b 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,14 @@ - [ ] how to import it ## Funkce +- [x] User object for avatar use - [x] $blame poradi - [ ] $ahoj() nalada podle cetnosti pozdravu - [x] backup jsons pro zpetnou analizaci dat ## Cool tech - [ ] mit json v cache pro rychlost -- [ ] rewrite to dpy 2.0 +- [x] rewrite to dpy 2.0 - [ ] role check by function not by role # Docs by diff --git a/disbot.py b/disbot.py index 875722a..36716f9 100644 --- a/disbot.py +++ b/disbot.py @@ -1,163 +1,203 @@ import discord -from discord.ext import commands +import os, datetime, shutil, json #from private.config import token -import json -import os -import datetime -import shutil +from discord import Option os.chdir("/opt/disbot") -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix='$', intents=intents) +bot = discord.Bot() +g_ids = [1278700374756298834] #Schoool date = datetime.datetime.now() @bot.event - # Start succes indicator async def on_ready(): shutil.copy("./mainbank.json", f"backup/{date.year}-{date.month}-{date.day-1}.json") print(f'We have logged in as {bot.user}') -@bot.command() - # Ahoj function -async def ahoj(ctx): - await ctx.send("Zdravím miláčkové!") - - -@bot.command(aliases = ["bal"]) -async def balance(ctx, member:discord.Member = "neni"): - # test if acount is opend and makes on if not - - if member == "neni": - member = ctx.author - - if member != ctx.author: - - role = await check_role(ctx, ctx.author) - - if role == False: - await ctx.send("Větší snahy ze strany tvé nastati budou než já podlehnu.") - return - - await open_account(ctx.author) - await open_account(member) - - users = await get_bank_data() - - wallet_amt = users[str(member.id)]["wallet"] +@bot.slash_command(guild_ids=g_ids, name = "ahoj", description="Je slušností pozdravit") +async def summary(ctx): + await ctx.channel.trigger_typing() # that bot is typing - leader_board = {} - total = [] + try: + await ctx.respond(f"Zdravím miláčkové!") + except: + await ctx.send(f"Zdravím miláčkové!") - for user in users: - name = int(user) - leader_board[users[user]["wallet"]] = name - total.append([users[user]["wallet"]]) + +@bot.slash_command(guild_ids=g_ids, name = "balance", description="Kolik bodíčků máš?") +async def balance(ctx, koho: Option(str, description="Koho bodíčky chceš věděti?", required = False)): + await ctx.channel.trigger_typing() # that bot is typing + + if koho == None: + koho = str(ctx.author.id) + + for mem in koho.split(): + mem = mem.strip("<>@") - total = sorted(total, reverse=True) - poradi = total.index([users[str(member.id)]["wallet"]]) +1 + if mem != str(ctx.author.id): + role = await check_role(ctx, ctx.author) + if role == False: + try: + await ctx.respond("Větší snahy ze strany tvé nastati budou než já podlehnu.") + except: + await ctx.send("Větší snahy ze strany tvé nastati budou než já podlehnu.") + break - em = discord.Embed(title = f"{member.name}",color = discord.Color.blue()) - em.add_field(name = "Bodíčků máš", value = wallet_amt, inline = False) - em.add_field(name = "V poradi jsi:", value = poradi, inline = False) - em.set_thumbnail(url = member.avatar) + member = await bot.fetch_user(int(mem)) + + await open_account(ctx.author.id) + await open_account(mem) - await ctx.send("Co bych pro tebe neudělal!") - await ctx.author.send(embed = em) + users = await get_bank_data() + + wallet_amt = users[str(mem)]["wallet"] + + leader_board = {} + total = [] + + for user in users: + name = int(user) + leader_board[users[user]["wallet"]] = name + total.append([users[user]["wallet"]]) + + total = sorted(total, reverse=True) + poradi = total.index([users[str(mem)]["wallet"]]) +1 + + em = discord.Embed(title = f"{member.name}",color = discord.Color.blue()) + em.add_field(name = "Bodíčků máš", value = wallet_amt, inline = False) + em.add_field(name = "V poradi jsi:", value = poradi, inline = False) + em.set_thumbnail(url = member.avatar) # idk what to do with this + + try: + await ctx.respond("Co bych pro tebe neudělal!") + except: + await ctx.send("Co bych pro tebe neudělal!") + + await ctx.author.send(embed = em) -@bot.command(aliases = ["blame"]) -async def shame(ctx, edge = -1): +@bot.slash_command(guild_ids=g_ids, name="shame", descritpion="Shows users that shud sink in shame") +async def shame(ctx, hranice: Option(int, description = "Where is the line", required = False) = -1): + await ctx.channel.trigger_typing() # that bot is typing + role = await check_role(ctx, ctx.author) if role == False: - await ctx.send("Já nevěřit tvým šprímům, ty více ukázati musíš.") - return + try: + await ctx.respond("Já nevěřit tvým šprímům, ty více ukázati musíš.") + except: + await ctx.send("Já nevěřit tvým šprímům, ty více ukázati musíš.") - users = await get_bank_data() + elif role == True: + try: + await ctx.respond("Rado se, pracuju na tom.") + except: + await ctx.send("Rado se, pracuju na tom.") - loser_dict = {} - em = discord.Embed(title = "List of shame", color = discord.Color.red()) + users = await get_bank_data() - for user in users: - if users[user]["wallet"] <= edge: - - #creates dictionary of needed info - debt = users[user]["wallet"] - if int(users[user]["wallet"]) in loser_dict: - loser_dict[debt].append(user) - else: - loser_dict[debt] = [] - loser_dict[debt].append(user) - #sortes - loser_dict = dict(sorted(loser_dict.items())) - - # formats string to desired format - for loser in loser_dict: - i = 0 - while i < len(loser_dict[loser]): - loser_dict[loser][i] = f'<@{loser_dict[loser][i]}>' - i += 1 + loser_dict = {} + em = discord.Embed(title = "List of shame", color = discord.Color.red()) + + for user in users: + if users[user]["wallet"] <= hranice: + + #creates dictionary of needed info + debt = users[user]["wallet"] + if int(users[user]["wallet"]) in loser_dict: + loser_dict[debt].append(user) + else: + loser_dict[debt] = [] + loser_dict[debt].append(user) + #sortes + loser_dict = dict(sorted(loser_dict.items())) - em.add_field(name = loser, value = ", ".join(loser_dict[loser]), inline = False) + # formats string to desired format + for loser in loser_dict: + i = 0 + while i < len(loser_dict[loser]): + loser_dict[loser][i] = f'<@{loser_dict[loser][i]}>' + i += 1 + + em.add_field(name = loser, value = ", ".join(loser_dict[loser]), inline = False) + + await ctx.author.send(embed = em) + + +@bot.slash_command(guild_ids=g_ids, name="payout", descritpion="Pays user given amount") +async def payout(ctx, komu: Option(str, description = "Komu to sebrat?", required = True), kolik: Option(int, description = "Kolik bodicku sebrat", required = True)): + await ctx.channel.trigger_typing() # that bot is typing - await ctx.author.send(embed = em) + try: + await ctx.respond("Pracuje se na tom.") + except: + await ctx.send("Pracuje se na tom.") - -@bot.command() -async def payout(ctx,member:discord.Member,amount = None): + for mem in komu.split(): + mem = mem.strip("<>@") + + role = await check_role(ctx, ctx.author) - await open_account(member) + if role == False: + try: + await ctx.respond("Větší snahy ze strany tvé nastati budou než já podlehnu.") + except: + await ctx.send("Větší snahy ze strany tvé nastati budou než já podlehnu.") + break - role = await check_role(ctx, ctx.author) + member = await bot.fetch_user(int(mem)) + await open_account(mem) - if amount == None: - await ctx.send("Částku zapoměl napsat jsi.") - return + await update_bank(member,kolik) - if role == False: - await ctx.send("Já nevěřit tvým šprímům, ty více ukázati musíš.") - if role: - await update_bank(member,amount) + + await ctx.send(f"{member.name} dostal vyplaceno {kolik} bodíčků!") - await ctx.send(f"{member} dostal vyplaceno {amount} bodíčků!") - -@bot.command() -async def cut(ctx,member:discord.Member,amount = None): +@bot.slash_command(guild_ids=g_ids, name = "cut", description = "Takes bodičky from users") +async def cut(ctx, komu: Option(str, description = "Komu mam sebrat bodiky?", required = True),kolik: Option(int, descritpion = "Kolik mam sebrat bodičku?", required = True)): + await ctx.channel.trigger_typing() - await open_account(member) + try: + await ctx.respond("Pracuje se na tom.") + except: + await ctx.send("Pracuje se na tom.") - role = await check_role(ctx, ctx.author) + for mem in komu.split(): + mem = mem.strip("<>@") + + role = await check_role(ctx, ctx.author) + + if role == False: + try: + await ctx.respond("Větší snahy ze strany tvé nastati budou než já podlehnu.") + except: + await ctx.send("Větší snahy ze strany tvé nastati budou než já podlehnu.") + break - if amount == None: - await ctx.send("Částku zapoměl napsat jsi.") - return + member = await bot.fetch_user(int(mem)) - if role == False: - await ctx.send("Já nevěřit tvým šprímům, ty více ukázati musíš.") - if role: - await update_bank(member,int(amount)*-1) + await open_account(mem) - await ctx.send(f"{member} dostal zabaveno {amount} bodíčků!") + await update_bank(member,int(kolik)*-1) + + await ctx.send(f"{member.name} dostal zabaveno {kolik} bodíčků!") -async def open_account(user): +async def open_account(id): # opens json file to found if user id is present users = await get_bank_data() # tests presence - if str(user.id) in users: + if str(id) in users: return False else: - users[str(user.id)] = {} - users[str(user.id)]["wallet"] = 0 + users[str(id)] = {} + users[str(id)]["wallet"] = 0 # saves a new data in json with open("mainbank.json", "w") as f: @@ -185,6 +225,7 @@ async def update_bank(user,change = 0): return bal + async def check_role(ctx, user:discord.Member): role = discord.utils.get(ctx.guild.roles,name = "Učitelé")