Ir a la guía

Documentación 9.6.24

Integración con Discord

Usa las integraciones disponibles en el panel instalado.

Webhook#

Crea el webhook en el canal correcto y guarda la URL en los ajustes. Mantén URL y token en secreto. Envía una prueba controlada antes de activar avisos.

Permisos#

Concede solo permisos necesarios. Revisa canal, token y respuesta del proveedor si falla. Renueva tokens expuestos y ocúltalos en registros y capturas.

Separe las tres integraciones#

Ajustes → Integraciones tiene campos separados para URL de webhook, token de bot y credenciales OAuth. Sirven para notificaciones, identidad del bot e inicio de sesión. Un webhook activo no confirma comandos ni OAuth.

Mantenga webhook, token y secreto del cliente privados. La invitación pública de la comunidad es diferente: no coloque un webhook secreto en el campo de invitación del sitio.

Compruebe las notificaciones con control#

Elija un canal adecuado para el personal y revise el acceso antes de enviar información de jugadores.

  1. Cree un webhook propio con la guía oficial y guarde la dirección completa.
  2. Revise URLs cortadas, espacios o valores antiguos de otro canal.
  3. Use una función de prueba existente o un evento normal seguro; no banee jugadores ni realice pagos de prueba.
  4. Compruebe canal, hora y contenido. Investigue el flujo que falla sin repetir continuamente el mismo evento.

Bot, OAuth y secretos expuestos#

Conceda al bot solo los permisos necesarios. Guardar un token no configura por sí solo su ejecución ni todos los comandos. Para OAuth, guarde ID y secreto en campos distintos y haga coincidir la redirección con la integración instalada.

Pruebe el acceso en otra sesión manteniendo una sesión administrativa disponible. Informe a soporte del flujo concreto, hora y error sin secretos.

Si un token o webhook se publicó, reemplácelo con el proveedor, actualice el panel y revise otras instalaciones que lo usaban. Verifique de nuevo el flujo normal y oculte los secretos en capturas.

Siga una notificación ausente desde el evento hasta el canal#

Si falta un mensaje de Discord, confirme primero que ocurrió el evento esperado y que su integración está configurada. Una dirección webhook guardada no demuestra que cada evento produzca notificación. Registre servidor o website y hora del evento antes de cambiar credenciales.

Si el evento habitual aparece en el panel pero no en Discord, compruebe canal de destino y webhook guardado. Un webhook eliminado, un canal cambiado o una dirección incompleta requieren corregir la etapa correspondiente. Conserve el contexto anterior sin secretos para poder revisar el cambio.

Si el mensaje llega a otro canal, restrinja su acceso y corrija el destino antes de seguir probando. No genere repetidamente sanciones para diagnosticar entrega. Envíe a soporte categoría del evento, hora y error censurado, sin dirección webhook completa ni información privada de jugadores.

Comprenda qué conserva un guardado de integración#

El token del bot y el client secret OAuth son campos confidenciales de contraseña. En la implementación actual, dejarlos vacíos al guardar conserva su valor almacenado. Un campo mostrado vacío no significa por sí solo que no haya secreto configurado; lea su explicación antes de reemplazarlo.

Al rotar una credencial, introduzca el reemplazo en su campo y guarde con una cuenta autorizada. Webhook URL y client ID tienen campos y comportamientos separados. No suponga que guardar vacío revoca un token o secreto OAuth; revoque en Discord una credencial expuesta.

Anote qué credencial cambió y cuándo, excluyendo su valor. Después verifique el flujo concreto: entrega al canal para webhook, una función disponible para bot o un resultado real de inicio de sesión para OAuth. El éxito de uno no valida los otros dos.

Diagnostique con seguridad el retorno del acceso Discord#

Inicie un nuevo intento desde la website correcta y mantenga el flujo en la misma sesión del navegador. OAuth utiliza state para relacionar solicitud y retorno. Abrir un callback antiguo o mezclar varios intentos puede dejar el retorno sin relación con la sesión actual.

Si aparece state inválido o una advertencia similar, anote el error y empiece desde el acceso normal en vez de actualizar repetidamente el callback. Compruebe que ajustes o extensiones no bloqueen cookies o navegación necesarias. Mantenga disponible una sesión existente del administrador durante la investigación.

Diferencie el acceso Discord de la plataforma de las credenciales personalizadas guardadas para una website alquilada. Confirme qué flujo falla antes de cambiar client ID o redirección. No comparta URLs callback con códigos de autorización, valores state, sesiones o secretos en canales públicos de soporte.

Revise contenido según necesidades del equipo#

La llegada confirma entrega; contexto claro para personas correctas es otra comprobación. Examine un mensaje normal de la integración: servidor o sitio, hora y tipo de operación identificables. Lea el formato existente, sin asumir editor de plantillas o filtro que el panel no ofrece.

