Integracion Twitch + Minecraft Completa 2026 — EventSub, RCON y Channel Points

3 de Marzo, 202622 min lecturaTwitch, Node.js, RCON, API

Esta guia cubre la arquitectura completa para conectar Twitch con tu servidor Minecraft: autenticacion OAuth con Twitch API, EventSub WebSockets para escuchar channel points redeems en tiempo real, y RCON para ejecutar comandos en el servidor. Incluye codigo funcional comentado en Node.js.

Arquitectura del Sistema

Viewer redime Channel Point (Twitch)
  -> EventSub WebSocket notifica tu servidor Node.js
    -> Node.js valida el redeem
      -> RCON envia comando al servidor Minecraft
        -> Jugador ve el efecto en tiempo real

El tiempo de respuesta desde que el viewer hace clic hasta que pasa en el servidor es de 200-500ms con esta arquitectura.

Paso 1: Obtener Credenciales de Twitch API

  1. Ve a dev.twitch.tv/console
  2. Registra una nueva aplicacion. OAuth Redirect URL: http://localhost:3000/callback
  3. Guarda el Client ID y genera un Client Secret
# .env
TWITCH_CLIENT_ID=tu_client_id
TWITCH_CLIENT_SECRET=tu_client_secret
TWITCH_CHANNEL_ID=123456789  # ID numerico del canal, no el nombre
RCON_HOST=localhost
RCON_PORT=25575
RCON_PASSWORD=tu_password_rcon

Paso 2: Configurar RCON en el Servidor Minecraft

En server.properties:

enable-rcon=true
rcon.port=25575
rcon.password=tu_password_rcon_seguro
broadcast-rcon-to-ops=false

Reinicia el servidor. RCON escucha solo en localhost por defecto — no exponerlo a internet.

Paso 3: Node.js — Conexion RCON y EventSub

Instala dependencias:

npm install rcon-client @twurple/auth @twurple/eventsub-ws dotenv

Archivo principal bot.js:

import { Rcon } from 'rcon-client';
import { StaticAuthProvider } from '@twurple/auth';
import { EventSubWsListener } from '@twurple/eventsub-ws';
import 'dotenv/config';

// Conexion RCON persistente
const rcon = new Rcon({
  host: process.env.RCON_HOST,
  port: parseInt(process.env.RCON_PORT),
  password: process.env.RCON_PASSWORD,
});

await rcon.connect();
console.log('RCON conectado al servidor Minecraft');

// Mapa de channel points: titulo del redeem -> comando MC
const REDEEMS = {
  'Lluvia de Diamantes': 'give {username} diamond 5',
  'Terremoto': 'summon minecraft:tnt ~ ~ ~',
  'Dia Instantaneo': 'time set day',
  'Velocidad x2': 'effect give {username} speed 60 2 true',
  'Modo Dios': 'gamemode spectator {username}',
};

// Auth con App Token para EventSub
const authProvider = new StaticAuthProvider(
  process.env.TWITCH_CLIENT_ID,
  process.env.TWITCH_CLIENT_SECRET
);

const listener = new EventSubWsListener({ apiClient: new ApiClient({ authProvider }) });

listener.onChannelRedemptionAdd(process.env.TWITCH_CHANNEL_ID, async (e) => {
  const template = REDEEMS[e.rewardTitle];
  if (!template) return;
  
  // Buscar nombre de jugador por nombre de Twitch (requiere tu propia tabla)
  const mcPlayer = await getMinecraftPlayer(e.userName);
  if (!mcPlayer) {
    console.log(${e.userName} no tiene cuenta MC vinculada);
    return;
  }
  
  const command = template.replace('{username}', mcPlayer);
  await rcon.send(command);
  console.log([Redeem]  -> );
});

await listener.start();

Paso 4: Vincular Cuentas Twitch-Minecraft

Necesitas una tabla que conecte nombres de Twitch con UUIDs de Minecraft. Opciones:

Paso 5: Manejo de Errores y Reconexion

// RCON se desconecta si el servidor se reinicia
rcon.on('error', async (err) => {
  console.error('RCON error:', err);
  setTimeout(async () => {
    try { await rcon.connect(); }
    catch (e) { console.error('Reconexion fallida:', e); }
  }, 5000);
});

// Rate limiting: maximo 1 redeem por jugador cada 30s
const cooldowns = new Map();
function checkCooldown(user) {
  const last = cooldowns.get(user);
  if (last && Date.now() - last < 30000) return false;
  cooldowns.set(user, Date.now());
  return true;
}

Ideas de Channel Points para Minecraft

Efectos populares:

Prueba la integracion en OliveerF

Ya tenemos Twitch+MC activo en nuestro servidor. Conecta y redime channel points en directo.

Ver Hosting