0. Orientación rápida
¿Qué es este editor?
El editor Event Flow es la capa de automatización avanzada de Social Stream Ninja. Se sitúa por encima de los interruptores sencillos de la ventana emergente y permite programar tu propia lógica de enrutamiento. Utilízalo cuando necesites:
- Retransmite chat entre servicios con filtros (por ejemplo, de Twitch a Discord, bloqueando comandos).
- Crea comandos basados en fidelidad, juegos de palabras clave o condiciones de sorteos con lógica AND/OR/NOT.
- Activa superposiciones personalizadas, audio, escenas de OBS o webhooks a partir de datos que amplíes en el flujo.
- Combina varias plataformas en una sola automatización (Kick + Twitch + YouTube a través de un flujo).
La ventana emergente ofrece ajustes rápidos y Event Flow proporciona las herramientas para flujos personalizados.
Inicio y conceptos básicos
- Abre el editor Event Flow desde el menú del panel principal (escritorio o extensión).
- Cada proyecto se guarda localmente hasta exportarlo. Utiliza
Exportpara guardar una copia o compartir. - Trabaja dentro de lienzos llamados flujos. Cada flujo puede suscribirse a varias plataformas a la vez.
Resumen de nodos
- Entradas (puertos izquierdos) esperan el contexto del mensaje.
- Salidas (puertos derechos) emiten el mismo contexto más los cambios.
- Los nodos lógicos pueden emitir el canal
truey un canal opcionalfalse.
Estructura de los datos
Cada mensaje lleva un objeto JSON. Las claves obligatorias siguen docs/event-reference.html (platform, type, chatname, chatmessage, etc.). Añade datos personalizados en meta.
Cada flujo empieza con un activador
Los nodos de acción (verdes) nunca se ejecutan solos: solo se activan cuando un nodo activador (azul) anterior devuelve true. Un flujo formado solo por acciones encadenadas parece válido, pero permanece inactivo porque nada inicia la cadena. Los nombres de los nodos describen lo que el nodo hace, no cuándo ocurre: Destacar mensaje (Feature Message) destaca un mensaje cuando el flujo llega a él; no se activa cuando destacas un mensaje en otro lugar.
Superposición Flow Actions (salida de acciones)
Elige Donación: celebración + voz para una animación preparada y un clip sintético de agradecimiento, o la plantilla avanzada Donación: animación + sonido + filtro de OBS . Las nuevas plantillas de alertas empiezan desactivadas para que puedas configurarlas y probarlas primero. Para la plantilla de OBS, elige una fuente y el mismo filtro normalmente desactivado en ambas acciones de filtro.
Reproducir clip de audio (Play Audio Clip) y Multi-Alerts ahora comparten una biblioteca de 17 sonidos: aplausos, redoble, barrido, caja registradora y otros efectos, cuatro frases sintéticas en inglés etiquetadas y sonidos sencillos. Escuchar / Detener previsualiza localmente con un estado de reproducción visible. También puedes subir una grabación o elegir un archivo local de la aplicación. Para nombres o mensajes variables, utiliza la acción existente Leer texto (Speak Text) .
Event Flow reproduce mediante la fuente de navegador Flow Actions ; Multi-Alerts reproduce mediante su propia fuente. Mantén el sonido activado solo en una para el mismo evento y evita reproducirlo dos veces. Usa Tab para seleccionar un nodo y pulsa Intro o Espacio para editar sus propiedades.
Nodos como Reproducir clip de audio (Play Audio Clip), Mostrar superposición multimedia (Display Media Overlay), y los controles de OBS necesitan una página donde mostrarse. Esa página es la superposición Flow Actions servida desde actions.html. Mantenla en ejecución en tu programa de transmisión (OBS, paneles de navegador de Streamer.bot, etc.) para que las acciones de Event Flow tengan dónde aparecer.
- Abre la ventana emergente principal de Social Stream Ninja (la ventana cargada desde popup.html o el icono de la extensión).
- Desplázate hasta la tarjeta «Flow Actions». Utiliza el botón [copiar enlace] o haz clic en la URL dentro de la tarjeta.
- El enlace tiene un aspecto como
https://socialstream.ninja/actions.html?session=YOURSESSION. Pégalo en una fuente de navegador de OBS (se sugiere 1920×1080) o ábrelo en cualquier navegador de superposiciones.
- En una acción Reproducir clip de audio o Mostrar superposición multimedia, haz clic en Elegir archivo local (Choose Local File).
- Haz clic en Copiar URL local de Flow Actions para OBS y utiliza esa URL localhost generada en lugar de la URL alojada de Flow Actions.
- Mantén SSApp en ejecución. Si un archivo seleccionado cambia de ubicación, vuelve a la acción y haz clic en Volver a vincular (Relink).
La extensión de Chrome no puede servir archivos del disco por sí sola. Utiliza Subir o una URL alojada cuando no haya una aplicación de escritorio auxiliar. Consulta la guía de archivos multimedia para Event Flow para la configuración completa.
Una vez cargada, esa superposición puede:
- Mostrar GIPHY o URL directas de medios, texto y confeti activados por tus flujos.
- Reproducir sonidos (TTS, clips de audio) localmente para que los espectadores los escuchen.
- Comunicarse con OBS mediante los ajustes WebSocket de la sección Flow Actions de la ventana emergente (cambio de escenas, alternancia de fuentes, actualizaciones de texto GDI+/FreeType, búfer de repetición, etc.).
- API de fuente de navegador: disponible solo cuando
actions.htmlse ejecuta dentro de una fuente de navegador de OBS con Nivel de acceso avanzado. Aquí funciona el cambio de escenas, y las acciones de grabación, transmisión y búfer de repetición pueden utilizarlo como alternativa. - OBS WebSocket: recomendado para un control coherente. Flow Actions de Social Stream Ninja utiliza la API OBS WebSocket v5 de OBS 28 o posterior y espera el conjunto moderno de solicitudes en el puerto
4455. - Contraseña: opcional. Añade únicamente
&obspw=...a la URL de Flow Actions si tu servidor OBS está configurado para requerir autenticación. - Diagnóstico de la superposición: añade
&obsdebug=1a la URL deactions.htmlsi quieres una pequeña insignia de conexión en vivo de OBS en la superposición mientras resuelves problemas. - Establecer fuente de texto: actualiza directamente entradas Texto (GDI+) y Texto (FreeType 2) de OBS y admite variables de plantilla de Event Flow como
{counterValue}y{counterTarget}. - Instalaciones antiguas 4.x: si todavía utilizas obs-websocket 4.x / puerto
4444, las acciones de fuentes, filtros, silencio y texto no funcionarán hasta actualizar OBS/obs-websocket.
Consulta la guía específica Guía de control de OBS para todos los activadores, acciones, pasos de configuración y recetas probadas.
- Abrir obs-websocket-test.html.
- Confirma que
GetVersion,GetCurrentProgramScene, yGetSceneListse cumplen. - Realiza allí la comprobación de la acción correspondiente antes de probar la automatización completa de Event Flow.
1. ¿Qué pasa por un nodo?
El motor de Event Flow transmite dos cosas por cada cable:
- Datos del evento – el objeto de datos del evento o mensaje.
- Señal de puerta – un bit true/false que indica al siguiente nodo si debe ejecutarse.
false de un nodo Condición). Así puedes crear fácilmente lógica alternativa sin duplicar flujos enteros.
Requisitos de entrada
- Fuentes de eventos (Mensaje de Twitch, Temporizadores, Activador manual, etc.) ignoran las entradas previas: generan sus propios datos y siempre emiten
truesalvo que el propio nodo produzca un error. - Nodos de transformación y lógica leen los datos y pueden reescribir campos, establecer estado o cambiar la señal de puerta a
false. - Nodos de acción se activan solo mientras la puerta siga en
true. También pueden emitir datos actualizados si quieres seguir encadenando acciones.
Patrones de salida
Salida única
La mayoría de los nodos tienen una salida. Lo que entra (datos + puerta) sale sin cambios salvo que el nodo lo modifique.
Salidas True/False
Los nodos Condición, Comparar, Regex y Lógica tienen dos puertos de salida. Verdadero continúa por el puerto verde; false aparece en el puerto gris/rojo.
Transmitir sin cambios o sustituir
Algunos nodos (Establecer variable, Matemáticas, Sustituir texto) modifican los datos, pero siguen transmitiendo el estado true/false de su entrada. Otros (NOT, AND, OR) recalculan el booleano.
2. Referencia rápida de nodos lógicos
Estos bloques responden a las preguntas más habituales sobre qué significa true/false.
NOT
- Entradas: 1 booleano (true/false) derivado del nodo anterior.
- Salidas: el booleano invertido y los datos sin modificar.
- Comportamiento predeterminado: Si no hay nada conectado a la entrada NOT, se evalúa como
false, así que la salida estrue.
AND
- Entradas: dos o más señales booleanas (A, B, ...). Puedes dejar puertos adicionales vacíos.
- Salidas:
truesolo si todas las entradas conectadas son iguales atrue. - Utiliza AND cuando varias condiciones deban cumplirse a la vez («es suscriptor» y «el mensaje de chat contiene !raffle»).
OR
- Emite
truesi cualquier entrada conectada es verdadera. - Útil para activadores multiplataforma: conecta nodos de mensajes de Twitch y YouTube a un único OR y unifica la acción posterior.
No. Muchos nodos ya proporcionan filtros combinados (por ejemplo, «Filtrar nivel de usuario» + «Contiene texto»). Utiliza AND solo cuando las opciones integradas no cubran tu combinación o cuando quieras un punto lógico reutilizable que compartan otras ramas.
true. Mantenlo conectado a algo pertinente o desactiva el nodo para que no desbloquee accidentalmente un flujo.
3. Ejemplos de microflujos
A. Responder automáticamente salvo que el mensaje sea un comando
Aquí el nodo Regex emite true cuando el mensaje es un comando. Dirigimos el puerto false a nuestra respuesta, para que los participantes normales reciban un agradecimiento mientras los comandos simplemente pasan.
B. Exigir varias comprobaciones con AND
El nodo AND garantiza que solo los miembros que utilicen la palabra clave correcta se retransmitan a Discord. Ambas ramas envían su resultado booleano al nodo AND; los datos de la primera rama continúan hacia los nodos siguientes.
C. Nodo NOT para bloquear alertas repetidas
State Check emite el valor true cuando la alerta está silenciada. Al invertir ese resultado, NOT garantiza que solo reproduzcamos la celebración cuando el indicador sea false.
D. Reproducir aleatoriamente uno de dos sonidos
La puerta AND no es opcional. Un NOT aislado emitiría true siempre que la puerta RANDOM esté inactiva, así que el sonido B se reproduciría con cada mensaje de chat que no coincida con tu activador. Conectar el activador a AND como segunda entrada limita el sonido B a mensajes coincidentes. El mismo patrón funciona para cualquier pareja de acciones alternativas, no solo audio.
4. Evitar ecos, bucles y realimentación de retransmisiones
Retransmitir chat entre entornos es potente, pero puede crear ecos infinitos si escuchas tu propia salida. Sigue estas precauciones:
Tanto los activadores entrantes como los destinos salientes de Retransmitir chat distinguen entre
youtube y youtubeshorts. Utiliza dos acciones de retransmisión cuando un mensaje deba llegar a ambas variantes. Consulta YouTube Shorts y Event Flow.
Un reflejo es un mensaje saliente capturado de nuevo desde un chat de destino. Las acciones actuales Retransmitir chat omiten esos reflejos reconocidos; no hay una casilla independiente Sin reflejos. Para ocultar o limitar su visualización en el panel y las superposiciones, utiliza una acción Filtro de ecos (Reflection Filter) con Bloquear todos (Block All), Permitir el primero (Allow First), o Permitir todos (Allow All). Esto controla la visualización al volver a recibir el mensaje, no su envío. Sigue el Tutorial de retransmisión de Twitch y YouTube para una configuración completa.
- Evita sistemas de retransmisión duplicados. Desactiva Retransmitir todo global cuando utilices rutas equivalentes de Event Flow y comprueba si otros servicios conectan los mismos chats. No se garantiza que los metadatos personalizados sobrevivan al pasar por un chat de plataforma.
- Utiliza nodos Debounce o Cooldown para alertas que solo deban activarse una vez cada X segundos.
- Rompe los ciclos deliberadamente. Si dos ramas se alimentan entre sí, añade un nodo lógico que compruebe una variable de estado («currentlyRelaying») para que el flujo termine antes cuando el indicador esté activo.
5. Entradas, salidas y preguntas prácticas
¿Qué entra en un nodo?
- Los datos completos del mensaje.
- El valor de puerta (
true/false). - Contexto opcional (variables de estado, temporizadores) que el nodo solicite explícitamente.
¿Qué sale de un nodo?
- Los mismos datos salvo que el nodo los modifique.
- Un valor de puerta recalculado (nodos lógicos) o transmitido sin cambios (acciones).
- La mayoría de los efectos, como enviar chat, no modifican los datos, pero las acciones de puntos pueden añadir campos de estado como
pointsTotalopointsSpendErrorpara la lógica posterior.
¿Cuándo crear ramas?
Siempre que quieras reaccionar de manera distinta a true frente a false. Arrastra un cable desde la salida de color que necesites (verde = verdadero, gris/rojo = falso) al siguiente nodo.
false , el flujo simplemente termina ahí. Es ideal para filtros («bloquear todo lo que no pase la comprobación»), pero no olvides conectar la ruta false si necesitas alternativas.
Preguntas y respuestas habituales
- ¿Tengo que utilizar AND para cada par de filtros? No. Muchos nodos incluyen varias comprobaciones (por ejemplo, el filtro básico de mensajes admite palabra clave + rol). Utiliza AND solo para combinaciones avanzadas o al unir señales de distintos nodos.
- ¿Cómo llegan los valores true/false al nodo NOT? Cualquier nodo con una salida verde emite
truede forma predeterminada. Cuando una condición falla, emitefalse. Conecta ese cable a NOT para invertir el resultado. - ¿Puede un nodo emitir datos aunque devuelva false? Sí. Los datos siguen viajando por la salida false; tú decides adónde debe ir esa rama.
- ¿Cómo identifico a los miembros del equipo de TikTok? Elige Miembro del equipo de TikTok (TikTok Team Member) en el nodo Rol de usuario. Reconoce niveles e insignias del club de fans/equipo de TikTok en el mensaje entrante y no depende de los ajustes de la superposición principal de chat.
- ¿Puede cada nodo Leer texto utilizar una voz distinta? Sí. Introduce un nombre o ID de voz compatible con el proveedor en Voz alternativa (Voice Override), o déjalo vacío para usar la voz TTS predeterminada de Flow Actions.
6. Referencia de variables de plantilla
Varios nodos de acción (Mostrar texto, Establecer fuente de texto, Enviar mensaje, Retransmitir chat, Leer TTS, Llamar webhook e Imprimir etiqueta térmica) admiten variables de plantilla que se sustituyen por datos del evento durante la ejecución. Encierra los nombres de variables entre llaves, como {username}.
Variables principales (compatibles con versiones anteriores)
| Variable | Alias | Descripción | Ejemplo |
|---|---|---|---|
{username} | {chatname} | Nombre visible del usuario | CoolViewer123 |
{message} | {chatmessage} | Texto del mensaje de chat | ¡Hola a todos! |
{source} | - | Nombre de la plataforma (con mayúscula inicial) | Twitch, YouTube |
{type} | - | Nombre de la plataforma (original) | twitch, youtube |
{donation} | {hasDonation} | Etiqueta visible de donación/propina | 5,00 USD, 500 bits |
Variables ampliadas
| Variable | Descripción | Ejemplo |
|---|---|---|
{displayname} | Nombre visible (campo alternativo) | CoolViewer123 |
{donoValue} | Equivalente de donación en USD, proporcionado o estimado; Event Flow deriva los valores de umbral de etiquetas normalizadas hasDonation como valor, $valor, valor + unidad o unidad/valor compacto. Las unidades virtuales de nombre desconocido utilizan 100 unidades = 0,01 USD; los regalos de TikTok sin precio utilizan una moneda por regalo (0,01 USD cada uno). {donationAmount} es un alias antiguo | 5.00 |
{event} | Identificador del tipo de evento | cheer, raid, new_follower |
{membership} | Estado de membresía | MEMBERSHIP, new_sponsor |
{subtitle} | Contexto adicional | Miembro desde hace 3 meses |
{userid} | ID del usuario en la plataforma | 12345678 |
{chatimg} | URL del avatar del usuario | https://... |
{contentimg} | URL de imagen adjunta | https://... |
{rewardTitle} | Nombre de la recompensa cuando la fuente ofrece un campo de título de recompensa de primer nivel | Destacar mi mensaje (Highlight My Message) |
{meta} | Datos estructurados del evento (JSON) | {"viewers":100} |
{counterValue} | Valor actual del contador después de un paso Contador o Comprobar contador | 12 |
{counterTarget} | Valor objetivo del contador | 30 |
{counterRemaining} | Objetivo del contador menos el valor actual, con mínimo de 0 | 18 |
{USERNAME}, {Username}, y {username} funcionan todos igual.
Check Counter ofrece {counterValue}, {counterTarget}, y {counterRemaining}.
Plantillas de ejemplo
- Mostrar texto:
{username} just cheered {hasDonation}! - Establecer fuente de texto de OBS:
{username}: now {counterValue}, need {counterTarget} - Retransmitir chat:
[{source}] {username}: {message} - TTS:
{username} says {message} - Alerta de donación:
{username} donated {donation} - {subtitle} - Etiqueta térmica:
{username}, una nueva línea y luego{donation}. Consulta la Guía de impresoras térmicas para configurar la impresora, etiquetas de tamaño fijo y un flujo completo. - Llamar webhook de Discord:
{"content":"{message}","username":"{username}","avatar_url":"{chatimg}"}
{donation} en un mensaje normal de chat), el marcador se sustituye por una cadena vacía en lugar de mostrar el texto literal {donation} .
7. Lista de buenas prácticas
- Pon nombre y color a tus nodos para que en el futuro sepas qué hace cada rama.
- Prueba con el simulador integrado (Enviar evento de prueba) antes de activar un flujo en vivo.
- Agrupa la lógica cerca de la fuente. Filtra lo antes posible para evitar procesamiento adicional más adelante.
- Registra repeticiones en nodos de estado. Utiliza contadores, interruptores y fechas y horas para evitar alertas duplicadas.
- Documenta los campos de meta. Cuando añadas claves personalizadas de
meta, documéntalas para mantener coherentes las superposiciones y los clientes remotos.
8. Más posibilidades
Ejecutar flujos personalizados desde Stream Deck o la API: activadores con nombre, plantilla inicial, descubrimiento de flujos, datos adicionales, ejemplos HTTP/WebSocket/P2P y gestos de diales.
¿Quieres profundizar?
- Usa Nodos de estado (contadores, interruptores, temporizadores) para mantener contexto entre eventos.
- Combina Variables + lógica para crear sistemas de colas, sorteos o motores de puntuación.
- Conéctate al sistema Puntos y recompensas para que los espectadores puedan activar flujos intencionalmente.
- ¿Utilizas la aplicación de escritorio SSApp? Desbloquear Nodos de JavaScript personalizado para lógica arbitraria que no cubra ningún nodo integrado.
- Consulta la Referencia de eventos para documentación detallada de los datos de todas las plataformas.
Esta guía es independiente de forma intencional: cópiala localmente, adáptala a tu equipo y sigue experimentando en el editor.
9. JavaScript personalizado Solo SSApp / escritorio
Dos nodos del editor Event Flow permiten escribir JavaScript arbitrario que se ejecuta dentro del flujo: Código personalizado (Custom Code) (activador) y Ejecutar código personalizado (Execute Custom Code) (acción). Son la alternativa para lo que no se puede expresar con los nodos integrados.
new Function() / eval(). Abre el editor mediante la aplicación de escritorio SSApp para activarlos. En modo extensión, los nodos aparecen atenuados con la etiqueta «Solo escritorio».
Ctrl+S o Cmd+S hace lo mismo. Cancelar deja el nodo sin cambios.
Código personalizado: nodo activador
Arrastra Código personalizado (Custom Code) desde el grupo Avanzado del panel Disparadores al lienzo. Actúa como una puerta: el flujo continúa solo cuando tu código devuelve true.
true o false.function(message) { ... }Debe devolver: un booleano:
true para permitir que continúe el flujo, false para detenerlo.Disponible: el objeto
message (consulta API de mensajes abajo), además de convertCurrency(value, targetCurrency, source) y convertToUSD(value, source).
Ejecutar código personalizado: nodo de acción
Arrastra Ejecutar código personalizado (Execute Custom Code) desde el grupo Integraciones del panel Acciones . Puede modificar el mensaje, bloquearlo o añadir metadatos que lean los nodos posteriores.
function(message, result) { ... }Debería devolver: un objeto o una Promise que se incorpora a
result— consulta API de resultados.Disponible:
message (los datos del evento), result (estado actual del resultado del flujo), printThermal(html, options), además de convertCurrency(value, targetCurrency, source) y convertToUSD(value, source).
printThermal('<strong>' + message.chatname + '</strong>'). SSApp pone el trabajo en cola silenciosamente mediante la API nativa de impresoras de Windows y utiliza esos ajustes guardados. Un flujo puede sustituirlos con opciones como { width: '58mm', marginLeft: '3mm', marginRight: '3mm', marginTop: '2mm', marginBottom: '2mm', feed: '3mm', marginType: 'printableArea' }. Devolver la Promise permite que Event Flow espere el envío e informe de errores.
El objeto message
Ambos nodos reciben los datos completos del evento como message. Los campos siguientes siempre están disponibles; los eventos específicos de plataformas pueden incluir otros.
| Campo | Tipo de datos | Descripción | Ejemplo |
|---|---|---|---|
message.chatmessage | cadena | El texto del mensaje de chat (puede contener HTML) | "Hello stream!" |
message.chatname | cadena | Nombre visible del remitente | "CoolViewer" |
message.userid | cadena | ID de usuario de la plataforma | "12345678" |
message.type | cadena | Plataforma de origen (minúsculas) | "twitch", "youtube", "kick" |
message.hasDonation | cadena | Cadena de donación formateada, si existe | "$5.00", "500 bits" |
message.donoValue | número / cadena | Equivalente de donación en USD cuando lo proporciona la fuente; se respetan los valores cero válidos. Event Flow utiliza como alternativa currency.js para convertir etiquetas normalizadas de hasDonation para comparar umbrales, incluidas 100 unidades de nombre desconocido = 0,01 USD. No interpreta el texto libre de chatmessage para los valores de donación. | 5 |
message.event | cadena | Identificador del tipo de evento | "new_follower", "cheer", "raid" |
message.membership | cadena | Estado de membresía cuando corresponda | "MEMBERSHIP" |
message.subtitle | cadena | Línea secundaria de contexto | "Member for 3 months" |
message.mod | booleano | El remitente es moderador | true |
message.subscriber | booleano | El remitente es suscriptor | true |
message.vip | booleano | El remitente tiene estado VIP | true |
message.chatimg | cadena | URL del avatar del usuario | "https://..." |
message.meta | objeto | Datos estructurados arbitrarios adjuntos al evento | { viewers: 120 } |
convertCurrency(message.hasDonation, 'EUR', message.type) para convertir la etiqueta formateada de donación a EUR. Devuelve un número o null cuando la moneda de destino solicitada no es compatible. El conversor utiliza los tipos internos aproximados de Social Stream Ninja; no consulta un servicio externo de cambio.
Qué devuelve la acción
Devuelve un objeto simple desde el código de tu acción. Los campos que incluyas se incorporan al objeto result ; los campos que omitas conservan sus valores actuales.
| Campo devuelto | Tipo de datos | Efecto |
|---|---|---|
modified | booleano | Configura true si cambiaste campos de message . Indica a los nodos posteriores que se han modificado los datos. |
message | objeto | Devuelve el mensaje, posiblemente modificado, para que los nodos posteriores reciban tus cambios. |
blocked | booleano | Configura true para impedir que el mensaje se muestre o retransmita. |
return { modified: false, message };Aunque no hayas cambiado nada, devolver
message permite que continúe al siguiente nodo.
Ejemplos de fragmentos
Copia cualquiera de estos fragmentos en el área Código JavaScript del tipo de nodo correspondiente.
Fragmentos de activadores: devuelve true para continuar el flujo
!queue, !raffle, !enter).Fragmentos de acciones: devuelve { modified, message }
{meta}).Ejemplo completo: bot de solicitudes de funciones para VIP
Este flujo escucha !feature <text> de suscriptores, VIP o moderadores, lo reformatea como una solicitud de una función y lo retransmite a un segundo destino (por ejemplo, Discord).
Paso 1: activador Código personalizado (pégalo en el campo Código JavaScript del activador):
Paso 2: acción Ejecutar código personalizado (pégalo en el campo Código JavaScript de la acción):
Paso 3: acción Retransmitir chat: añade un nodo normal Retransmitir chat después de la acción y configúralo para tu destino de Discord u otro. Aquí no necesitas código personalizado; el valor reformateado de message.chatmessage pasa automáticamente.
!feature dark mode support, y confirma que el destino de Retransmitir chat reciba la cadena reformateada.
Consideraciones de seguridad
window y cualquier API que exponga el script de precarga (p. ej., window.ninjafy). Trata los archivos de flujos importados como código ejecutable: importa únicamente flujos de fuentes de confianza.
- Sin aislamiento de red. El código de acción puede llamar a
fetch(). Si aceptas flujos compartidos por otras personas, revisa el JavaScript antes de activarlos. - Los errores se capturan. Un error de ejecución en tu código devuelve
false(activador) o no hace nada (acción), y registra el error en la consola de DevTools; el flujo no se bloquea. - También los errores de sintaxis. Un error de tipo
SyntaxErrordurante la compilación se captura del mismo modo. Comprueba DevTools (F12) si parece que un nodo no hace nada.