Restrinja el canal al equipo pertinente. Oculte identificadores y detalles personales innecesarios al exportar o capturar. Explique que una detección no contiene necesariamente todo contexto; relacione hora con registro del panel. Si varios servidores comparten canal, compruebe que etiquetas distinguen suficientemente.

Ante mensaje confuso, anote tipo, hora y texto censurado. Aclare con soporte la salida real, sin inventar funciones ni sancionar jugadores para probar. El resultado esperado es identificar el mismo recurso y evento sin exponer secretos innecesarios.

Compruebe cuenta y acceso Discord cancelado#

Revise en OAuth cuenta equivocada y cancelación de permisos además de éxito. El navegador puede tener otro Discord abierto. Lea identidad en autorización y confirme cuenta prevista. Es un flujo de identidad; cambiar canal webhook no lo corrige.

Si cancela o rechaza, registre resultado y reinicie desde acceso normal. No distribuya callback anterior con valores de acceso. Tras éxito, verifique cuenta y contexto web. Pare antes de administrar una cuenta inesperada. Crear otra cuenta o comprar plan no valida la asociación.

Anote flujo, cuenta prevista, resultado y hora, sin token, client secret, state o código de autorización. Acceso de plataforma e integración propia de sitio alquilado son distintos. Nombrar el flujo ayuda al soporte sin cambiar credenciales ajenas.

Verifique el bot como servicio separado#

Sitio, webhook y bot son componentes distintos. Client ID, Guild ID y credenciales privadas deben corresponder al mismo sitio y servidor Discord.

Usa una versión LTS compatible de Node.js; el bot requiere al menos Node 22 LTS. El servicio privado instalado usa Node 24.21.0 LTS: /opt/tosun-discord-node/v24.21.0/bin/node. El ejemplo usa el mismo ejecutable para doctor en ExecStartPre y para ExecStart. Ejecuta también npm ci y doctor con ese entorno en PATH. Si doctor falla, no se inicia sesión. No actives el servicio hasta completar las credenciales necesarias.

  1. Compruebe IDs numéricos de roles y canales; no otorgue Administrator a todo el equipo.
  2. El operador instala claves propias del sitio y migra el ledger. npm ci usa el archivo bloqueado; npm run doctor verifica sin iniciar Discord.
  3. Un campo secreto vacío conserva su valor; los nuevos secretos requieren la clave de cifrado del sitio. Reinicie tras cambiar token/API.

Revise resultados inciertos antes de repetir#

Un timeout no demuestra que una operación fallara. La misma interacción completada no se repite, pero un comando nuevo genera otra ID.

  1. Processing y unknown no se liberan por antigüedad. Revise resultado e ID antes de repetir dinero, objetos, bans o comandos del servidor.
  2. Screenshot, live-watch, sync y diag requieren sesión autorizada del panel. No envíe tokens, claves ni contraseñas al soporte.

Separar secretos de Discord y claves AC#

El token del bot, webhook, secreto OAuth y licencia Tosun son credenciales distintas. Guarde secretos del bot en su configuración privada o campos Discord autorizados, nunca en Lua compartido, NUI ni el archivo AC exclusivo del servidor.

Las claves AC pertenecen a server.cfg o configs/anticheat_server.lua. Los tokens breves de captura/video solo autorizan la subida prevista. Rote cada secreto en su proveedor y reinicie el servicio controladamente. Pruebe estado y canal de prueba; no repita a ciegas cambios de dinero o sanciones con resultado incierto.

Instalar el bot Discord como servicio separado#

discord-bot funciona con Node.js, no con ensure. Cree su propia aplicación en Discord Developer Portal y obtenga Application ID, Guild ID e identificadores de roles/canales. Mantenga el token en un archivo de entorno privado.

La cuenta de base del sitio está restringida por defecto al localhost del proveedor. Un bot en otra máquina FiveM no obtiene acceso automático. Use un servicio administrado en el host del sitio o una conexión privada aprobada solo para su cuenta. Nunca use root del proveedor ni exponga MySQL públicamente. Verifique por separado los comandos antiguos que consultan tablas del juego.

Como propietario, guarda token, Client ID y Guild ID en Administración del sitio → Bot de Discord. Descarga el archivo privado con Download private bot setup y guárdalo como .env en tu carpeta del bot. Contiene claves sólo del sitio elegido, a diferencia del ejemplo vacío del ZIP. No lo compartas ni lo subas al control de versiones.

  1. Instale una versión LTS compatible de Node.js 22 o superior; prepare los ejemplos con el instalador.
  2. Invite con los ámbitos bot y applications.commands y permisos necesarios.
  3. Configure la base del sitio y la API HTTPS. La clave privada de comandos se comparte solo entre este bot y sitio; no es la licencia ni la clave principal SaaS.
  4. Ejecute npm run doctor antes de iniciar. Compruebe luego estado conectado y roles; doctor no inicia sesión en Discord.
cd discord-bot
sh setup.sh
# Configure the private .env and site bot settings first.
npm run doctor
npm start