From 13141d6ed344cf7dd650118bd77ddaa69091707a Mon Sep 17 00:00:00 2001 From: Marco Gallegos Date: Sun, 21 Dec 2025 18:00:31 -0600 Subject: [PATCH] refactor: Migrate bot core and modules from `talia_bot` to `bot` directory, update `start_bot.sh` and `Dockerfile`, and modify `README.md`. --- Dockerfile | 8 +-- README.md | 59 +++++++++++-------- {talia_bot => bot}/.gitignore | 0 bot/__init__.py | 2 + {talia_bot => bot}/config.py | 2 +- .../data/flows/admin_block_agenda.json | 0 .../data/flows/admin_check_agenda.json | 0 .../data/flows/admin_create_nfc_tag.json | 0 .../data/flows/admin_idea_capture.json | 0 .../data/flows/admin_print_file.json | 0 .../data/flows/admin_project_management.json | 0 .../data/flows/client_sales_funnel.json | 0 .../data/flows/crew_print_file.json | 0 .../data/flows/crew_propose_activity.json | 0 .../data/flows/crew_request_time.json | 0 .../data/flows/crew_secret_onboarding.json | 0 {talia_bot => bot}/data/services.json | 0 {talia_bot => bot}/db.py | 2 +- {talia_bot => bot}/debug.md | 0 {talia_bot => bot}/main.py | 45 ++++++++------ {talia_bot => bot}/modules/admin.py | 0 {talia_bot => bot}/modules/agenda.py | 6 +- {talia_bot => bot}/modules/aprobaciones.py | 0 {talia_bot => bot}/modules/calendar.py | 2 +- {talia_bot => bot}/modules/citas.py | 2 +- {talia_bot => bot}/modules/debug.py | 16 +++-- {talia_bot => bot}/modules/equipo.py | 0 {talia_bot => bot}/modules/flow_engine.py | 10 ++-- {talia_bot => bot}/modules/identity.py | 6 +- {talia_bot => bot}/modules/llm_engine.py | 4 +- {talia_bot => bot}/modules/nfc_tag.py | 2 +- {talia_bot => bot}/modules/onboarding.py | 2 +- {talia_bot => bot}/modules/printer.py | 6 +- {talia_bot => bot}/modules/sales_rag.py | 6 +- {talia_bot => bot}/modules/vikunja.py | 4 +- {talia_bot => bot}/scheduler.py | 4 +- {talia_bot => bot}/webhook_client.py | 2 +- start_bot.sh | 8 +-- 38 files changed, 112 insertions(+), 86 deletions(-) rename {talia_bot => bot}/.gitignore (100%) create mode 100644 bot/__init__.py rename {talia_bot => bot}/config.py (98%) rename {talia_bot => bot}/data/flows/admin_block_agenda.json (100%) rename {talia_bot => bot}/data/flows/admin_check_agenda.json (100%) rename {talia_bot => bot}/data/flows/admin_create_nfc_tag.json (100%) rename {talia_bot => bot}/data/flows/admin_idea_capture.json (100%) rename {talia_bot => bot}/data/flows/admin_print_file.json (100%) rename {talia_bot => bot}/data/flows/admin_project_management.json (100%) rename {talia_bot => bot}/data/flows/client_sales_funnel.json (100%) rename {talia_bot => bot}/data/flows/crew_print_file.json (100%) rename {talia_bot => bot}/data/flows/crew_propose_activity.json (100%) rename {talia_bot => bot}/data/flows/crew_request_time.json (100%) rename {talia_bot => bot}/data/flows/crew_secret_onboarding.json (100%) rename {talia_bot => bot}/data/services.json (100%) rename {talia_bot => bot}/db.py (99%) rename {talia_bot => bot}/debug.md (100%) rename {talia_bot => bot}/main.py (91%) rename {talia_bot => bot}/modules/admin.py (100%) rename {talia_bot => bot}/modules/agenda.py (93%) rename {talia_bot => bot}/modules/aprobaciones.py (100%) rename {talia_bot => bot}/modules/calendar.py (98%) rename {talia_bot => bot}/modules/citas.py (92%) rename {talia_bot => bot}/modules/debug.py (69%) rename {talia_bot => bot}/modules/equipo.py (100%) rename {talia_bot => bot}/modules/flow_engine.py (96%) rename {talia_bot => bot}/modules/identity.py (95%) rename {talia_bot => bot}/modules/llm_engine.py (95%) rename {talia_bot => bot}/modules/nfc_tag.py (95%) rename {talia_bot => bot}/modules/onboarding.py (98%) rename {talia_bot => bot}/modules/printer.py (97%) rename {talia_bot => bot}/modules/sales_rag.py (95%) rename {talia_bot => bot}/modules/vikunja.py (98%) rename {talia_bot => bot}/scheduler.py (95%) rename {talia_bot => bot}/webhook_client.py (94%) diff --git a/Dockerfile b/Dockerfile index 08cade8..2ec0ad4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,8 @@ WORKDIR /talia_bot COPY requirements.txt . RUN pip install -r requirements.txt -# Copy app code -COPY talia_bot/ . +# Copy the package contents +COPY bot bot -# Run the bot -CMD ["python", "main.py"] +# Run the bot via the package entrypoint +CMD ["python", "-m", "bot.main"] diff --git a/README.md b/README.md index 9bc4831..426ff57 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ Talia es un **Middleware de Inteligencia Artificial** diseñado para orquestar o El bot opera como un agente que sigue un ciclo de **Recepción -> Identificación -> Enrutamiento -> Ejecución**. -1. **Recepción de Mensajes**: `main.py` actúa como el punto de entrada que recibe todos los inputs (texto, botones, comandos, documentos) desde Telegram. +1. **Recepción de Mensajes**: `bot/main.py` actúa como el punto de entrada que recibe todos los inputs (texto, botones, comandos, documentos) desde Telegram. 2. **Identificación de Usuario**: Al recibir un mensaje, el módulo `identity.py` consulta la base de datos (`users.db`) para obtener el rol del usuario (`admin`, `crew`, `client`). 3. **Enrutamiento de Acciones**: * **Si el usuario está en una conversación activa**, el `flow_engine.py` toma el control y procesa la respuesta según la definición del flujo JSON correspondiente. - * **Si el usuario no está en una conversación**, el sistema le muestra un menú de botones. Estos menús se generan dinámicamente a partir de los archivos de flujo en `talia_bot/data/flows/` que tienen una clave `"trigger_button"`. + * **Si el usuario no está en una conversación**, el sistema le muestra un menú de botones. Estos menús se generan dinámicamente a partir de los archivos de flujo en `bot/data/flows/` que tienen una clave `"trigger_button"`. 4. **Ejecución de Módulos**: Dependiendo de la acción, se invocan módulos específicos para interactuar con APIs externas: * `sales_rag.py` para generar respuestas de ventas con IA. * `printer.py` para enviar correos de impresión. @@ -116,9 +116,9 @@ GOOGLE_SERVICE_ACCOUNT_FILE=./google_key.json * **Base de Datos**: La base de datos `users.db` se creará automáticamente si no existe. Para asignar roles, debes agregar manualmente los Telegram IDs en la tabla `users`. * **Credenciales de Google**: Coloca tu archivo de credenciales de la cuenta de servicio de Google Cloud en el directorio raíz del proyecto y renómbralo a `google_key.json`. **El archivo `.gitignore` ya está configurado para ignorar este archivo y proteger tus claves.** -* **Flujos de Conversación**: Para modificar o añadir flujos, edita los archivos JSON en `talia_bot/data/flows/`. +* **Flujos de Conversación**: Para modificar o añadir flujos, edita los archivos JSON en `bot/data/flows/`. -Asegúrate de tener los archivos y directorios base en `talia_bot/data/`: +Asegúrate de tener los archivos y directorios base en `bot/data/`: * `servicios.json`: Catálogo de servicios para el RAG de ventas. * `credentials.json`: Credenciales de Google Cloud. * `users.db`: Base de datos SQLite que almacena los roles de los usuarios. @@ -136,28 +136,37 @@ talia_bot/ ├── Dockerfile # Define el contenedor de la aplicación ├── docker-compose.yml # Orquesta el servicio del bot ├── google_key.json # (Local) Credenciales de Google Cloud +├── plan_de_pruebas.md # Casos de prueba documentados +├── README.md # Documentación principal ├── requirements.txt # Dependencias de Python -├── talia_bot/ -│ ├── main.py # Entry Point y dispatcher principal -│ ├── db.py # Gestión de la base de datos SQLite -│ ├── config.py # Carga de variables de entorno -│ ├── modules/ -│ │ ├── flow_engine.py # Motor de flujos de conversación (lee los JSON) -│ │ ├── identity.py # Lógica de Roles y Permisos -│ │ ├── llm_engine.py # Cliente OpenAI/Gemini -│ │ ├── vikunja.py # API Manager para Tareas -│ │ ├── calendar.py # Google Calendar Logic & Rules -│ │ ├── printer.py # SMTP/IMAP Loop -│ │ └── sales_rag.py # Lógica de Ventas y Servicios -│ └── data/ -│ ├── flows/ # Directorio con los flujos de conversación en JSON -│ ├── servicios.json # Base de conocimiento para ventas -│ ├── credentials.json # Credenciales de Google -│ └── users.db # Base de datos de usuarios -├── .env.example # Plantilla de variables de entorno -├── requirements.txt # Dependencias -├── Dockerfile # Configuración del contenedor -└── docker-compose.yml # Orquestador de Docker +├── start_bot.sh # Script para iniciar el bot en desarrollo +└── bot/ + ├── __init__.py # Inicializador de paquete + ├── main.py # Entry point y dispatcher principal + ├── db.py # Gestión de la base de datos SQLite + ├── config.py # Carga de variables de entorno + ├── scheduler.py # Tareas programadas y resúmenes diarios + ├── webhook_client.py # Webhooks externos (n8n, etc.) + ├── modules/ + │ ├── flow_engine.py # Motor de flujos de conversación + │ ├── identity.py # Lógica de Roles y Permisos + │ ├── llm_engine.py # Cliente OpenAI/Gemini + │ ├── vikunja.py # API Manager para tareas + │ ├── calendar.py # Google Calendar Logic & Rules + │ ├── agenda.py # Agendas y solicitudes + │ ├── printer.py # SMTP/IMAP Loop + │ ├── sales_rag.py # Lógica de Ventas y Servicios + │ ├── debug.py # Herramientas de diagnóstico + │ ├── onboarding.py # Menús y onboarding inicial + │ ├── citas.py # Solicitudes de citas + │ ├── nfc_tag.py # Wizard NFC + │ ├── aprobaciones.py # Aprobaciones y rechazos + │ └── equipo.py # Equipo y estado de solicitudes + └── data/ + ├── flows/ # Directorio con los flujos de conversación JSON + ├── servicios.json # Base de conocimiento para ventas + ├── credentials.json # Credenciales de Google + └── users.db # Base de datos de usuarios ``` --- diff --git a/talia_bot/.gitignore b/bot/.gitignore similarity index 100% rename from talia_bot/.gitignore rename to bot/.gitignore diff --git a/bot/__init__.py b/bot/__init__.py new file mode 100644 index 0000000..fa41434 --- /dev/null +++ b/bot/__init__.py @@ -0,0 +1,2 @@ +# bot/__init__.py +# Package initializer for the bot application. diff --git a/talia_bot/config.py b/bot/config.py similarity index 98% rename from talia_bot/config.py rename to bot/config.py index 0e15b72..4dace45 100644 --- a/talia_bot/config.py +++ b/bot/config.py @@ -1,4 +1,4 @@ -# talia_bot/config.py +# bot/config.py # This file loads all environment variables and bot configurations. # Environment variables are stored securely outside the code (e.g., in a .env file). diff --git a/talia_bot/data/flows/admin_block_agenda.json b/bot/data/flows/admin_block_agenda.json similarity index 100% rename from talia_bot/data/flows/admin_block_agenda.json rename to bot/data/flows/admin_block_agenda.json diff --git a/talia_bot/data/flows/admin_check_agenda.json b/bot/data/flows/admin_check_agenda.json similarity index 100% rename from talia_bot/data/flows/admin_check_agenda.json rename to bot/data/flows/admin_check_agenda.json diff --git a/talia_bot/data/flows/admin_create_nfc_tag.json b/bot/data/flows/admin_create_nfc_tag.json similarity index 100% rename from talia_bot/data/flows/admin_create_nfc_tag.json rename to bot/data/flows/admin_create_nfc_tag.json diff --git a/talia_bot/data/flows/admin_idea_capture.json b/bot/data/flows/admin_idea_capture.json similarity index 100% rename from talia_bot/data/flows/admin_idea_capture.json rename to bot/data/flows/admin_idea_capture.json diff --git a/talia_bot/data/flows/admin_print_file.json b/bot/data/flows/admin_print_file.json similarity index 100% rename from talia_bot/data/flows/admin_print_file.json rename to bot/data/flows/admin_print_file.json diff --git a/talia_bot/data/flows/admin_project_management.json b/bot/data/flows/admin_project_management.json similarity index 100% rename from talia_bot/data/flows/admin_project_management.json rename to bot/data/flows/admin_project_management.json diff --git a/talia_bot/data/flows/client_sales_funnel.json b/bot/data/flows/client_sales_funnel.json similarity index 100% rename from talia_bot/data/flows/client_sales_funnel.json rename to bot/data/flows/client_sales_funnel.json diff --git a/talia_bot/data/flows/crew_print_file.json b/bot/data/flows/crew_print_file.json similarity index 100% rename from talia_bot/data/flows/crew_print_file.json rename to bot/data/flows/crew_print_file.json diff --git a/talia_bot/data/flows/crew_propose_activity.json b/bot/data/flows/crew_propose_activity.json similarity index 100% rename from talia_bot/data/flows/crew_propose_activity.json rename to bot/data/flows/crew_propose_activity.json diff --git a/talia_bot/data/flows/crew_request_time.json b/bot/data/flows/crew_request_time.json similarity index 100% rename from talia_bot/data/flows/crew_request_time.json rename to bot/data/flows/crew_request_time.json diff --git a/talia_bot/data/flows/crew_secret_onboarding.json b/bot/data/flows/crew_secret_onboarding.json similarity index 100% rename from talia_bot/data/flows/crew_secret_onboarding.json rename to bot/data/flows/crew_secret_onboarding.json diff --git a/talia_bot/data/services.json b/bot/data/services.json similarity index 100% rename from talia_bot/data/services.json rename to bot/data/services.json diff --git a/talia_bot/db.py b/bot/db.py similarity index 99% rename from talia_bot/db.py rename to bot/db.py index 2258c17..4762a4e 100644 --- a/talia_bot/db.py +++ b/bot/db.py @@ -1,4 +1,4 @@ -# talia_bot/db.py +# bot/db.py # This module will handle the database connection and operations. import sqlite3 diff --git a/talia_bot/debug.md b/bot/debug.md similarity index 100% rename from talia_bot/debug.md rename to bot/debug.md diff --git a/talia_bot/main.py b/bot/main.py similarity index 91% rename from talia_bot/main.py rename to bot/main.py index 4b8d235..6fb5fdb 100644 --- a/talia_bot/main.py +++ b/bot/main.py @@ -1,8 +1,10 @@ -# talia_bot/main.py +# bot/main.py # Este es el archivo principal del bot. Aquí se inicia todo y se configuran los comandos. import logging import asyncio +import sys +from pathlib import Path from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup from telegram.ext import ( Application, @@ -15,27 +17,34 @@ from telegram.ext import ( TypeHandler, ) +# Ensure package imports work even if the file is executed directly +if __package__ is None: + current_dir = Path(__file__).resolve().parent + project_root = current_dir.parent + if str(project_root) not in sys.path: + sys.path.insert(0, str(project_root)) + # Importamos las configuraciones y herramientas que creamos en otros archivos -from talia_bot.config import TELEGRAM_BOT_TOKEN -from talia_bot.modules.identity import get_user_role -from talia_bot.modules.onboarding import handle_start as onboarding_handle_start -from talia_bot.modules.onboarding import get_admin_secondary_menu -from talia_bot.modules.agenda import get_agenda -from talia_bot.modules.citas import request_appointment -from talia_bot.modules.equipo import ( +from bot.config import TELEGRAM_BOT_TOKEN +from bot.modules.identity import get_user_role +from bot.modules.onboarding import handle_start as onboarding_handle_start +from bot.modules.onboarding import get_admin_secondary_menu +from bot.modules.agenda import get_agenda +from bot.modules.citas import request_appointment +from bot.modules.equipo import ( view_requests_status, ) -from talia_bot.modules.aprobaciones import view_pending, handle_approval_action -from talia_bot.modules.admin import get_system_status +from bot.modules.aprobaciones import view_pending, handle_approval_action +from bot.modules.admin import get_system_status import os -from talia_bot.modules.debug import print_handler -from talia_bot.modules.vikunja import vikunja_conv_handler, get_projects_list, get_tasks_list -from talia_bot.modules.printer import send_file_to_printer, check_print_status -from talia_bot.db import setup_database -from talia_bot.modules.flow_engine import FlowEngine -from talia_bot.modules.llm_engine import transcribe_audio +from bot.modules.debug import print_handler +from bot.modules.vikunja import vikunja_conv_handler, get_projects_list, get_tasks_list +from bot.modules.printer import send_file_to_printer, check_print_status +from bot.db import setup_database +from bot.modules.flow_engine import FlowEngine +from bot.modules.llm_engine import transcribe_audio -from talia_bot.scheduler import schedule_daily_summary +from bot.scheduler import schedule_daily_summary # Configuramos el sistema de logs para ver mensajes de estado en la consola logging.basicConfig( @@ -314,4 +323,4 @@ def main() -> None: application.run_polling() if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/talia_bot/modules/admin.py b/bot/modules/admin.py similarity index 100% rename from talia_bot/modules/admin.py rename to bot/modules/admin.py diff --git a/talia_bot/modules/agenda.py b/bot/modules/agenda.py similarity index 93% rename from talia_bot/modules/agenda.py rename to bot/modules/agenda.py index df26218..0efb731 100644 --- a/talia_bot/modules/agenda.py +++ b/bot/modules/agenda.py @@ -1,11 +1,11 @@ -# talia_bot/modules/agenda.py +# bot/modules/agenda.py # Este módulo se encarga de manejar las peticiones relacionadas con la agenda. # Permite obtener y mostrar las actividades programadas para el día. import datetime import logging -from talia_bot.modules.calendar import get_events -from talia_bot.config import WORK_GOOGLE_CALENDAR_ID, PERSONAL_GOOGLE_CALENDAR_ID +from bot.modules.calendar import get_events +from bot.config import WORK_GOOGLE_CALENDAR_ID, PERSONAL_GOOGLE_CALENDAR_ID logger = logging.getLogger(__name__) diff --git a/talia_bot/modules/aprobaciones.py b/bot/modules/aprobaciones.py similarity index 100% rename from talia_bot/modules/aprobaciones.py rename to bot/modules/aprobaciones.py diff --git a/talia_bot/modules/calendar.py b/bot/modules/calendar.py similarity index 98% rename from talia_bot/modules/calendar.py rename to bot/modules/calendar.py index 021c12c..5b0cc7a 100644 --- a/talia_bot/modules/calendar.py +++ b/bot/modules/calendar.py @@ -7,7 +7,7 @@ import logging from google.oauth2 import service_account from googleapiclient.discovery import build from googleapiclient.errors import HttpError -from talia_bot.config import GOOGLE_SERVICE_ACCOUNT_FILE, WORK_GOOGLE_CALENDAR_ID +from bot.config import GOOGLE_SERVICE_ACCOUNT_FILE, WORK_GOOGLE_CALENDAR_ID logger = logging.getLogger(__name__) diff --git a/talia_bot/modules/citas.py b/bot/modules/citas.py similarity index 92% rename from talia_bot/modules/citas.py rename to bot/modules/citas.py index f4974bb..ff315cd 100644 --- a/talia_bot/modules/citas.py +++ b/bot/modules/citas.py @@ -2,7 +2,7 @@ # Este módulo maneja la programación de citas para los clientes. # Permite a los usuarios obtener un enlace para agendar una reunión. -from talia_bot.config import CALENDLY_LINK +from bot.config import CALENDLY_LINK def request_appointment(): """ diff --git a/talia_bot/modules/debug.py b/bot/modules/debug.py similarity index 69% rename from talia_bot/modules/debug.py rename to bot/modules/debug.py index c83bd69..779a89a 100644 --- a/talia_bot/modules/debug.py +++ b/bot/modules/debug.py @@ -1,11 +1,16 @@ -# talia_bot/modules/debug.py +# bot/modules/debug.py # Este módulo permite a los administradores imprimir los detalles de configuración del bot. # Es una herramienta útil para depuración (debugging). from telegram import Update from telegram.ext import ContextTypes -from talia_bot.modules.identity import is_admin -from talia_bot.config import TIMEZONE, CALENDAR_ID, N8N_WEBHOOK_URL +from bot.modules.identity import is_admin +from bot.config import ( + TIMEZONE, + WORK_GOOGLE_CALENDAR_ID, + PERSONAL_GOOGLE_CALENDAR_ID, + N8N_WEBHOOK_URL, +) async def print_handler(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: """ @@ -21,8 +26,9 @@ async def print_handler(update: Update, context: ContextTypes.DEFAULT_TYPE) -> N config_details = ( f"**Detalles de Configuración**\n" f"Zona Horaria: `{TIMEZONE}`\n" - f"ID de Calendario: `{CALENDAR_ID}`\n" - f"URL Webhook n8n: `{N8N_WEBHOOK_URL}`\n" + f"Calendario Trabajo: `{WORK_GOOGLE_CALENDAR_ID or 'No definido'}`\n" + f"Calendario Personal: `{PERSONAL_GOOGLE_CALENDAR_ID or 'No definido'}`\n" + f"URL Webhook n8n: `{N8N_WEBHOOK_URL or 'No definido'}`\n" ) await update.message.reply_text(config_details, parse_mode='Markdown') else: diff --git a/talia_bot/modules/equipo.py b/bot/modules/equipo.py similarity index 100% rename from talia_bot/modules/equipo.py rename to bot/modules/equipo.py diff --git a/talia_bot/modules/flow_engine.py b/bot/modules/flow_engine.py similarity index 96% rename from talia_bot/modules/flow_engine.py rename to bot/modules/flow_engine.py index 455fb93..e8f62fe 100644 --- a/talia_bot/modules/flow_engine.py +++ b/bot/modules/flow_engine.py @@ -1,10 +1,10 @@ -# talia_bot/modules/flow_engine.py +# bot/modules/flow_engine.py import json import logging import os -from talia_bot.db import get_db_connection -from talia_bot.modules.sales_rag import generate_sales_pitch -from talia_bot.modules.nfc_tag import generate_nfc_tag +from bot.db import get_db_connection +from bot.modules.sales_rag import generate_sales_pitch +from bot.modules.nfc_tag import generate_nfc_tag logger = logging.getLogger(__name__) @@ -14,7 +14,7 @@ class FlowEngine: def _load_flows(self): """Loads all individual flow JSON files from the flows directory.""" - # flows_dir = 'talia_bot/data/flows' # OLD + # flows_dir = 'bot/data/flows' # OLD base_dir = os.path.dirname(os.path.abspath(__file__)) flows_dir = os.path.join(base_dir, '..', 'data', 'flows') diff --git a/talia_bot/modules/identity.py b/bot/modules/identity.py similarity index 95% rename from talia_bot/modules/identity.py rename to bot/modules/identity.py index c169c32..17981e4 100644 --- a/talia_bot/modules/identity.py +++ b/bot/modules/identity.py @@ -1,9 +1,9 @@ -# talia_bot/modules/identity.py +# bot/modules/identity.py # Este script maneja los roles y permisos de los usuarios. import logging -from talia_bot.db import get_db_connection -from talia_bot.config import ADMIN_ID +from bot.db import get_db_connection +from bot.config import ADMIN_ID logger = logging.getLogger(__name__) diff --git a/talia_bot/modules/llm_engine.py b/bot/modules/llm_engine.py similarity index 95% rename from talia_bot/modules/llm_engine.py rename to bot/modules/llm_engine.py index c8f4194..c14b2a7 100644 --- a/talia_bot/modules/llm_engine.py +++ b/bot/modules/llm_engine.py @@ -1,8 +1,8 @@ -# talia_bot/modules/llm_engine.py +# bot/modules/llm_engine.py # Este script se encarga de la comunicación con la inteligencia artificial de OpenAI. import openai -from talia_bot.config import OPENAI_API_KEY, OPENAI_MODEL +from bot.config import OPENAI_API_KEY, OPENAI_MODEL def get_smart_response(prompt): """ diff --git a/talia_bot/modules/nfc_tag.py b/bot/modules/nfc_tag.py similarity index 95% rename from talia_bot/modules/nfc_tag.py rename to bot/modules/nfc_tag.py index 1408475..bd7ffb1 100644 --- a/talia_bot/modules/nfc_tag.py +++ b/bot/modules/nfc_tag.py @@ -1,4 +1,4 @@ -# talia_bot/modules/nfc_tag.py +# bot/modules/nfc_tag.py # This module contains the logic for generating NFC tags. import base64 diff --git a/talia_bot/modules/onboarding.py b/bot/modules/onboarding.py similarity index 98% rename from talia_bot/modules/onboarding.py rename to bot/modules/onboarding.py index bd2d9d4..7a12b9d 100644 --- a/talia_bot/modules/onboarding.py +++ b/bot/modules/onboarding.py @@ -1,4 +1,4 @@ -# talia_bot/modules/onboarding.py +# bot/modules/onboarding.py # Este módulo maneja la primera interacción con el usuario (el comando /start). # Se encarga de mostrar un menú diferente según quién sea el usuario (admin, crew o cliente). diff --git a/talia_bot/modules/printer.py b/bot/modules/printer.py similarity index 97% rename from talia_bot/modules/printer.py rename to bot/modules/printer.py index f6be650..b2b2e9e 100644 --- a/talia_bot/modules/printer.py +++ b/bot/modules/printer.py @@ -1,4 +1,4 @@ -# talia_bot/modules/printer.py +# bot/modules/printer.py # This module will contain the SMTP/IMAP loop for the remote printing service. import smtplib @@ -10,7 +10,7 @@ from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders -from talia_bot.config import ( +from bot.config import ( SMTP_SERVER, SMTP_PORT, SMTP_USER, @@ -20,7 +20,7 @@ from talia_bot.config import ( IMAP_PASS, PRINTER_EMAIL, ) -from talia_bot.modules.identity import is_admin +from bot.modules.identity import is_admin logger = logging.getLogger(__name__) diff --git a/talia_bot/modules/sales_rag.py b/bot/modules/sales_rag.py similarity index 95% rename from talia_bot/modules/sales_rag.py rename to bot/modules/sales_rag.py index b439a57..0600156 100644 --- a/talia_bot/modules/sales_rag.py +++ b/bot/modules/sales_rag.py @@ -1,16 +1,16 @@ -# talia_bot/modules/sales_rag.py +# bot/modules/sales_rag.py # This module will contain the sales RAG flow for new clients. import json import logging -from talia_bot.modules.llm_engine import get_smart_response +from bot.modules.llm_engine import get_smart_response logger = logging.getLogger(__name__) def load_services_data(): """Loads the services data from the JSON file.""" try: - with open("talia_bot/data/services.json", "r", encoding="utf-8") as f: + with open("bot/data/services.json", "r", encoding="utf-8") as f: return json.load(f) except FileNotFoundError: logger.error("El archivo services.json no fue encontrado.") diff --git a/talia_bot/modules/vikunja.py b/bot/modules/vikunja.py similarity index 98% rename from talia_bot/modules/vikunja.py rename to bot/modules/vikunja.py index 6081be4..48756cd 100644 --- a/talia_bot/modules/vikunja.py +++ b/bot/modules/vikunja.py @@ -13,8 +13,8 @@ from telegram.ext import ( ContextTypes, ) -from talia_bot.config import VIKUNJA_API_URL, VIKUNJA_API_TOKEN -from talia_bot.modules.identity import is_admin +from bot.config import VIKUNJA_API_URL, VIKUNJA_API_TOKEN +from bot.modules.identity import is_admin # Configuración del logger logger = logging.getLogger(__name__) diff --git a/talia_bot/scheduler.py b/bot/scheduler.py similarity index 95% rename from talia_bot/scheduler.py rename to bot/scheduler.py index 2c4383a..ed30efe 100644 --- a/talia_bot/scheduler.py +++ b/bot/scheduler.py @@ -9,8 +9,8 @@ from datetime import time from telegram.ext import ContextTypes import pytz -from talia_bot.config import ADMIN_ID, TIMEZONE, DAILY_SUMMARY_TIME -from talia_bot.modules.agenda import get_agenda +from bot.config import ADMIN_ID, TIMEZONE, DAILY_SUMMARY_TIME +from bot.modules.agenda import get_agenda # Configuramos el registro de eventos (logging) para ver qué pasa en la consola logger = logging.getLogger(__name__) diff --git a/talia_bot/webhook_client.py b/bot/webhook_client.py similarity index 94% rename from talia_bot/webhook_client.py rename to bot/webhook_client.py index ece5004..04f0217 100644 --- a/talia_bot/webhook_client.py +++ b/bot/webhook_client.py @@ -3,7 +3,7 @@ # En este caso, se comunica con n8n. import requests -from talia_bot.config import N8N_WEBHOOK_URL, N8N_TEST_WEBHOOK_URL +from bot.config import N8N_WEBHOOK_URL, N8N_TEST_WEBHOOK_URL def send_webhook(event_data): """ diff --git a/start_bot.sh b/start_bot.sh index f592e89..a23200b 100755 --- a/start_bot.sh +++ b/start_bot.sh @@ -4,8 +4,8 @@ # Get the directory of the script DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -# Set PYTHONPATH to include the parent directory -export PYTHONPATH="$PYTHONPATH:$DIR/.." +# Ensure the project root is on PYTHONPATH so absolute imports resolve +export PYTHONPATH="$DIR:${PYTHONPATH}" -# Run the bot -python3 "$DIR/talia_bot/main.py" +# Run the bot using the package entrypoint +python3 -m bot.main