modified: app.py

modified:   bot.py
This commit is contained in:
SimolZimol
2024-09-04 12:26:51 +02:00
parent 0d1c311ece
commit 0caa040e7c
2 changed files with 59 additions and 17 deletions

4
app.py
View File

@@ -1,3 +1,7 @@
__version__ = "dev-0.4.6"
__all__ = ["Discordbot-chatai-webpanel (Discord)"]
__author__ = "SimolZimol"
from flask import Flask, render_template, redirect, url_for, request, session, jsonify, send_file
import os
import subprocess

72
bot.py
View File

@@ -1,4 +1,4 @@
__version__ = "dev-0.7.9"
__version__ = "dev-0.8.2"
__all__ = ["Discordbot-chatai (Discord)"]
__author__ = "SimolZimol"
@@ -116,14 +116,45 @@ CREATE TABLE IF NOT EXISTS user_data (
db_cursor.execute(create_table_query)
db_connection.commit()
local_user_data = {}
def check_mysql_connection():
global db_connection
try:
if db_connection is not None:
db_connection.ping(reconnect=True, attempts=3, delay=2)
logger.info("MySQL connection is active.")
else:
logger.info("MySQL connection is None, reconnecting...")
connect_to_db()
except mysql.connector.Error as err:
logger.error(f"MySQL connection lost: {err}. Reconnecting...")
connect_to_db()
def connect_to_db():
global db_connection, db_cursor
if db_connection is not None:
db_connection.close()
try:
db_connection = mysql.connector.connect(
host=DB_HOST,
port=DB_PORT,
user=DB_USER,
password=DB_PASSWORD,
database=DB_DATABASE
)
db_cursor = db_connection.cursor()
logger.info("Connected to the MySQL database.")
except mysql.connector.Error as err:
logger.error(f"Error connecting to MySQL: {err}")
def insert_user_data(user_id, permission, points, ban, askmultus, filter_value, chat_history):
insert_query = """
INSERT INTO user_data (user_id, permission, points, ban, askmultus, filter_value, rank, chat_history)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
# Serialize the chat_history list to a JSON string
serialized_chat_history = json.dumps(chat_history)
data = (user_id, permission, points, ban, askmultus, filter_value, 0, serialized_chat_history) # Setze den Rang initial auf 0
data = (user_id, permission, points, ban, askmultus, filter_value, 0, serialized_chat_history)
try:
db_cursor.execute(insert_query, data)
db_connection.commit()
@@ -134,15 +165,11 @@ def insert_user_data(user_id, permission, points, ban, askmultus, filter_value,
def update_user_data(user_id, field, value):
update_query = f"UPDATE user_data SET {field} = %s WHERE user_id = %s"
# Überprüfen, ob das Feld 'chat_history' aktualisiert wird
if field == 'chat_history':
# Serialize the chat history list to a JSON string
serialized_chat_history = json.dumps(value)
db_cursor.execute(update_query, (serialized_chat_history, user_id))
else:
db_cursor.execute(update_query, (value, user_id))
db_connection.commit()
def load_user_data_from_mysql(user_id):
@@ -162,19 +189,16 @@ def load_user_data_from_mysql(user_id):
"chat_history": json.loads(result[7]) if result[7] else []
}
else:
# Wenn keine Benutzerdaten vorhanden sind, erstelle neue Daten
user_data = {
"user_id": user_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
"permission": 0,
"points": 0,
"ban": 0,
"askmultus": 0,
"filter_value": 0,
"rank": 0,
"chat_history": []
}
# Fügen Sie die neuen Benutzerdaten zur Datenbank hinzu
insert_user_data(
user_data["user_id"],
user_data["permission"],
@@ -185,6 +209,8 @@ def load_user_data_from_mysql(user_id):
user_data["chat_history"]
)
# Speichern Sie die Benutzerdaten lokal
local_user_data[user_id] = user_data
return user_data
def save_user_data_to_mysql(user_data):
@@ -212,6 +238,16 @@ def save_user_data_to_mysql(user_data):
db_cursor.execute(update_query, data)
db_connection.commit()
async def periodic_cleanup():
while True:
try:
logger.info("Performing periodic cleanup.")
local_user_data.clear() # Lokale Benutzerdaten löschen
check_mysql_connection() # MySQL-Verbindung prüfen
except Exception as e:
logger.error(f"Error during periodic cleanup: {e}")
await asyncio.sleep(30) # Alle 30 Sekunden ausführen
#-----------------------------------------------------------------------------------------------------------
def read_introduction():
@@ -247,6 +283,8 @@ background_data = read_background_data("background_data.txt")
@client.event
async def on_ready():
client.loop.create_task(process_ai_queue())
connect_to_db()
client.loop.create_task(periodic_cleanup())
logger.info("Bot is ready!")
logger.info(f"Logged in as: {client.user.name}")
logger.info(f"Client ID: {client.user.id}")