opencode_tg — Bot de Telegram para OpenCode (VPS)
Bot que permite usar OpenCode desde el móvil vía Telegram. Corre en el VPS
Contabo junto a opencode serve (headless). Sin librerías extra (solo
requests), long-polling, whitelist por chat_id.
Despliegue
- Código:
/opt/opencode-tg/opencode_bot.py .env:/opt/opencode-tg/.env- Repo activo del serve:
/etc/opencode-tg/repo.env(REPO_DIR=...) - Servicios systemd:
opencode-serve.service→opencode serve --hostname 127.0.0.1 --port 4097dentro de$REPO_DIR(credenciales OPENCODE_SERVER_USERNAME/PASSWORD).opencode-tg.service→ el bot.
Para cambiar de repo el bot reinicia opencode-serve (escribe repo.env).
Cada chat conserva su sesión y modelo en estado.json.
Comandos del bot
/start /ayuda ayuda
/nueva [texto] sesión nueva (olvida el contexto)
/proyecto elegir repo de /home/Github (inline)
/modelo elegir modelo (inline)
/estado repo, sesión y modelo actuales
cualquier texto → lo ejecuta OpenCode en la sesión del chat
Entrega: texto como HTML (bloques ``` en
), ficheros creados/editados como documentos adjuntos (se leen destate.metadata.filesdel historial).PENDIENTE (único paso manual)
- Crear el bot con @BotFather y copiar el token.
- Rellenar en
/opt/opencode-tg/.env:(TELEGRAM_BOT_TOKEN=<token> TELEGRAM_CHAT_ID=<tu chat_id>TELEGRAM_CHAT_IDpuede ser una lista separada por comas.)- Arrancar:
systemctl enable --now opencode-tgAPI comprobada contra opencode 1.17.15: POST /session, POST /session/:id/message (body
parts+modelconproviderID/modelID), GET /session/:id/message, GET /config/providers, GET /global/health, GET /project.Vigilancia de salud del VPS (05-09-2026)
Tras un incidente de criptomineros en el VPS se instaló vigilancia automática:
vps_miner_watch.sh— cron*/10 * * * *: detecta y mata procesos "rojos" (ejecutable en /tmp, memfd o deleted, CPU > 80 %). Log:/root/vps_miner.log.vps_check.sh— cron17 */4 * * *: revisión completa (carga, memoria, disco, top CPU, mineros, servicios opencode/docker). Log:/root/vps_health.log.
Ambos viven en /usr/local/bin/ del VPS. Desplegar de nuevo copiándolos ahí
y (re)instalando las líneas de cron correspondientes.