Curso-lenguaje-python/catch-all/06_bots_telegram/07_movie2_bot/README.md

68 lines
3.2 KiB
Markdown
Raw Permalink Normal View History

2024-07-30 00:43:20 +02:00
# QuizBot
__Basado en el repositorio de [CineMonster](https://github.com/RogueFairyStudios/CineMonster)__
Bot de Telegram con un juego basado en preguntas sobre películas. Resumen de las funcionalidades:
## **Comandos Disponibles:**
1. **`/start`**:
- **Descripción**: Inicia una nueva sesión de juego para el chat.
- **Acciones**: Crea una nueva instancia de `Session` y la almacena en `SESSIONS`. Si se encuentra una clase `Quiz` en el módulo `quiz`, la inicializa para la sesión.
2. **`/roll`**:
- **Descripción**: Lanza una pregunta de trivia sobre películas.
- **Acciones**: Llama a `show` en el objeto `Quiz` de la sesión activa. Envía una imagen de una película al chat y establece el estado del juego en "running".
3. **`/leaderboard`**:
- **Descripción**: Muestra la tabla de clasificación de los jugadores.
- **Acciones**: Envía la tabla de clasificación actual a través del `messenger`. La tabla muestra los jugadores y sus puntos.
4. **`/repeat`**:
- **Descripción**: Repite la última pregunta de trivia sobre películas.
- **Acciones**: Envía de nuevo la imagen de la película al chat junto con la pregunta sobre el título de la película.
5. **`/cut`**:
- **Descripción**: Permite que un jugador abandone el juego.
- **Acciones**: Elimina al jugador de la sesión actual y notifica al chat que el jugador ha abandonado el juego.
6. **`/stop`**:
- **Descripción**: Finaliza la sesión de juego actual.
- **Acciones**: Elimina la sesión del chat actual de `SESSIONS` y notifica al chat que el juego ha terminado.
7. **`/check_resps`**:
- **Descripción**: Verifica las respuestas enviadas por los jugadores.
- **Acciones**: Compara la respuesta del usuario con la respuesta correcta de la película y actualiza el puntaje si la respuesta es correcta.
## **Funcionalidades Adicionales:**
- **Manejo de Temporizadores**:
- Utiliza `apscheduler` para ejecutar `update_all_timers` cada minuto, lo que actualiza los temporizadores de todas las sesiones y verifica la expiración del tiempo de juego.
- **Mensajería**:
- Usa un objeto `messenger` para enviar mensajes y fotos a los usuarios en el chat, manejando la comunicación con Telegram.
- **Gestión de Jugadores**:
- Permite agregar y quitar jugadores de la sesión. Actualiza el puntaje de los jugadores en función de sus respuestas correctas.
- **Control de Estado del Juego**:
- Los estados del juego (`running`, `stopped`, `timed_out`) controlan el flujo del juego, incluyendo la verificación de respuestas y el manejo de tiempos de espera.
- **Manejo de Errores**:
- Maneja errores durante el proceso de actualización y respuesta, notificando a los usuarios en caso de problemas con la pregunta de trivia o el estado de la sesión.
## **Estructura del Código:**
1. **`Session`**:
- Maneja la lógica del juego, incluidos los jugadores, el estado de la sesión, y los temporizadores.
2. **`Quiz`**:
- Se encarga de la lógica relacionada con las preguntas sobre películas, incluida la selección de una película al azar y la verificación de las respuestas.
3. **`Server`**:
- Configura el bot de Telegram, maneja los comandos y los eventos, y gestiona las sesiones de juego.