Ir al contenido

Ejecución, Errores y Límites de AST

Esta página explica qué pasa cuando corre un comando AST y cómo depurarlo cuando algo falla.

  1. Un comando o evento activa la plantilla
  2. Se resuelven placeholders como &p1 y &t
  3. Se crea el contexto de ejecución con datos del usuario, canal y evento
  4. El input se tokeniza
  5. Los tokens se parsean en un AST
  6. El AST se evalúa
  7. Las variables se escriben en memoria, caché o base de datos si hace falta
  8. La salida final se renderiza y se envía al chat

Entender el orden te ayuda a depurar problemas como:

  • argumentos que no aparecen donde esperabas
  • variables faltantes
  • ramas que se ejecutan cuando no deberían
  • referencias a comandos con resultados raros
  • funciones EventSub que devuelven vacío en el chat
Patrón de ErrorSignificado
[Unknown function: name]La función no está registrada
[Loop error: invalid loop syntax]La sintaxis del bucle es inválida
[Loop error: missing loop body]Al bucle le faltan {}
[Parse error: expr]El parser no pudo entender la expresión
Usage: $(func ...)Faltan argumentos o son inválidos
PlanMáx. profundidad de anidaciónMáx. iteraciones
Free225
Premium350
Pro4100
  • profundidad máxima de recursión: 5
  • los ciclos se detectan y se frenan
  • $(delay N) soporta hasta 60 segundos

Antes de construir el comando completo, prueba una versión mínima.

Ventana de terminal
"Hello $(user)!"

Buen orden:

  1. texto plano
  2. argumentos
  3. funciones
  4. variables
  5. condicionales
  6. bucles

Si un valor de caché o base de datos puede no existir todavía, compruébalo primero:

Ventana de terminal
*(^(#wins) ? %(#wins) : "no wins yet")

Esto está mal si quieres incrementar:

Ventana de terminal
%(#wins 1)

Esto está bien:

Ventana de terminal
%(#wins *(%(#wins) + 1))

Funciones como $(cheer.amount) o $(reward.input) solo funcionan cuando el comando corre desde el tipo de evento correcto.

Si una variable # o ## expiró, volverá vacía.

&t debe ir al final. No puedes definir nuevos &pN después.

Si un bucle puede reemplazarse por una expresión directa o una referencia a otro comando, suele ser mejor la opción simple.

Los comandos que usan moderación, roles, título, juego, encuestas o triggers no deberían estar disponibles para todo el mundo.

Cuando un comando falla, hazte estas preguntas en orden:

  1. ¿Mis argumentos están bien?
  2. ¿Creé la variable antes de leerla?
  3. ¿Estoy asignando o incrementando?
  4. ¿Estoy en el contexto correcto para esa función?
  5. ¿Creé recursión o demasiada complejidad con bucles?

Construye primero la salida, y después añade los side effects.

Por ejemplo, prueba el texto y la lógica antes de añadir:

  • $(ban ...)
  • $(vip ...)
  • $(set.title ...)
  • $(start.poll ...)
  • $(trigger.send ...)

Así es mucho más fácil confirmar la lógica antes de que el comando empiece a cambiar el estado real del canal.