import os
import discord
import json
from dotenv import load_dotenv
from discord.ext import commands
from user import User
############## Init Variables #############
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
DATA = os.getcwd() + '\\data\\'
bot = commands.Bot(command_prefix='+')
bot.remove_command('help')
rank_list = []
############## Main Code #############
@bot.event
async def on_ready():
for guild in bot.guilds:
if guild.name == GUILD:
break
print(
f'{bot.user} is connected to the following guild:\n'
f'{guild.name}(id: {guild.id})'
)
if(os.path.isfile(DATA + 'users.json')):
print('Database File for Rank System exists and is ready for processing!')
else:
print('Database File doesnt exist and will be created....')
create_file()
print('File is created and ready for use!')
@bot.event
async def on_message(message):
#rank_system(message)
await bot.process_commands(message)
if message.author.id != 747719515135017001:
with open(os.path.join(DATA, "users.json"),'r') as tmp:
users = json.load(tmp)
await update_data(users, message.author)
await add_xp(users, message.author, 5)
await level_up(users, message.author, message)
with open(os.path.join(DATA, "users.json"),'w') as tmp:
json.dump(users, tmp)
@bot.event
async def on_member_join(member):
with open(os.path.join(DATA, "users.json"),'r') as tmp:
users = json.load(tmp)
await update_data(users, member)
with open(os.path.join(DATA, "users.json"),'w') as tmp:
json.dump(users, tmp)
############## Commands ################
@bot.command(name='help')
async def help_command(ctx):
embed = discord.Embed(
title = "Bot Commands",
description = "Hier werden alle Commands von diesem Bot aufgelistet. Alle nachfolgenden Commands müssen mit dem Präfix '+' aufgerufen werden.",
color = discord.Color.blue()
)
embed.add_field(name="Algorithmen", value="Lexikon", inline=True)
embed.add_field(name="Datenstrukturen", value="Lexikon", inline=True)
embed.add_field(name="macarena", value="Fun Commands", inline=True)
await ctx.send(embed=embed)
@bot.command(name='rank')
async def get_rank(message):
id = str(message.author.id)
with open(os.path.join(DATA, "users.json"),"r") as tmp:
users = json.load(tmp)
lvl = users[id]['level']
experience = users[id]['xp']
response = f"You are Rank {lvl} and you have {experience}."
await message.channel.send(response)
@bot.command(name='Algorithmen')
async def algo_command(message):
response = "Es gibt viele verschiedene Algorithmen hier eine kurze Auflistung von den bekanntesten:\n\n- Bubble Sort\n- Quick Sort\n- Merge Sort"
await message.channel.send(response)
@bot.command(name='Datenstrukturen')
async def datenstrukturen_command(message):
response = "Es gibt viele verschiedene Datenstrukturen hier eine kurze Auflistung von den bekanntesten:\n\n- Stack\n- Queue\n- List"
await message.channel.send(response)
@bot.command()
async def macarena(message):
print("Funktioniert")
response = "Hast du ernsthaft so viel Langeweile, dass du diesen Command ausprobierst....Schäm dich ;)"
await message.channel.send(response)
#Sound Board
############ Helper Functions #############
async def update_data(users, user):
if not(user.id in users):
users[user.id] = {}
users[user.id]['xp'] = 0
users[user.id]['level'] = 1
async def add_xp(users, user, xp):
print("Old XP: ", users[user.id]['xp'])
users[user.id]['xp'] += xp
print("New XP: ", users[user.id]['xp'])
async def level_up(users, user, message):
experience = users[user.id]['xp']
lvl_start = users[user.id]['level']
lvl_end = int(experience ** (1/4))
print("Experience: ", experience)
print("Level Start: ", lvl_start)
print("Level End: ", lvl_end)
if lvl_start < lvl_end:
await message.channel.send('{} ist ein Level aufgestiegen. Er ist nun {}'.format(user.mention, lvl_end))
users[user.id]['level'] = lvl_end
def create_file():
open(os.path.join(DATA, "users.json"), "x")
bot.run(TOKEN)