# bot_v1 — automatización de rallies/ataques (rama independiente)

Rama **separada** de V3/V4. Tiene su **propio backend + UI + agente Frida + emulador**
(`emulator-6004`, cuenta del bot). Para los **datos de monstruos** consume la **API de V3**
(`/api/data`) — no scanea por su cuenta.

## Qué hace (primer test)
1. UI simple (`http://127.0.0.1:8780`): lista de monstruos (name+level) desde V3, con
   checkbox por tipo + selector **rally/solo** + botón **Apply**.
2. Al pulsar **Apply**, el bot lanza, en los **slots libres** de la cuenta, los rallies/solos
   sobre los monstruos seleccionados (incluyendo su nivel), **ordenados por menor distancia**
   a la ciudad del bot.

## Cómo envía (mecanismo)
Reutiliza el patrón **validado** en V3 (`agent_sweep.ts` headlessJoin): construye un
`Msg.send_troop` y lo manda con `NetworkManager.SendProtobufMessage`. `general_id=0` /
`assistant=0` → el **servidor elige generales libres** y rechaza limpio si no quedan slots.

Para no adivinar los campos exactos de un "ataque solo" y un "rally de alianza", el agente
**aprende de capturas reales** (igual que V4 con `request_worldmap`):
- Pulsa **① Capturar SOLO** y haz 1 ataque solo manual → se guarda el preset `solo`.
- Pulsa **② Capturar RALLY** y abre 1 rally de alianza manual → se guarda el preset `rally`.
El bot replica ese preset (tropas/march_type/target_type) con las **coords del monstruo elegido**.

## Arranque
```bash
# 1) emulator-6004 ya booteado (clon del AVD de V3). Loguea la cuenta del bot en Evony.
# 2) compila el agente (necesita el toolchain /tmp/il2cpp_work de V3):
./build_agent.sh
# 3) lanza el backend:
./run_bot.sh
# UI: http://127.0.0.1:8780   ·   log: tail -f /tmp/bot_v1.log
```

## Ficheros
- `bot_web.py` — backend HTTP + UI + cliente API de V3 + attach del agente + lógica del bot.
- `agent_bot.ts` / `agent_bot.js` — agente Frida (captura presets + replica send_troop).
- `build_agent.sh` — compila el agente.
- `run_bot.sh` — lanza el backend (bind local 127.0.0.1 por seguridad; `BOT_BIND` para red).

## Estado / pendientes (primer test)
- [x] Emulador clonado (emulator-6004) + agente + backend + UI + consumo de API de V3.
- [ ] Loguear cuenta del bot en 6004 (manual).
- [ ] Capturar presets solo/rally (manual, 1 vez).
- [ ] Validar Apply end-to-end (solo primero, luego rally).
- [ ] Lectura real de slots libres y de la ciudad del bot (ahora: ciudad por config en UI;
      slots por `max_slots` + arbitraje del servidor con general=0).

## Notas
- **Independiente de V3**: no modifica nada de `evony-scout-v3-research`. Solo lee su API.
- Riesgo ToS/ban: enviar marchas sintéticas es manipulación de protocolo. Cuenta del bot
  desechable, uso experimental. **Nunca** compartir datos ni reportes con Evony.
