mirror of
https://github.com/marcogll/telegram_new_socias.git
synced 2026-01-13 13:15:16 +00:00
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
import os
|
|
from sqlalchemy import create_engine, Column, Integer, String, DateTime, MetaData, Table
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from datetime import datetime
|
|
import logging
|
|
|
|
# Configuración de logging
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
|
|
# Construir la URL de la base de datos desde las variables de entorno individuales
|
|
try:
|
|
user = os.getenv("MYSQL_USER")
|
|
password = os.getenv("MYSQL_PASSWORD")
|
|
host = "db" # El nombre del servicio de la base de datos en docker-compose
|
|
database = os.getenv("MYSQL_DATABASE")
|
|
DATABASE_URL = f"mysql+mysqlconnector://{user}:{password}@{host}:3306/{database}"
|
|
|
|
# Crear el motor de la base de datos
|
|
engine = create_engine(DATABASE_URL)
|
|
metadata = MetaData()
|
|
|
|
except AttributeError:
|
|
logging.error("Error: Faltan una o más variables de entorno para la base de datos (MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE).")
|
|
exit(1)
|
|
|
|
# Base para los modelos declarativos
|
|
Base = declarative_base()
|
|
|
|
# Clase que mapea a la tabla de logs
|
|
class RequestLog(Base):
|
|
__tablename__ = 'request_logs'
|
|
id = Column(Integer, primary_key=True)
|
|
telegram_id = Column(String(50))
|
|
username = Column(String(100))
|
|
command = Column(String(100))
|
|
message = Column(String(500))
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
|
|
# Función para inicializar la base de datos
|
|
def init_db():
|
|
try:
|
|
logging.info("Inicializando la base de datos y creando tablas si no existen...")
|
|
Base.metadata.create_all(bind=engine)
|
|
logging.info("Tablas verificadas/creadas correctamente.")
|
|
except Exception as e:
|
|
logging.error(f"Error al inicializar la base de datos: {e}")
|
|
raise
|
|
|
|
# Crear una sesión para interactuar con la base de datos
|
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
|
|
|
# Función para registrar una solicitud en la base de datos
|
|
def log_request(telegram_id, username, command, message):
|
|
db_session = SessionLocal()
|
|
try:
|
|
log_entry = RequestLog(
|
|
telegram_id=str(telegram_id),
|
|
username=username,
|
|
command=command,
|
|
message=message
|
|
)
|
|
db_session.add(log_entry)
|
|
db_session.commit()
|
|
logging.info(f"Log guardado: {command} de {username}")
|
|
except Exception as e:
|
|
logging.error(f"Error al guardar el log: {e}")
|
|
db_session.rollback()
|
|
finally:
|
|
db_session.close()
|
|
|
|
# Inicializar la base de datos al arrancar el módulo
|
|
init_db()
|