diff --git a/bot.py b/bot.py index c74af50..80374bc 100644 --- a/bot.py +++ b/bot.py @@ -444,6 +444,86 @@ def read_background_data(filename): def get_current_datetime(): return datetime.now().strftime("%Y-%m-%d %H:%M:%S") +def calculate_xp_for_level(level): + """Berechnet die XP-Anforderung für das nächste Level""" + return 100 * level # Beispiel: 100 XP pro Level + +async def add_xp_to_user(user_id, xp_amount): + """Fügt XP zum Benutzer hinzu und überprüft, ob ein Levelaufstieg stattfindet""" + user_data = load_user_data(user_id) + + # Füge die XP hinzu + user_data["xp"] += xp_amount + + # Überprüfe, ob der Benutzer ein neues Level erreicht hat + required_xp = calculate_xp_for_level(user_data["level"]) + if user_data["xp"] >= required_xp: + user_data["level"] += 1 + user_data["xp"] -= required_xp # Setze die überschüssige XP zurück + # Level-Up Nachricht an den Benutzer senden + user = client.get_user(user_id) + if user: + await user.send(f"🎉 Glückwunsch, du hast Level {user_data['level']} erreicht!") + + # Speichere die aktualisierten Benutzerdaten + update_user_data(user_id, "xp", user_data["xp"]) + update_user_data(user_id, "level", user_data["level"]) + +@client.hybrid_command() +async def level(ctx): + """Zeigt dein aktuelles Level und XP an.""" + user_id = ctx.author.id + user_data = load_user_data(user_id) + + level = user_data["level"] + xp = user_data["xp"] + required_xp = calculate_xp_for_level(level) + + embed = discord.Embed( + title="Level", + description=f"Du bist auf Level {level}.\nDu hast {xp}/{required_xp} XP.", + color=0x3498db + ) + await ctx.send(embed=embed) + +@client.hybrid_command() +async def leaderboard(ctx): + """Zeigt die Top 10 Benutzer nach Level und XP an.""" + connection = connect_to_database() + cursor = connection.cursor(dictionary=True) + + select_query = "SELECT user_id, level, xp FROM user_data ORDER BY level DESC, xp DESC LIMIT 10" + cursor.execute(select_query) + top_users = cursor.fetchall() + cursor.close() + connection.close() + + embed = discord.Embed(title="Level Rangliste", color=0x3498db) + + for idx, user_data in enumerate(top_users, start=1): + user = client.get_user(user_data["user_id"]) + username = user.name if user else f"User ID: {user_data['user_id']}" + embed.add_field(name=f"{idx}. {username}", value=f"Level {user_data['level']} - {user_data['xp']} XP", inline=False) + + await ctx.send(embed=embed) + +xp_cooldowns = {} + +@client.event +async def on_message(message): + if message.author.bot: + return + + user_id = message.author.id + if user_id in xp_cooldowns and time.time() < xp_cooldowns[user_id] + 60: + return # Der Benutzer hat kürzlich XP erhalten, also überspringen wir das + + xp_gained = random.randint(5, 15) + await add_xp_to_user(user_id, xp_gained) + xp_cooldowns[user_id] = time.time() + + await client.process_commands(message) + # Verwenden Sie die Funktion, um Hintergrunddaten zu laden background_data = read_background_data("background_data.txt")