modified: bot.py

This commit is contained in:
SimolZimol
2024-10-29 17:05:37 +01:00
parent 7a53c92e0a
commit 0950bd0bd4

94
bot.py
View File

@@ -104,13 +104,13 @@ db_cursor = db_connection.cursor()
def close_database_connection(connection):
connection.close()
def insert_user_data(user_id, guild_id, permission, points, ban, askmultus, filter_value, chat_history, xp=0, level=1):
def insert_user_data(user_id, guild_id, permission, points, ban, askmultus, filter_value, chat_history, nickname, profile_picture, join_date, xp=0, level=1):
insert_query = """
INSERT INTO user_data (user_id, guild_id, permission, points, ban, askmultus, filter_value, rank, chat_history, xp, level)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
INSERT INTO user_data (user_id, guild_id, permission, points, ban, askmultus, filter_value, rank, chat_history, nickname, profile_picture, join_date, xp, level, leave_date)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
serialized_chat_history = json.dumps(chat_history)
data = (user_id, guild_id, permission, points, ban, askmultus, filter_value, 0, serialized_chat_history, xp, level)
data = (user_id, guild_id, permission, points, ban, askmultus, filter_value, 0, serialized_chat_history, nickname, profile_picture, join_date, xp, level, None)
try:
db_cursor.execute(insert_query, data)
db_connection.commit()
@@ -170,7 +170,6 @@ def load_user_data_from_mysql(user_id, guild_id):
close_database_connection(connection)
if result:
# Wenn das Level und die XP nicht vorhanden sind, initialisieren
user_data = {
"user_id": result[0],
"guild_id": result[1],
@@ -181,28 +180,32 @@ def load_user_data_from_mysql(user_id, guild_id):
"filter_value": result[6],
"rank": result[7],
"chat_history": json.loads(result[8]) if result[8] else [],
"asknotes_history": json.loads(result[9]) if result[9] else [],
"xp": result[10],
"level": result[11]
"nickname": result[9],
"profile_picture": result[10],
"join_date": result[11],
"xp": result[12],
"level": result[13],
"leave_date": result[14]
}
else:
# Wenn keine Benutzerdaten gefunden werden, neue Daten anlegen
print(f"No data found for user {user_id} in guild {guild_id}. Inserting new data.")
# Falls keine Benutzerdaten vorhanden sind, neue Daten einfügen
user_data = {
"user_id": user_id,
"guild_id": guild_id,
"permission": 0, # Standardberechtigung
"points": 0, # Standardpunkte
"ban": 0, # Standardbannstatus
"askmultus": 0, # Standardwert für askmultus
"filter_value": 0, # Standardwert für Filter
"rank": 0, # Standardrang
"chat_history": [], # Leerer Chatverlauf
"asknotes_history": [], # Leerer Chatverlauf
"xp": 0, # Standard-XP
"level": 1 # Standardlevel
"permission": 0,
"points": 0,
"ban": 0,
"askmultus": 0,
"filter_value": 0,
"rank": 0,
"chat_history": [],
"nickname": None, # Bei Bedarf setzen
"profile_picture": None, # Bei Bedarf setzen
"join_date": datetime.now().date(),
"xp": 0,
"level": 1,
"leave_date": None
}
insert_user_data(
user_data["user_id"],
user_data["guild_id"],
@@ -212,6 +215,9 @@ def load_user_data_from_mysql(user_id, guild_id):
user_data["askmultus"],
user_data["filter_value"],
user_data["chat_history"],
user_data["nickname"],
user_data["profile_picture"],
user_data["join_date"],
user_data["xp"],
user_data["level"]
)
@@ -272,26 +278,26 @@ def save_global_permission(user_id, permission_level):
#-----------------------------------------------------------------------------------------------------------
def save_giveaway_to_db(guild_id, platform, name, prize_uuid, game_key, winner_dc_id=None):
def save_giveaway_to_db(guild_id, platform, name, prize_uuid, game_key):
connection = connect_to_database()
cursor = connection.cursor()
insert_query = """
INSERT INTO giveaway_data (guild_id, platform, name, uuid, game_key, winner_dc_id, aktiv)
VALUES (%s, %s, %s, %s, %s, %s)
INSERT INTO giveaway_data (guild_id, uuid, platform, name, game_key)
VALUES (%s, %s, %s, %s, %s)
"""
data = (guild_id, platform, name, str(prize_uuid), game_key, winner_dc_id, False)
data = (guild_id, str(prize_uuid), platform, name, game_key)
cursor.execute(insert_query, data)
connection.commit()
cursor.close()
connection.close()
def update_winner_in_db(prize_uuid, winner_dc_id):
def update_winner_in_db(guild_id, prize_uuid, winner_dc_id):
connection = connect_to_database()
cursor = connection.cursor()
update_query = """
UPDATE giveaway_data SET winner_dc_id = %s WHERE uuid = %s
UPDATE giveaway_data SET winner_dc_id = %s WHERE uuid = %s AND guild_id = %s
"""
data = (winner_dc_id, str(prize_uuid))
data = (winner_dc_id, str(prize_uuid), guild_id)
cursor.execute(update_query, data)
connection.commit()
cursor.close()
@@ -300,6 +306,7 @@ def update_winner_in_db(prize_uuid, winner_dc_id):
class Giveaway:
def __init__(self, ctx, platform, prize, num_winners, title, subtitle, duration, end_time):
self.ctx = ctx
self.guild_id = ctx.guild.id # Speichern der guild_id
self.platform = platform
self.prize = prize
self.num_winners = num_winners
@@ -312,7 +319,7 @@ class Giveaway:
self.game_key = f"PREDEFINED_GAME_KEY" # Platzhalter für den tatsächlichen Game-Key
# Speichern des Giveaways in der Datenbank
save_giveaway_to_db(ctx.guild.id, self.platform, self.title, self.prize_uuid, self.game_key)
save_giveaway_to_db(self.guild_id, self.platform, self.title, self.prize_uuid, self.game_key)
def add_participant(self, user):
if user not in self.participants:
@@ -328,11 +335,11 @@ class Giveaway:
@client.hybrid_command()
async def startgiveaway(ctx, platform: str, prize: str, num_winners: int, title: str, subtitle: str, duration: str):
"""Creates a giveaway. Only available for mods and higher."""
"""Erstellt ein neues Giveaway, das nur für Admins verfügbar ist."""
guild_id = ctx.guild.id
user_data = load_user_data(ctx.author.id, guild_id)
if user_data["permission"] < 5:
await ctx.send("You do not have permission to create a giveaway.")
await ctx.send("Du hast keine Berechtigung, ein Giveaway zu erstellen.")
return
if duration.endswith("m"):
@@ -342,7 +349,7 @@ async def startgiveaway(ctx, platform: str, prize: str, num_winners: int, title:
days = int(duration[:-1])
end_time = datetime.now() + timedelta(days=days)
else:
await ctx.send("Invalid duration. Please use 'm' for minutes or 'd' for days.")
await ctx.send("Ungültige Dauer. Bitte 'm' für Minuten oder 'd' für Tage verwenden.")
return
# Neues Giveaway erstellen
@@ -350,17 +357,17 @@ async def startgiveaway(ctx, platform: str, prize: str, num_winners: int, title:
giveaway_id = len(giveaways) + 1
giveaways[giveaway_id] = giveaway
button = Button(label="Participate", style=discord.ButtonStyle.green, custom_id=f"giveaway_{giveaway_id}")
button = Button(label="Teilnehmen", style=discord.ButtonStyle.green, custom_id=f"giveaway_{giveaway_id}")
view = View()
view.add_item(button)
unix_end_time = int(time.mktime(end_time.timetuple()))
embed = discord.Embed(
title=title,
description=f"{subtitle}\n\nPrize: {prize}\nPlatform: {platform}\nNumber of winners: {num_winners}\nEnds <t:{unix_end_time}:R>",
description=f"{subtitle}\n\nPreis: {prize}\nPlattform: {platform}\nAnzahl der Gewinner: {num_winners}\nEndet <t:{unix_end_time}:R>",
color=0x00ff00
)
embed.set_footer(text=f"Giveaway endet at {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
embed.set_footer(text=f"Giveaway endet am {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
await ctx.send(embed=embed, view=view)
check_giveaway.start(giveaway_id)
@@ -384,7 +391,6 @@ async def setlocalpermission(ctx, permission_level: int):
@tasks.loop(minutes=1)
async def check_giveaway(giveaway_id):
"""Checks every 1 minute to see if the giveaway has ended."""
giveaway = giveaways.get(giveaway_id)
if giveaway and giveaway.is_finished():
@@ -393,18 +399,16 @@ async def check_giveaway(giveaway_id):
winners = giveaway.pick_winners()
if winners:
winner_mentions = ", ".join([winner.mention for winner in winners])
await giveaway.ctx.send(f"🎉 Congratulations to the winners of the giveaway '{giveaway.title}'! The winners are: {winner_mentions}")
await giveaway.ctx.send(f"🎉 Glückwunsch an die Gewinner des Giveaways '{giveaway.title}'! Die Gewinner sind: {winner_mentions}")
# Jeden Gewinner benachrichtigen und zur Webseite schicken
# Gewinner speichern und benachrichtigen
for winner in winners:
user_data = load_user_data(winner.id, giveaway.ctx.guild.id)
# Gewinner in der Datenbank speichern (winner_dc_id)
update_winner_in_db(giveaway.prize_uuid, winner.id)
# Nachricht an den Gewinner senden
await winner.send(f"🎁 Congratulations! You won the giveaway '{giveaway.title}'!\n"
f"Please claim your prize using the following link: {GIVEAWAY_WEBSITE_URL}{giveaway.prize_uuid}")
user_data = load_user_data(winner.id, giveaway.guild_id)
update_winner_in_db(giveaway.guild_id, giveaway.prize_uuid, winner.id)
await winner.send(f"🎁 Glückwunsch! Du hast das Giveaway '{giveaway.title}' gewonnen!\n"
f"Bitte hole deinen Preis unter folgendem Link ab: {GIVEAWAY_WEBSITE_URL}/{giveaway.guild_id}/{giveaway.prize_uuid}")
else:
await giveaway.ctx.send(f"The giveaway '{giveaway.title}' has ended, but there were no participants.")
await giveaway.ctx.send(f"Das Giveaway '{giveaway.title}' ist beendet, aber es gab keine Teilnehmer.")
del giveaways[giveaway_id]