modified: bot.py
This commit is contained in:
80
bot.py
80
bot.py
@@ -444,6 +444,86 @@ def read_background_data(filename):
|
|||||||
def get_current_datetime():
|
def get_current_datetime():
|
||||||
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
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
|
# Verwenden Sie die Funktion, um Hintergrunddaten zu laden
|
||||||
background_data = read_background_data("background_data.txt")
|
background_data = read_background_data("background_data.txt")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user