Propósito de este plugin
Este plugin realiza varias funciones:
-
Te permite alimentar un bot de Discord usando tu servidor Discourse para realizar tareas que vinculen ambos sistemas. Haz un fork de este repositorio y amplíalo con Ruby simple para crear todo tipo de funcionalidades para el bot.
-
Funcionalidad existente que sirve como ejemplos y utilidad práctica:
- Proporciona cierta publicación automática bidireccional de contenido que cumple ciertos criterios.
- Comando para copiar mensajes de forma ad hoc a Discourse.
- Comando para sincronizar la pertenencia a grupos con la pertenencia a roles de tu servidor de Discord con tu instancia de Discourse.
El plugin proporciona un esqueleto extensible sobre el cual podrías construir características adicionales. Se aceptan PRs para adiciones generalmente útiles.
\u003csup\u003eestos no son los dos comandos de sincronización, solo una ilustración de la interacción del bot que es posible. El segundo comando en la captura de pantalla fue obsoleto durante el desarrollo ;)\u003c/sup\u003e
Su configuración es necesariamente compleja, pero es excelente para los fanáticos de ambos sistemas que están dispuestos a invertir el tiempo en entender cómo funciona cada uno, al menos a nivel funcional y conceptual. Necesitas entender algunos de los fundamentos de cómo funciona la gestión de usuarios de Discourse y Discord para sacar el máximo provecho de este plugin.
Comandos del Bot
Hay cuatro comandos:
- Ping!
- !disckick
- !discsync
- !disccopy
Ping!
Para verificar si el bot está respondiendo, simplemente escribe “Ping!” y el bot debería responder con “
: Pong!” - maravilloso, ¿verdad?
(esto es un poco de meme, por cierto!)
!disckick <nivel_mínimo_de_confianza: predeterminado 2>
Escribir esto expulsará a cualquier usuario que exista en tu Discourse pero con un Nivel de Confianza inferior al valor proporcionado. El valor predeterminado si no proporcionas uno es 2.
ej.:
!discsync <limpiar: predeterminado false, visibilidad_mínima: predeterminado 0, incluir grupos automatizados: predeterminado false>
Este comando intentará copiar todos los grupos a Roles en Discord que coincidan con los criterios proporcionados (o los predeterminados si no se proporcionan). Luego intentará poblar los roles según la pertenencia a Grupos en Discourse. Es una sincronización unidireccional únicamente. Nunca se modifica ningún dato de Discourse.
!disccopy <número_de_mensajes> <nombre_de_categoría_destino_opcional> <nombre_de_tópico_destino_opcional>
Te permite copiar el historial de mensajes de Discord a tu instancia de Discourse desde el chat de Discord. Esto puede manejar miles de mensajes de una sola vez (pero para ese volumen tomará tiempo).
Comunicación bidireccional
Estos son los ajustes
- Puedes designar un Canal de Anuncios en Discord en la configuración del plugin.
- Ahora puedes escribir en el Canal de Anuncios de Discord asignado y esto publicará tu mensaje en el Tópico de Discourse asignado en la configuración del plugin.
- Puedes configurar una lista de Categorías en Discourse para publicar en el canal de Anuncios de tu Discord si alguien publica allí o agrega un nuevo Tópico (uno o ambos).
- Copia automatizada de chat por mensaje, por canal a cualquier Categoría con el mismo nombre en Discourse: si el nombre del canal coincide con el nombre de la Categoría, copiará el mensaje a Discourse.

