modified: bot.py
This commit is contained in:
55
bot.py
55
bot.py
@@ -242,8 +242,8 @@ def load_user_data_from_mysql(user_id):
|
|||||||
"filter_value": result[5],
|
"filter_value": result[5],
|
||||||
"rank": result[6],
|
"rank": result[6],
|
||||||
"chat_history": json.loads(result[7]) if result[7] else [],
|
"chat_history": json.loads(result[7]) if result[7] else [],
|
||||||
"level": result[8] if result[8] is not None else 1, # Initialisiere Level mit 1
|
"level": result[8], # Initialisiere Level mit 1
|
||||||
"xp": result[9] if result[9] is not None else 0 # Initialisiere XP mit 0
|
"xp": result[9] # Initialisiere XP mit 0
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
# Falls keine Benutzerdaten gefunden werden, initialisiere sie neu
|
# Falls keine Benutzerdaten gefunden werden, initialisiere sie neu
|
||||||
@@ -478,36 +478,25 @@ def get_current_datetime():
|
|||||||
def calculate_xp_for_level(level):
|
def calculate_xp_for_level(level):
|
||||||
return 5 * (level ** 2) + 50 * level + 100
|
return 5 * (level ** 2) + 50 * level + 100
|
||||||
|
|
||||||
async def add_xp_to_user(user_id, xp_gained, message):
|
async def add_xp_to_user(user_id, xp_gained):
|
||||||
# Lade Benutzerdaten aus der Datenbank
|
user_data = load_user_data(user_id)
|
||||||
user_data = load_user_data_from_mysql(user_id)
|
current_xp = user_data.get("xp", 0)
|
||||||
|
current_level = user_data.get("level", 1)
|
||||||
|
|
||||||
if user_data is None:
|
# Füge die neu verdiente XP hinzu
|
||||||
# Benutzer ist nicht in der Datenbank, füge ihn hinzu
|
new_xp = current_xp + xp_gained
|
||||||
insert_user_data(user_id, 0, 0, 0, 0, 0, [])
|
next_level_xp = calculate_xp_for_level(current_level)
|
||||||
user_data = load_user_data_from_mysql(user_id)
|
|
||||||
|
|
||||||
# XP hinzufügen
|
# Level-Up-Logik
|
||||||
user_data["xp"] += xp_gained
|
while new_xp >= next_level_xp:
|
||||||
|
new_xp -= next_level_xp
|
||||||
|
current_level += 1
|
||||||
|
next_level_xp = calculate_xp_for_level(current_level)
|
||||||
|
await notify_level_up(user_id, current_level) # Funktion für Level-Up-Benachrichtigung
|
||||||
|
|
||||||
# Formel für Level-Up
|
# Speichern der neuen XP und des Levels
|
||||||
new_level = int(5 * (user_data["level"] ** 2) + 50 * user_data["level"] + 100)
|
update_user_data(user_id, "xp", new_xp)
|
||||||
|
update_user_data(user_id, "level", current_level)
|
||||||
# Überprüfen, ob der Benutzer ein Level aufsteigt
|
|
||||||
if user_data["xp"] >= new_level:
|
|
||||||
user_data["level"] += 1
|
|
||||||
user_data["xp"] = 0 # XP auf 0 zurücksetzen nach einem Level-Up
|
|
||||||
|
|
||||||
# Schicke eine Nachricht, dass der Benutzer ein Level aufgestiegen ist
|
|
||||||
channel = message.channel # Verwendet den gleichen Kanal, in dem die Nachricht gesendet wurde
|
|
||||||
await channel.send(f"{message.author.mention} has reached level {user_data['level']}!")
|
|
||||||
|
|
||||||
# Aktualisiere die Benutzerdaten in der Datenbank
|
|
||||||
update_user_data(user_id, "xp", user_data["xp"])
|
|
||||||
update_user_data(user_id, "level", user_data["level"])
|
|
||||||
|
|
||||||
# Cache mit aktuellen Daten aktualisieren
|
|
||||||
await cache_user_data(user_id, user_data)
|
|
||||||
|
|
||||||
async def notify_level_up(user_id, new_level):
|
async def notify_level_up(user_id, new_level):
|
||||||
user = await client.fetch_user(user_id)
|
user = await client.fetch_user(user_id)
|
||||||
@@ -559,10 +548,12 @@ async def on_message(message):
|
|||||||
return
|
return
|
||||||
|
|
||||||
user_id = message.author.id
|
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
|
||||||
|
|
||||||
# Zufällige XP zwischen 5 und 15 hinzufügen
|
xp_gained = random.randint(5, 15)
|
||||||
xp_gained = random.randint(2, 15)
|
await add_xp_to_user(user_id, xp_gained)
|
||||||
await add_xp_to_user(user_id, xp_gained, message)
|
xp_cooldowns[user_id] = time.time()
|
||||||
|
|
||||||
await client.process_commands(message)
|
await client.process_commands(message)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user