Devido à decisão do discord de impor comandos de barra para bots, vou parar de desenvolver este projeto. Isso significa que não corrigirei nenhum problema ou bug nem adicionarei novos recursos. O projeto permanecerá no GitHub, mas será alcançado.
A principal razão pela qual tomei essa decisão é que converter o bot para usar comandos de barra exigiria que eu reescrevesse toda a lógica do comando. Não tenho tempo nem motivação para reescrever partes importantes da base de código. Além disso, o dynoBot exige muita manutenção, especialmente no que diz respeito ao módulo de streaming de música, que depende de muitos outros pacotes npm que tendem a quebrar.
Portanto, infelizmente colocarei este projeto de lado.
dynoBot é um bot Discord modular que usa JavaScript e, opcionalmente, também Python e Lua. Ele foi construído de forma que a criação de novos módulos possa ser feita com facilidade na linguagem de script de sua preferência.
A ideia por trás do bot é criar você mesmo os módulos necessários com um mínimo de esforço. Portanto, o dynoBot pode ser considerado um framework que trata de tudo relacionado à API discord, para que você possa começar imediatamente a desenvolver seus próprios módulos.
No entanto, o dynoBot pode ser usado sem escrever uma única linha de código, desde que os módulos incluídos sejam tudo o que você precisa.
O bot possui atualmente os seguintes módulos:
Você pode ver todos os comandos disponíveis digitando “@BotName help” no chat do discord. Alternativamente, você pode dar uma olhada no arquivo Commands.json.
Primeiro você precisa de nodejs e opcionalmente python3 para módulos python e lua para módulos lua. Após a instalação, clone este repositório e execute npm install
dentro da pasta dynoBot
. Deve instalar todas as dependências necessárias.
Para executar o bot discord, você terá que adicionar o arquivo security.json
dentro do diretório dynoBot/cfg
. Deveria ficar assim:
{
"token" : " your discord bot token "
}
IMPORTANTE: Ao bifurcar este projeto, não carregue o security.json em seu repositório. Isso permitiria que outras pessoas roubassem seu token de discórdia.
Se quiser usar o módulo Wolfram|Alpha, você também precisará da chave API no security.json
. Você pode solicitar uma chave API gratuita do Wolfram|Alpha aqui.
Com a chave API, seu security.json deve ficar assim:
{
"token" : " your discord bot token " ,
"wolframAlphaAPI" : " your api key "
}
Por padrão, todos os logs são gravados no console. Se quiser que os logs sejam gravados em arquivos de log, você deve habilitar o log no security.json
assim:
{
"token" : " your discord bot token " ,
"logging" : true
}
Agora você pode iniciar o bot usando o comando node main.js
dentro do diretório dynoBot
.
Você pode criar módulos em JavaScript, Python ou Lua. Existem dois tipos de módulos, um módulo de chat e um módulo de gancho. Um módulo de chat é executado sempre que um usuário envia uma mensagem com o comando correspondente. Um gancho é executado automaticamente em um intervalo específico. Abaixo vou mostrar como criá-los em JavaScript, Python e Lua. Alternativamente, você pode dar uma olhada nos módulos de exemplo para JavaScript, Python e Lua incluídos no projeto.
Os módulos JavaScript, Python e Lua precisam de uma entrada no arquivo Commands.json semelhante a esta:
{
"group" : " command-group-name " ,
"type" : " python " ,
"regex" : " py-example|python example " ,
"help" : " python example " ,
"path" : " src/py-modules/example-python.py " ,
"hidden" : false
}
O conteúdo da propriedade help será usado para a lista de comandos. Caso não exista, a propriedade regex será utilizada.
A propriedade group pode ser usada para permitir a filtragem ao usar o comando de ajuda. Por exemplo, existe um grupo chamado "básico" que inclui todos os comandos principais integrados. Se você quiser ver apenas os comandos do grupo "básico" na lista de comandos, use "help" em vez do comando de ajuda normal.
Definir oculto como verdadeiro excluirá o comando da lista de comandos.
O módulo JavaScript tem acesso direto ao wrapper discord.js. A estrutura básica de um módulo é assim:
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
O código executado quando o módulo é chamado pertence à função run. Os parâmetros msg e client são do chatbot-api-wrapper. Você pode encontrar mais informações sobre a implementação lá.
O módulo Python não tem acesso ao wrapper discord.js, mas obtém msg.contentArray
e msg.aRegexGroups
. A estrutura básica fica assim:
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 você pode ver, o print faz o bot enviar uma mensagem.
O módulo Lua também não tem acesso ao wrapper discord.js, mas obtém msg.contentArray
e msg.aRegexGroups
. A estrutura básica é assim:
-- 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 você pode ver, o print faz o bot enviar uma mensagem. Em geral, os módulos Lua são bastante semelhantes aos módulos Python.
Os módulos JavaScript e Python precisam de uma entrada no arquivo hooks.json semelhante a esta:
"technicalHookName" : {
"type" : " js " ,
"name" : " hookName " ,
"path" : " src/js-modules/yourModule.js " ,
"channel" : 0 ,
"interval" : 10000 ,
"running" : false
}
O módulo JavaScript tem acesso ao objeto de canal do wrapper discord.js. O código executado quando o módulo é chamado pertence à função hook.
module . exports = {
hook : function ( channel ) {
channel . send ( "This js message is automatically sent in a specific interval" ) ;
}
} ;
A função hook é executada quando hooks.json tem um canal existente e está em execução.
O módulo Python não tem acesso ao objeto canal e não recebe entradas. Ele apenas executa o script python e cada chamada de impressão cria uma mensagem de bot. Deveria ficar assim:
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
O módulo Lua também não tem acesso ao objeto canal e não recebe entradas. Ele apenas executa o script lua e cada chamada de print cria uma mensagem de bot. Deveria ficar assim:
-- Insert code here
-- This will be the msg that the bot sends
print ( " This lua message is automatically sent in a specific interval. " )
Isso é novamente semelhante aos módulos Python.
Sim, irei revisar seu código e se estiver bom, irei mesclá-lo no master. Adapte seu estilo de código em relação aos módulos já existentes.
Sim, também está tudo bem. Mas seria bom se mais pessoas pudessem lucrar com o seu trabalho.