68 lines
3.2 KiB
Markdown
68 lines
3.2 KiB
Markdown
|
# 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.
|
||
|
|