@@ -29,53 +29,44 @@ async def joder(update: Update, context: ContextTypes.DEFAULT_TYPE):
2929 logger .error (f"Failed to send joder message: { e } " )
3030 await update .message .reply_text (f"Error al enviar el mensaje: { e } " )
3131
32+ import math
33+
34+ def get_movergrupo_keyboard (session , page : int = 0 , items_per_page : int = 10 ):
35+ from models import Listable
36+ groups = session .query (Listable ).filter_by (validated = True ).order_by (Listable .name ).all ()
37+ total_pages = math .ceil (len (groups ) / items_per_page )
38+
39+ start_idx = page * items_per_page
40+ end_idx = start_idx + items_per_page
41+ page_groups = groups [start_idx :end_idx ]
42+
43+ keyboard = []
44+ for g in page_groups :
45+ keyboard .append ([InlineKeyboardButton (f"{ g .name } ({ g .type } )" , callback_data = f"MoverGrupo|Select|{ g .id } " )])
46+
47+ nav_row = []
48+ if page > 0 :
49+ nav_row .append (InlineKeyboardButton ("⬅️ Anterior" , callback_data = f"MoverGrupo|Page|{ page - 1 } " ))
50+ if page < total_pages - 1 :
51+ nav_row .append (InlineKeyboardButton ("Siguiente ➡️" , callback_data = f"MoverGrupo|Page|{ page + 1 } " ))
52+
53+ if nav_row :
54+ keyboard .append (nav_row )
55+
56+ keyboard .append ([InlineKeyboardButton ("❌ Cancelar" , callback_data = "MoverGrupo|Cancel|0" )])
57+ return InlineKeyboardMarkup (keyboard )
58+
3259async def movergrupo (update : Update , context : ContextTypes .DEFAULT_TYPE ):
3360 user_id = update .effective_user .id
3461 if user_id not in admin_ids and str (user_id ) not in admin_ids :
3562 logger .warning (f"Unauthorized user { user_id } tried to access /movergrupo" )
3663 return
3764
38- if not context .args :
39- await update .message .reply_text ("Uso: /movergrupo <nombre exacto del grupo>" )
40- return
41-
42- name = " " .join (context .args )
4365 with get_session () as session :
44- from models import Listable
45- groups = session .query (Listable ).filter (Listable .name .ilike (f"%{ name } %" )).all ()
46-
47- if not groups :
48- await update .message .reply_text ("No se encontró ningún grupo con ese nombre." )
49- return
50-
51- if len (groups ) > 1 :
52- names = "\n " .join ([f"- { g .name } ({ g .type } )" for g in groups ])
53- await update .message .reply_text (f"Se encontraron múltiples grupos:\n { names } \n \n Por favor, sé más específico." )
54- return
55-
56- group = groups [0 ]
57-
58- keyboard = [
59- [
60- InlineKeyboardButton ("Grupo (Oblig.)" , callback_data = f"MoverGrupo|{ group .id } |Grupo" ),
61- InlineKeyboardButton ("GrupoOptativa" , callback_data = f"MoverGrupo|{ group .id } |GrupoOptativa" ),
62- InlineKeyboardButton ("ECI" , callback_data = f"MoverGrupo|{ group .id } |ECI" )
63- ],
64- [
65- InlineKeyboardButton ("Otro" , callback_data = f"MoverGrupo|{ group .id } |Otro" ),
66- InlineKeyboardButton ("GrupoOtros" , callback_data = f"MoverGrupo|{ group .id } |GrupoOtros" ),
67- InlineKeyboardButton ("Obligatoria (viejo)" , callback_data = f"MoverGrupo|{ group .id } |Obligatoria" ),
68- ],
69- [
70- InlineKeyboardButton ("Optativa (viejo)" , callback_data = f"MoverGrupo|{ group .id } |Optativa" ),
71- InlineKeyboardButton ("Cancelar" , callback_data = f"MoverGrupo|{ group .id } |Cancelar" )
72- ]
73- ]
74- reply_markup = InlineKeyboardMarkup (keyboard )
66+ reply_markup = get_movergrupo_keyboard (session , page = 0 )
7567 await update .message .reply_text (
76- f"Seleccioná la nueva categoría para el grupo:\n \n *Nombre:* { group .name } \n *Categoría Actual:* { group .type } " ,
77- reply_markup = reply_markup ,
78- parse_mode = ParseMode .MARKDOWN
68+ "Seleccioná el grupo que querés recategorizar:" ,
69+ reply_markup = reply_markup
7970 )
8071
8172async def checodepers (update : Update , context : ContextTypes .DEFAULT_TYPE ):
0 commit comments