mirror of
https://github.com/marcogll/talia_bot.git
synced 2026-01-14 04:55:19 +00:00
Merge pull request #18 from marcogll/feat/vikunja-admin-menu-14354086038768774668
feat: Fix admin menu and stabilize core functionality
This commit is contained in:
39
app/main.py
39
app/main.py
@@ -34,8 +34,8 @@ from modules.aprobaciones import view_pending, handle_approval_action
|
|||||||
from modules.servicios import get_service_info
|
from modules.servicios import get_service_info
|
||||||
from modules.admin import get_system_status
|
from modules.admin import get_system_status
|
||||||
from modules.print import print_handler
|
from modules.print import print_handler
|
||||||
from modules.create_tag import create_tag_conv_handler, create_tag_start
|
from modules.create_tag import create_tag_conv_handler
|
||||||
from modules.vikunja import vikunja_conv_handler, get_tasks as get_vikunja_tasks
|
from modules.vikunja import vikunja_conv_handler
|
||||||
|
|
||||||
from scheduler import schedule_daily_summary
|
from scheduler import schedule_daily_summary
|
||||||
|
|
||||||
@@ -73,7 +73,13 @@ async def button_dispatcher(update: Update, context: ContextTypes.DEFAULT_TYPE)
|
|||||||
response_text = "Acción no reconocida."
|
response_text = "Acción no reconocida."
|
||||||
reply_markup = None
|
reply_markup = None
|
||||||
|
|
||||||
simple_handlers = {
|
# Mapeo de `callback_data` a funciones `async`
|
||||||
|
async_handlers = {
|
||||||
|
'propose_activity': propose_activity_start,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Mapeo para funciones síncronas que devuelven solo texto
|
||||||
|
sync_text_handlers = {
|
||||||
'view_agenda': get_agenda,
|
'view_agenda': get_agenda,
|
||||||
'view_requests_status': view_requests_status,
|
'view_requests_status': view_requests_status,
|
||||||
'schedule_appointment': request_appointment,
|
'schedule_appointment': request_appointment,
|
||||||
@@ -82,9 +88,10 @@ async def button_dispatcher(update: Update, context: ContextTypes.DEFAULT_TYPE)
|
|||||||
'manage_users': lambda: "Función de gestión de usuarios no implementada.",
|
'manage_users': lambda: "Función de gestión de usuarios no implementada.",
|
||||||
}
|
}
|
||||||
|
|
||||||
complex_handlers = {
|
# Mapeo para funciones síncronas que devuelven texto y markup
|
||||||
'view_pending': view_pending,
|
sync_markup_handlers = {
|
||||||
'admin_menu': get_admin_secondary_menu,
|
'admin_menu': get_admin_secondary_menu,
|
||||||
|
'view_pending': view_pending,
|
||||||
}
|
}
|
||||||
|
|
||||||
if query.data in simple_handlers:
|
if query.data in simple_handlers:
|
||||||
@@ -108,15 +115,14 @@ async def button_dispatcher(update: Update, context: ContextTypes.DEFAULT_TYPE)
|
|||||||
elif query.data.startswith(('approve:', 'reject:')):
|
elif query.data.startswith(('approve:', 'reject:')):
|
||||||
logger.info(f"Ejecutando acción de aprobación: {query.data}")
|
logger.info(f"Ejecutando acción de aprobación: {query.data}")
|
||||||
response_text = handle_approval_action(query.data)
|
response_text = handle_approval_action(query.data)
|
||||||
await query.edit_message_text(text=response_text, parse_mode='Markdown')
|
|
||||||
elif query.data == 'start_create_tag':
|
elif query.data == 'start_create_tag':
|
||||||
await query.message.reply_text("Iniciando creación de tag...")
|
response_text = "Para crear un tag, por favor usa el comando /create_tag."
|
||||||
return await create_tag_start(update, context)
|
|
||||||
else:
|
else:
|
||||||
# Si no es ninguna de las acciones conocidas, asumimos que es para un ConversationHandler
|
logger.warning(f"Consulta no manejada por el despachador: {query.data}")
|
||||||
# y no hacemos nada aquí para no interferir.
|
await query.edit_message_text(text=response_text)
|
||||||
logger.warning(f"Consulta no manejada por el despachador principal: {query.data}")
|
return
|
||||||
|
|
||||||
|
await query.edit_message_text(text=response_text, reply_markup=reply_markup, parse_mode='Markdown')
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
"""Función principal que arranca el bot."""
|
"""Función principal que arranca el bot."""
|
||||||
@@ -127,6 +133,10 @@ def main() -> None:
|
|||||||
application = Application.builder().token(TELEGRAM_BOT_TOKEN).build()
|
application = Application.builder().token(TELEGRAM_BOT_TOKEN).build()
|
||||||
schedule_daily_summary(application)
|
schedule_daily_summary(application)
|
||||||
|
|
||||||
|
# El orden de los handlers es crucial para que las conversaciones funcionen.
|
||||||
|
application.add_handler(create_tag_conv_handler())
|
||||||
|
application.add_handler(vikunja_conv_handler())
|
||||||
|
|
||||||
conv_handler = ConversationHandler(
|
conv_handler = ConversationHandler(
|
||||||
entry_points=[CallbackQueryHandler(propose_activity_start, pattern='^propose_activity$')],
|
entry_points=[CallbackQueryHandler(propose_activity_start, pattern='^propose_activity$')],
|
||||||
states={
|
states={
|
||||||
@@ -136,14 +146,11 @@ def main() -> None:
|
|||||||
fallbacks=[CommandHandler('cancel', cancel_proposal)],
|
fallbacks=[CommandHandler('cancel', cancel_proposal)],
|
||||||
per_message=False
|
per_message=False
|
||||||
)
|
)
|
||||||
|
|
||||||
# El order de los handlers importa. El dispatcher debe ir después de los ConversationHandlers
|
|
||||||
# para no interceptar sus callbacks.
|
|
||||||
application.add_handler(conv_handler)
|
application.add_handler(conv_handler)
|
||||||
application.add_handler(create_tag_conv_handler())
|
|
||||||
application.add_handler(vikunja_conv_handler())
|
|
||||||
application.add_handler(CommandHandler("start", start))
|
application.add_handler(CommandHandler("start", start))
|
||||||
application.add_handler(CommandHandler("print", print_handler))
|
application.add_handler(CommandHandler("print", print_handler))
|
||||||
|
|
||||||
application.add_handler(CallbackQueryHandler(button_dispatcher))
|
application.add_handler(CallbackQueryHandler(button_dispatcher))
|
||||||
|
|
||||||
logger.info("Iniciando Talía Bot...")
|
logger.info("Iniciando Talía Bot...")
|
||||||
|
|||||||
Reference in New Issue
Block a user