03-sep: [feature] catalogo por genero: /genero -> tipo -> genero -> 30 mas descargadas -> /torrents -> /bajar
This commit is contained in:
@@ -11,6 +11,8 @@ import requests
|
||||
# Estado por chat para la busqueda global interactiva (numero -> descarga)
|
||||
ultima_titulos = {} # chat_id -> {'query':..., 'results':[...]}
|
||||
ultimos_torrents = {} # chat_id -> {'titulo':..., 'torrents':[...]}
|
||||
flujo_genero = {} # chat_id -> 'esperando_tipo' | 'esperando_genero' | None
|
||||
flujo_genero_tipo = {} # chat_id -> 'movie' | 'series' (tipo ya elegido)
|
||||
|
||||
BASE = os.path.dirname(os.path.abspath(__file__))
|
||||
LOG = os.path.join(BASE, "bot.log")
|
||||
@@ -127,7 +129,35 @@ def mandar_youtube(url):
|
||||
def procesar(texto, chat_id):
|
||||
t = texto.lower().strip()
|
||||
log(f"RECIBIDO chat={chat_id} texto={texto!r}")
|
||||
if t in ("estado", "/estado", "status", "/status"):
|
||||
# Flujo interactivo por genero (espera numeros en pasos)
|
||||
if flujo_genero.get(chat_id) and t.isdigit():
|
||||
paso = flujo_genero[chat_id]
|
||||
if paso == "esperando_tipo":
|
||||
if t == "1":
|
||||
flujo_genero_tipo[chat_id] = "movie"
|
||||
flujo_genero[chat_id] = "esperando_genero"
|
||||
_pedir_genero(chat_id, "🎬")
|
||||
elif t == "2":
|
||||
flujo_genero_tipo[chat_id] = "series"
|
||||
flujo_genero[chat_id] = "esperando_genero"
|
||||
_pedir_genero(chat_id, "📺")
|
||||
else:
|
||||
enviar("Opción inválida. Responde <b>1</b> para Películas o <b>2</b> para Series.", chat_id)
|
||||
elif paso == "esperando_genero":
|
||||
n = int(t)
|
||||
gol = _import_global_buscar()
|
||||
if 1 <= n <= len(gol.GENEROS):
|
||||
genero = gol.GENEROS[n - 1]
|
||||
tipo = flujo_genero_tipo.get(chat_id, "movie")
|
||||
flujo_genero.pop(chat_id, None)
|
||||
flujo_genero_tipo.pop(chat_id, None)
|
||||
_mostrar_catalogo_genero(chat_id, tipo, genero, "top")
|
||||
else:
|
||||
enviar("Número de género inválido.", chat_id)
|
||||
return
|
||||
if t in ("genero", "/genero"):
|
||||
procesar_genero(chat_id)
|
||||
elif t in ("estado", "/estado", "status", "/status"):
|
||||
msg, _ = estado()
|
||||
enviar(msg, chat_id)
|
||||
elif "temperatura" in t or "temp" in t:
|
||||
@@ -216,6 +246,7 @@ def procesar(texto, chat_id):
|
||||
"<b>serie <nombre></b> — buscar serie con temporadas/capitulos\n"
|
||||
"<b>novedades</b> — ultimas novedades del catalogo\n"
|
||||
"<b>busca <nombre></b> — buscar en TODO internet (miles de pelis)\n"
|
||||
"<b>genero</b> — catálogo por género (30 más descargadas)\n"
|
||||
"<b>torrents <n></b> — ver torrents del resultado n de /busca\n"
|
||||
"<b>bajar <n></b> — descargar al NAS el torrent n de /torrents\n"
|
||||
"<b>panorama</b> — fotos de las cámaras\n"
|
||||
@@ -425,6 +456,47 @@ def procesar_busca(nombre, chat_id):
|
||||
log(f"BUSCA global '{nombre}': {len(resultados)} titulos")
|
||||
|
||||
|
||||
def procesar_genero(chat_id):
|
||||
"""Comando '/genero': inicia el flujo por genero. Pide el tipo."""
|
||||
flujo_genero[chat_id] = "esperando_tipo"
|
||||
flujo_genero_tipo.pop(chat_id, None)
|
||||
enviar("🎭 Catalogo por <b>genero</b> (30 mas descargadas). Primero elige el tipo:\n"
|
||||
"<b>1.</b> 🎬 Películas\n"
|
||||
"<b>2.</b> 📺 Series\n\nResponde el <b>1</b> o el <b>2</b>.", chat_id)
|
||||
|
||||
|
||||
def _pedir_genero(chat_id, icono):
|
||||
try:
|
||||
gol = _import_global_buscar()
|
||||
except Exception as e:
|
||||
log(f"global_buscar import error: {e}")
|
||||
enviar("❌ No se pudo cargar el modulo", chat_id)
|
||||
return
|
||||
for m in gol.formatear_generos():
|
||||
# anadimos el icono de tipo en la cabecera
|
||||
if m.startswith("🎭"):
|
||||
m = f"{icono} {m[1:]}"
|
||||
enviar(m, chat_id)
|
||||
enviar("Responde el <b>numero</b> del genero.", chat_id)
|
||||
|
||||
|
||||
def _mostrar_catalogo_genero(chat_id, tipo, genero, categoria):
|
||||
enviar(f"🔎 Consultando {genero} ({'peliculas' if tipo=='movie' else 'series'})...", chat_id)
|
||||
try:
|
||||
gol = _import_global_buscar()
|
||||
resultados = gol.catalogo_por_genero(tipo, genero, categoria, limite=30)
|
||||
mensajes = gol.formatear_catalogo(resultados, tipo, genero, categoria)
|
||||
except Exception as e:
|
||||
log(f"catalogo genero error: {e}")
|
||||
enviar(f"❌ Error consultando el catalogo: {e}", chat_id)
|
||||
return
|
||||
for m in mensajes:
|
||||
enviar(m, chat_id)
|
||||
if resultados:
|
||||
ultima_titulos[chat_id] = {"query": f"{genero} ({tipo})", "results": resultados}
|
||||
log(f"GENERO {tipo} '{genero}': {len(resultados)} titulos")
|
||||
|
||||
|
||||
def procesar_torrents(n, chat_id):
|
||||
"""Muestra los torrents (Torrentio) del titulo numero n de la ultima busqueda."""
|
||||
estado = ultima_titulos.get(chat_id)
|
||||
|
||||
Reference in New Issue
Block a user