Debido a la decisión de Discord de imponer comandos de barra diagonal a los bots, dejaré de desarrollar este proyecto. Esto significa que no solucionaré ningún problema ni error ni agregaré nuevas funciones. El proyecto permanecerá en GitHub pero se logrará.
La razón principal por la que tomé esta decisión es que convertir el bot para que use comandos de barra diagonal requeriría que reescribiera toda la lógica del comando. No tengo el tiempo ni la motivación para reescribir partes importantes del código base. Además de eso, dynoBot requiere bastante mantenimiento, especialmente en lo que respecta al módulo de transmisión de música, que depende de muchos otros paquetes npm que tienden a fallar.
Por lo tanto, lamentablemente dejaré este proyecto en paz.
dynoBot es un bot modular de Discord que utiliza JavaScript y, opcionalmente, también Python y Lua. Está diseñado de tal manera que la creación de nuevos módulos se puede realizar con facilidad en el lenguaje de programación que prefiera.
La idea detrás del bot es crear los módulos que necesitas tú mismo con un mínimo de esfuerzo. Por lo tanto, dynoBot puede considerarse como un marco que maneja todo lo relacionado con la API de Discord, por lo que puedes comenzar inmediatamente a desarrollar tus propios módulos.
Sin embargo, dynoBot se puede utilizar sin escribir una sola línea de código siempre que los módulos incluidos sean todo lo que necesita.
El bot tiene actualmente los siguientes módulos:
Puedes ver todos los comandos disponibles escribiendo "@BotName ayuda" en el chat de Discord. Alternativamente, puedes echar un vistazo al archivo commands.json.
Primero necesita nodejs y opcionalmente python3 para módulos python y lua para módulos lua. Después de la instalación, clone este repositorio y ejecute npm install
dentro de la carpeta dynoBot
. Debería instalar todas las dependencias necesarias.
Para ejecutar el bot de Discord, deberá agregar el archivo security.json
dentro del directorio dynoBot/cfg
. Debería verse así:
{
"token" : " your discord bot token "
}
IMPORTANTE: Cuando bifurque este proyecto, no cargue el archivo security.json a su repositorio. Esto permitiría que otros roben tu ficha de discordia.
Si desea utilizar el módulo Wolfram|Alpha, también necesitará su clave API en el archivo security.json
. Puede solicitar una clave API Wolfram|Alpha gratuita aquí.
Con la clave API, su archivo security.json debería verse así:
{
"token" : " your discord bot token " ,
"wolframAlphaAPI" : " your api key "
}
De forma predeterminada, todos los registros se escriben en la consola. Si desea que los registros se escriban en archivos de registro, debe habilitar el inicio de sesión en el security.json
de esta manera:
{
"token" : " your discord bot token " ,
"logging" : true
}
Ahora puede iniciar el bot usando el comando node main.js
dentro del directorio dynoBot
.
Puedes crear módulos en JavaScript, Python o Lua. Hay dos tipos de módulos, un módulo de chat y un módulo de enlace. Un módulo de chat se ejecuta cada vez que un usuario envía un mensaje con el comando correspondiente. Un gancho se ejecuta automáticamente en un intervalo específico. A continuación te mostraré cómo crearlos en JavaScript, Python y Lua. Alternativamente, puedes echar un vistazo a los módulos de ejemplo para JavaScript, Python y Lua incluidos en el proyecto.
Los módulos JavaScript, Python y Lua necesitan una entrada en el archivo commands.json con este aspecto:
{
"group" : " command-group-name " ,
"type" : " python " ,
"regex" : " py-example|python example " ,
"help" : " python example " ,
"path" : " src/py-modules/example-python.py " ,
"hidden" : false
}
El contenido de la propiedad de ayuda se utilizará para la lista de comandos. Si no existe, se utilizará la propiedad regex.
La propiedad de grupo se puede utilizar para permitir el filtrado mientras se utiliza el comando de ayuda. Por ejemplo, hay un grupo llamado "básico" que incluye todos los comandos principales integrados. Si desea ver sólo los comandos del grupo "básico" en la lista de comandos, utilice "ayuda" en lugar del comando de ayuda normal.
Establecer oculto en verdadero excluirá el comando de la lista de comandos.
El módulo JavaScript tiene acceso directo al contenedor discord.js. La estructura base de un módulo se ve así:
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
El código ejecutado cuando se llama al módulo pertenece a la función de ejecución. Los parámetros msg y client están en el chatbot-api-wrapper. Puede encontrar más información sobre la implementación allí.
El módulo Python no tiene acceso al contenedor discord.js pero obtiene msg.contentArray
y msg.aRegexGroups
. La estructura base se ve así:
import sys
msg = sys . argv [ 1 ]. split ( "," ) # Array of input parameters
regexGroups = sys . argv [ 2 ]. split ( "," ) # Array of input regex groups
# insert code to handle the input parameters here
print ( "I received these parameters: " + str ( msg )) # This will be the msg that the bot sends
print ( "These are the regex groups" + str ( regexGroups )) # This is a second message that the bot sends
sys . stdout . flush () # cleanup
Como puede ver, la impresión hace que el bot envíe un mensaje.
El módulo Lua tampoco tiene acceso al contenedor discord.js, pero obtiene msg.contentArray
y msg.aRegexGroups
. La estructura base se ve así:
-- Import lua module helper for splitting strings into arrays
require " src/utils/luaUtils "
local sMessage = arg [ 1 ] -- String of input parameters
local sRegexGroups = arg [ 2 ] -- String of input regex groups
local aMessage = utils . splitString ( sMessage , " , " ) -- Array of input parameters
local aRegexGroups = utils . splitString ( sRegexGroups , " , " ) -- Array of input regex groups
-- Insert code to handle the input parameters here
-- This will be the msg that the bot sends
print ( " I received these parameters: [ " .. tostring ( aMessage [ 1 ]) .. " , " .. tostring ( aMessage [ 2 ]) .. " ] " )
-- This is a second message that the bot sends
print ( " These are the regex groups: [ " .. tostring ( aRegexGroups [ 1 ]) .. " ] " )
Como puede ver, la impresión hace que el bot envíe un mensaje. En general, los módulos de Lua son bastante similares a los módulos de Python.
Los módulos JavaScript y Python necesitan una entrada en el archivo hooks.json con este aspecto:
"technicalHookName" : {
"type" : " js " ,
"name" : " hookName " ,
"path" : " src/js-modules/yourModule.js " ,
"channel" : 0 ,
"interval" : 10000 ,
"running" : false
}
El módulo JavaScript tiene acceso al objeto de canal del contenedor discord.js. El código ejecutado cuando se llama al módulo pertenece a la función de enlace.
module . exports = {
hook : function ( channel ) {
channel . send ( "This js message is automatically sent in a specific interval" ) ;
}
} ;
La función de enlace se ejecuta cuando hooks.json tiene un canal existente y se está ejecutando.
El módulo Python no tiene acceso al objeto del canal, no recibe entradas. Simplemente ejecuta el script de Python y cada llamada de impresión crea un mensaje de bot. Debería verse así:
import sys
# insert code to handle the input parameters here
# This will be the msg that the bot sends
print ( "This py message is automatically sent in a specific interval" )
sys . stdout . flush () # cleanup
El módulo Lua tampoco tiene acceso al objeto de canal y no recibe entradas. Simplemente ejecuta el script lua y cada llamada de impresión crea un mensaje de bot. Debería verse así:
-- Insert code here
-- This will be the msg that the bot sends
print ( " This lua message is automatically sent in a specific interval. " )
Esto es nuevamente similar a los módulos de Python.
Sí, revisaré tu código y, si es bueno, lo fusionaré con el maestro. Adapte el estilo de su código con respecto a los módulos ya existentes.
Sí, eso también está bien. Pero sería bueno que más personas pudieran beneficiarse de su trabajo.