Además, he agregado un nuevo archivo para gestionar eventos de Discord compatibles con la API discordrb, siendo la lógica de Anuncios el primer ejemplo (siéntete libre de desarrollar nuevos y enviar un PR si son de utilidad general para la comunidad).
NB: Para cualquier mensaje copiado en Discourse desde Discord, el Usuario se mostrará correctamente si ese usuario ha iniciado sesión en Discourse usando el inicio de sesión con Discord (por lo que el Bot de Discord puede coincidir con los usuarios).
Estado de este plugin
Este es un plugin complejo de configurar. Eso fue bastante inevitable.
Sin embargo, es un juego de niños de usar una vez que todo está funcionando.
Considera el código como actualmente en Beta. Ha sido probado, incluso en Producción, pero es probable que contenga errores. Recomiendo probarlo primero en un servidor de Discord nuevo antes de aplicarlo a tu servidor principal de Discord en “Producción”, a menos que apenas estés comenzando.
Cualquier error es mucho más probable que afecte tu instancia de Discord que tu instancia de Discourse, porque no se realizan cambios en Discourse. Sin embargo, lo he escrito de una manera que significa que la mayoría de las cosas son recuperables y usualmente puedes simplemente repetir algo para solucionar un problema. Discourse se utiliza como maestro para la información de membresía y grupos, y estos datos se utilizan para actualizar la membresía y los Roles en tu servidor de Discord.
Instrucciones de configuración
Prerrequisitos
- un servidor de Discord en el que seas Administrador
- una Aplicación de Discord (ver abajo)
- un Bot de Discord (ver abajo)
- acceso root ssh a tu servidor Discourse
- actualizaciones en app.yml para instalar el plugin
- Todos los usuarios de tu Discourse necesitarán iniciar sesión usando el inicio de sesión OAuth de Discord que aparecerá en tu página de inicio de sesión una vez instalado el plugin.
Aplicación de Discord
Ve aquí y crea una aplicación:
Haz clic en “Nueva Aplicación”
Necesitarás crear un Bot y se verá algo así (déjalo no ‘público’):
Necesitarás autorizar al bot en el navegador, ver OAuth2 - Documentation - Discord
Una vez configurado el bot, copia el Token. Necesitarás ingresarlo en Discourse más tarde.
Cambios en app.yml
plugin
Solo necesitas un plugin para esto ahora que el Inicio de Sesión Social de Discord es nativo del núcleo de Discourse (¡guau
)
Luego en el prompt ./launcher rebuild app como de costumbre.
Esto debería funcionar, sin problemas.
Puedes obtener algunos errores en la consola y en los registros que indican un fallo del bot en la primera compilación ya que aún no has ingresado las credenciales del bot en la interfaz frontal de la configuración de Discourse. (manejar esto de manera más elegante es una tarea pendiente, eliminaré esta parte cuando se haga). Sin embargo, no causará ningún daño y Discourse en sí funcionará con normalidad.
Una vez en tu área de administración de Discourse, ve a Configuración del Plugin y completa esto:
Obtendrás los IDs de la interfaz de Discord. Necesitarás activar el Modo Desarrollador para permitirte copiar estos IDs. En Discord, ve a tu Configuración - \u003e Apariencia - \u003e AVANZADO y habilita el Modo Desarrollador:
Luego puedes obtener los IDs desde la interfaz, ej.:
También necesitarás completar la configuración de OAuth de Discord. El ID de Cliente y el Secreto provienen de tu misma Aplicación de Discord.
Una vez que hayas configurado esto, vuelve a tu prompt raíz en Linux y escribe:
./launcher restart app
Si has configurado correctamente tus servidores de Discord y Discourse, deberías ver que el bot se une al servidor.
Si alguna vez el bot falla (se desconectará), necesitarás hacer lo mismo nuevamente para traerlo de vuelta. Una mayor independencia del bot del servidor principal de Discourse es una tarea pendiente. Dicho esto, he ejecutado un bot en Producción durante mucho tiempo y aún no ha fallado.
¿Próximos comandos?
Si tienes una idea para otro comando que aproveche el vínculo entre Discourse y Discord y crees que sería útil para la comunidad más amplia, házmelo saber en las respuestas y podemos explorar el potencial de implementarlo. NB: este bot no está destinado a realizar tareas fuera del alcance de Discourse.
Limitaciones
El objetivo principal de este plugin fue permitir al usuario crear un bot en su Discord que fuera alimentado por su servidor Discourse y pudiera realizar algunas funciones básicas de gestión de membresía. También proporciona una base para cualquier interacción adicional tipo bot entre los dos sistemas en el futuro. Parte de la motivación para usar bots es que son simplemente divertidos.
Los comandos del bot son ad hoc por su propia naturaleza.
Problemas conocidos
-
El bot iniciará una instancia de sí mismo si entras en una sesión de consola rails en el servidor. Esto hará que el bot parezca responder dos veces (pero en realidad ahora hay dos bots). En la consola rails simplemente detén el bot adicional escribiendo:Esto ya no debería ser necesario.::DiscordBot::Bot.discord_bot.stop -
El Robot es un poco parlanchín durante las actualizaciones de Discourse en ‘línea’ ya que sigue siendo reactivado durante el proceso de actualización. Esto se debe a encontrar una buena manera de ejecutar el bot en un proceso separado y gestionado en lugar de un hilo derivado del servidor web. Creo que todo esto es inofensivo, pero si la salida de los bots es solo a tu canal de administración en Discord, ¿realmente te importa?Esto debería estar casi resuelto ahora, con el bot anunciándose solo dos veces durante una reconstrucción.
Gracias
Hay varios patrocinadores a quienes agradecer por este plugin, lo cual me llevó mucho tiempo llegar a esta etapa, incluyendo a @Wedgebert, @FoohonPie. Gracias a Jeff por su generosa contribución. Gracias a @angus por todo el aliento y por gestionar el apoyo financiero.
El plugin fue inspirado por el trabajo que @Watercolor_Games realizó en una etapa anterior y depende del plugin de OAuth de Discord creado por @featheredtoast.
El plugin depende de la biblioteca Ruby discordrb semi-oficial respaldada por Discord y del trabajo fantástico que el equipo de Discord ha realizado para hacer accesible su sistema. Gracias a @Falco por ayudarme con una dependencia de una manera extremadamente receptiva.
Además, por supuesto, esto no sería posible sin el increíble ecosistema de plugins de Discourse (¡guau!)
Estado de estas instrucciones
Se mejorarán con el tiempo y agradezco los comentarios. Hay áreas que seguramente serán poco claras.











