rework to 2.0 discord.py

This commit is contained in:
ggodot 2025-02-16 01:39:56 +01:00
parent bbe665641f
commit 49f4039844
2 changed files with 152 additions and 110 deletions

View File

@ -2,13 +2,14 @@
- [ ] how to import it - [ ] how to import it
## Funkce ## Funkce
- [x] User object for avatar use
- [x] $blame poradi - [x] $blame poradi
- [ ] $ahoj() nalada podle cetnosti pozdravu - [ ] $ahoj() nalada podle cetnosti pozdravu
- [x] backup jsons pro zpetnou analizaci dat - [x] backup jsons pro zpetnou analizaci dat
## Cool tech ## Cool tech
- [ ] mit json v cache pro rychlost - [ ] mit json v cache pro rychlost
- [ ] rewrite to dpy 2.0 - [x] rewrite to dpy 2.0
- [ ] role check by function not by role - [ ] role check by function not by role
# Docs by # Docs by

259
disbot.py
View File

@ -1,163 +1,203 @@
import discord import discord
from discord.ext import commands import os, datetime, shutil, json
#from private.config import token #from private.config import token
import json from discord import Option
import os
import datetime
import shutil
os.chdir("/opt/disbot") os.chdir("/opt/disbot")
intents = discord.Intents.default() bot = discord.Bot()
intents.message_content = True g_ids = [1278700374756298834] #Schoool
bot = commands.Bot(command_prefix='$', intents=intents)
date = datetime.datetime.now() date = datetime.datetime.now()
@bot.event @bot.event
# Start succes indicator
async def on_ready(): async def on_ready():
shutil.copy("./mainbank.json", f"backup/{date.year}-{date.month}-{date.day-1}.json") shutil.copy("./mainbank.json", f"backup/{date.year}-{date.month}-{date.day-1}.json")
print(f'We have logged in as {bot.user}') print(f'We have logged in as {bot.user}')
@bot.command() @bot.slash_command(guild_ids=g_ids, name = "ahoj", description="Je slušností pozdravit")
# Ahoj function async def summary(ctx):
async def ahoj(ctx): await ctx.channel.trigger_typing() # that bot is typing
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"]
leader_board = {} try:
total = [] await ctx.respond(f"Zdravím miláčkové!")
except:
await ctx.send(f"Zdravím miláčkové!")
for user in users:
name = int(user) @bot.slash_command(guild_ids=g_ids, name = "balance", description="Kolik bodíčků máš?")
leader_board[users[user]["wallet"]] = name async def balance(ctx, koho: Option(str, description="Koho bodíčky chceš věděti?", required = False)):
total.append([users[user]["wallet"]]) 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) if mem != str(ctx.author.id):
poradi = total.index([users[str(member.id)]["wallet"]]) +1 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()) member = await bot.fetch_user(int(mem))
em.add_field(name = "Bodíčků máš", value = wallet_amt, inline = False)
em.add_field(name = "V poradi jsi:", value = poradi, inline = False) await open_account(ctx.author.id)
em.set_thumbnail(url = member.avatar) await open_account(mem)
await ctx.send("Co bych pro tebe neudělal!") users = await get_bank_data()
await ctx.author.send(embed = em)
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"]) @bot.slash_command(guild_ids=g_ids, name="shame", descritpion="Shows users that shud sink in shame")
async def shame(ctx, edge = -1): 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) role = await check_role(ctx, ctx.author)
if role == False: if role == False:
await ctx.send("Já nevěřit tvým šprímům, ty více ukázati musíš.") try:
return 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 = {} users = await get_bank_data()
em = discord.Embed(title = "List of shame", color = discord.Color.red())
for user in users: loser_dict = {}
if users[user]["wallet"] <= edge: em = discord.Embed(title = "List of shame", color = discord.Color.red())
#creates dictionary of needed info for user in users:
debt = users[user]["wallet"] if users[user]["wallet"] <= hranice:
if int(users[user]["wallet"]) in loser_dict:
loser_dict[debt].append(user) #creates dictionary of needed info
else: debt = users[user]["wallet"]
loser_dict[debt] = [] if int(users[user]["wallet"]) in loser_dict:
loser_dict[debt].append(user) loser_dict[debt].append(user)
#sortes else:
loser_dict = dict(sorted(loser_dict.items())) loser_dict[debt] = []
loser_dict[debt].append(user)
# formats string to desired format #sortes
for loser in loser_dict: loser_dict = dict(sorted(loser_dict.items()))
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) # 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.")
for mem in komu.split():
@bot.command() mem = mem.strip("<>@")
async def payout(ctx,member:discord.Member,amount = None):
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 update_bank(member,kolik)
await ctx.send("Částku zapoměl napsat jsi.")
return
if role == False:
await ctx.send("Já nevěřit tvým šprímům, ty více ukázati musíš.") await ctx.send(f"{member.name} dostal vyplaceno {kolik} bodíčků!")
if role:
await update_bank(member,amount)
await ctx.send(f"{member} dostal vyplaceno {amount} bodíčků!") @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)):
@bot.command() await ctx.channel.trigger_typing()
async def cut(ctx,member:discord.Member,amount = None):
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: member = await bot.fetch_user(int(mem))
await ctx.send("Částku zapoměl napsat jsi.")
return
if role == False: await open_account(mem)
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 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 # opens json file to found if user id is present
users = await get_bank_data() users = await get_bank_data()
# tests presence # tests presence
if str(user.id) in users: if str(id) in users:
return False return False
else: else:
users[str(user.id)] = {} users[str(id)] = {}
users[str(user.id)]["wallet"] = 0 users[str(id)]["wallet"] = 0
# saves a new data in json # saves a new data in json
with open("mainbank.json", "w") as f: with open("mainbank.json", "w") as f:
@ -185,6 +225,7 @@ async def update_bank(user,change = 0):
return bal return bal
async def check_role(ctx, user:discord.Member): async def check_role(ctx, user:discord.Member):
role = discord.utils.get(ctx.guild.roles,name = "Učitelé") role = discord.utils.get(ctx.guild.roles,name = "Učitelé")