Este proyecto proporciona un motor automatizado diseñado para participar en combates dentro de la plataforma Pokémon Showdown. A continuación, se detalla la arquitectura del sistema, el flujo de ejecución y los parámetros de configuración necesarios para su despliegue.
Estructura del Repositorio
La organización de archivos está diseñada para separar la lógica del motor de combate de los datos de los equipos y las configuraciones de entorno:
- data/: Almacena recursos estáticos y datasets necesarios para la toma de decisiones del bot.
- github/workflows/: Contiene las definiciones de CI/CD para la automatización de pruebas y despliegue.
- showdown/: Núcleo del proyecto que alberga el código fuente en Python, incluyendo los algoritmos de decisión.
- teams/: Directorio destinado a los archivos de definición de equipos (exportaciones de formato Showdown).
- tests/: Suite de pruebas unitarias y de integración para validar el comportamiento del bot.
- Dockerfile: Instrucciones para la contenedorización del bot, facilitando su ejecución en entornos aislados.
- ENGINE.md: Documentación técnica específica sobre el funcionamiento interno del motor de combate.
- run.py: Script principal de entrada para iniciar la ejecución.
- config.py & constants.py: Definiciones globales y variables constantes utilizadas en todo el sistema.
- env: Archivo de configuración de variables de entorno para credenciales y parámetros operativos.
Punto de Entrada: run.py
El archivo run.py actúa como el orquestador del sistema. Su responsabilidad principle es gestionar el ciclo de vida del bot mediante las siguientes acciones:
- Carga de Entorno: Procesa el archivo
envpara establecer las credenciales de acceso y las preferencias de red. - Instanciación del Motor: Carga dinámicamente el módulo de lógica de combate especificado (por ejemplo, algoritmos basados en Nash Equilibrium o estrategias de juego seguro).
- Gestión de Conexión: Establece el enlace via WebSockets con el servidor de Pokémon Showdown y maneja el protocolo de autenticación.
- Ejecución de Tareas: Según la configuración, el bot puede buscar partidas en el "ladder", desafiar a usuarios específicos o unirse a salas de chat.
# Ejemplo conceptual de la lógica de inicialización en run.py
import os
from showdown.engine import BattleManager
def iniciar_bot():
usuario = os.getenv('PS_USERNAME')
estrategia = os.getenv('BATTLE_BOT')
manager = BattleManager(user=usuario, logic=estrategia)
manager.conectar(uri=os.getenv('WEBSOCKET_URI'))
manager.ejecutar_loop()
if __name__ == "__main__":
iniciar_bot()
Configuración del Sistema mediante Variables de Entorno
La personalización del comportamiento del bot se realiza a través del archivo env. Este enfoque permite cambiar la estrategia o la cuenta del bot sin modificar el código fuente.
| Variable | Descripción |
|---|---|
BATTLE_BOT |
Define el algoritmo de decisión (ej: safest, nash_equilibrium). |
WEBSOCKET_URI |
Dirección del servidor de Showdown (ej: wss://sim3.psim.us/showdown/websocket). |
PS_USERNAME |
Nombre de usuario de la cuenta en Pokémon Showdown. |
PS_PASSWORD |
Contraseña de la cuenta. |
BOT_MODE |
Modo de operación: SEARCH_LADDER o CHALLENGE_USER. |
POKEMON_MODE |
Formato de batalla (ej: gen8ou, gen7randombattle). |
TEAM_NAME |
Referencia al archivo del equipo ubicado en la carpeta teams/. |
Un ejemplo típico de configuración en el archivo env sería el siguiente:
BATTLE_BOT=nash_equilibrium
WEBSOCKET_URI=wss://sim3.psim.us/showdown/websocket
PS_USERNAME=Bot_Tester_01
PS_PASSWORD=mi_password_seguro
BOT_MODE=SEARCH_LADDER
POKEMON_MODE=gen8randombattle
RUN_COUNT=5
SAVE_REPLAY=True
LOG_LEVEL=INFO
Este archivo es crítico para la seguridad, por lo que se recomienda encarecidamente no incluirlo en el control de versiones si contiene credanciales reales.