rework to 2.0 discord.py
This commit is contained in:
parent
bbe665641f
commit
49f4039844
@ -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
|
||||||
|
|||||||
289
disbot.py
289
disbot.py
@ -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é!")
|
|
||||||
|
try:
|
||||||
|
await ctx.respond(f"Zdravím miláčkové!")
|
||||||
|
except:
|
||||||
|
await ctx.send(f"Zdravím miláčkové!")
|
||||||
|
|
||||||
|
|
||||||
@bot.command(aliases = ["bal"])
|
@bot.slash_command(guild_ids=g_ids, name = "balance", description="Kolik bodíčků máš?")
|
||||||
async def balance(ctx, member:discord.Member = "neni"):
|
async def balance(ctx, koho: Option(str, description="Koho bodíčky chceš věděti?", required = False)):
|
||||||
# test if acount is opend and makes on if not
|
await ctx.channel.trigger_typing() # that bot is typing
|
||||||
|
|
||||||
if member == "neni":
|
if koho == None:
|
||||||
member = ctx.author
|
koho = str(ctx.author.id)
|
||||||
|
|
||||||
if member != ctx.author:
|
for mem in koho.split():
|
||||||
|
mem = mem.strip("<>@")
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
member = await bot.fetch_user(int(mem))
|
||||||
|
|
||||||
|
await open_account(ctx.author.id)
|
||||||
|
await open_account(mem)
|
||||||
|
|
||||||
|
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.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:
|
||||||
|
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íš.")
|
||||||
|
|
||||||
|
elif role == True:
|
||||||
|
try:
|
||||||
|
await ctx.respond("Rado se, pracuju na tom.")
|
||||||
|
except:
|
||||||
|
await ctx.send("Rado se, pracuju na tom.")
|
||||||
|
|
||||||
|
users = await get_bank_data()
|
||||||
|
|
||||||
|
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()))
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
try:
|
||||||
|
await ctx.respond("Pracuje se na tom.")
|
||||||
|
except:
|
||||||
|
await ctx.send("Pracuje se na tom.")
|
||||||
|
|
||||||
|
for mem in komu.split():
|
||||||
|
mem = mem.strip("<>@")
|
||||||
|
|
||||||
role = await check_role(ctx, ctx.author)
|
role = await check_role(ctx, ctx.author)
|
||||||
|
|
||||||
if role == False:
|
if role == False:
|
||||||
await ctx.send("Větší snahy ze strany tvé nastati budou než já podlehnu.")
|
try:
|
||||||
return
|
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
|
||||||
|
|
||||||
await open_account(ctx.author)
|
member = await bot.fetch_user(int(mem))
|
||||||
await open_account(member)
|
await open_account(mem)
|
||||||
|
|
||||||
users = await get_bank_data()
|
await update_bank(member,kolik)
|
||||||
|
|
||||||
wallet_amt = users[str(member.id)]["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(member.id)]["wallet"]]) +1
|
|
||||||
|
|
||||||
|
|
||||||
em = discord.Embed(title = f"{member.name}",color = discord.Color.blue())
|
await ctx.send(f"{member.name} dostal vyplaceno {kolik} bodíčků!")
|
||||||
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)
|
|
||||||
|
|
||||||
await ctx.send("Co bych pro tebe neudělal!")
|
@bot.slash_command(guild_ids=g_ids, name = "cut", description = "Takes bodičky from users")
|
||||||
await ctx.author.send(embed = em)
|
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()
|
||||||
|
|
||||||
|
try:
|
||||||
|
await ctx.respond("Pracuje se na tom.")
|
||||||
|
except:
|
||||||
|
await ctx.send("Pracuje se na tom.")
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
member = await bot.fetch_user(int(mem))
|
||||||
|
|
||||||
|
await open_account(mem)
|
||||||
|
|
||||||
|
await update_bank(member,int(kolik)*-1)
|
||||||
|
|
||||||
|
await ctx.send(f"{member.name} dostal zabaveno {kolik} bodíčků!")
|
||||||
|
|
||||||
|
|
||||||
@bot.command(aliases = ["blame"])
|
async def open_account(id):
|
||||||
async def shame(ctx, edge = -1):
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
users = await get_bank_data()
|
|
||||||
|
|
||||||
loser_dict = {}
|
|
||||||
em = discord.Embed(title = "List of shame", color = discord.Color.red())
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
em.add_field(name = loser, value = ", ".join(loser_dict[loser]), inline = False)
|
|
||||||
|
|
||||||
await ctx.author.send(embed = em)
|
|
||||||
|
|
||||||
|
|
||||||
@bot.command()
|
|
||||||
async def payout(ctx,member:discord.Member,amount = None):
|
|
||||||
|
|
||||||
await open_account(member)
|
|
||||||
|
|
||||||
role = await check_role(ctx, ctx.author)
|
|
||||||
|
|
||||||
if amount == None:
|
|
||||||
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íš.")
|
|
||||||
if role:
|
|
||||||
await update_bank(member,amount)
|
|
||||||
|
|
||||||
await ctx.send(f"{member} dostal vyplaceno {amount} bodíčků!")
|
|
||||||
|
|
||||||
@bot.command()
|
|
||||||
async def cut(ctx,member:discord.Member,amount = None):
|
|
||||||
|
|
||||||
await open_account(member)
|
|
||||||
|
|
||||||
role = await check_role(ctx, ctx.author)
|
|
||||||
|
|
||||||
if amount == None:
|
|
||||||
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íš.")
|
|
||||||
if role:
|
|
||||||
await update_bank(member,int(amount)*-1)
|
|
||||||
|
|
||||||
await ctx.send(f"{member} dostal zabaveno {amount} bodíčků!")
|
|
||||||
|
|
||||||
|
|
||||||
async def open_account(user):
|
|
||||||
# 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é")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user