Aufgrund der Entscheidung von Discord, Slash-Befehle für Bots zu erzwingen, werde ich die Entwicklung dieses Projekts einstellen. Das bedeutet, dass ich keine Probleme oder Fehler behebe oder neue Funktionen hinzufüge. Das Projekt bleibt auf GitHub, aber es wird erreicht.
Der Hauptgrund, warum ich diese Entscheidung getroffen habe, ist, dass die Umstellung des Bots auf die Verwendung von Slash-Befehlen erfordern würde, dass ich die gesamte Befehlslogik neu schreiben müsste. Ich habe weder die Zeit noch die Motivation, wesentliche Teile der Codebasis neu zu schreiben. Darüber hinaus ist dynoBot ziemlich wartungsintensiv, insbesondere im Hinblick auf das Musik-Streaming-Modul, das von vielen anderen npm-Paketen abhängt, die dazu neigen, kaputt zu gehen.
Daher werde ich dieses Projekt leider auf Eis legen.
dynoBot ist ein modularer Discord-Bot, der JavaScript und optional auch Python und Lua verwendet. Es ist so aufgebaut, dass die Erstellung neuer Module problemlos in einer von Ihnen bevorzugten Skriptsprache erfolgen kann.
Die Idee hinter dem Bot besteht darin, die benötigten Module mit minimalem Aufwand selbst zu erstellen. Daher kann DynoBot als Framework betrachtet werden, das alles im Zusammenhang mit der Discord-API abwickelt, sodass Sie sofort mit der Entwicklung Ihrer eigenen Module beginnen können.
Dennoch kann dynoBot verwendet werden, ohne eine einzige Zeile Code zu schreiben, solange die enthaltenen Module ausreichen, die Sie benötigen.
Der Bot verfügt derzeit über folgende Module:
Sie können alle verfügbaren Befehle sehen, indem Sie im Discord-Chat „@BotName help“ eingeben. Alternativ können Sie einen Blick auf die Datei commands.json werfen.
Zuerst benötigen Sie nodejs und optional python3 für Python-Module und lua für Lua-Module. Klonen Sie nach der Installation dieses Repository und führen Sie npm install
im dynoBot
-Ordner aus. Es sollten alle erforderlichen Abhängigkeiten installiert werden.
Um den Discord-Bot auszuführen, müssen Sie die Datei security.json
im Verzeichnis dynoBot/cfg
hinzufügen. Es sollte so aussehen:
{
"token" : " your discord bot token "
}
WICHTIG: Wenn Sie dieses Projekt forken, laden Sie security.json nicht in Ihr Repository hoch. Dies würde es anderen ermöglichen, Ihren Discord-Token zu stehlen.
Wenn Sie das Wolfram|Alpha-Modul verwenden möchten, benötigen Sie auch dessen API-Schlüssel in der security.json
. Hier können Sie einen kostenlosen Wolfram|Alpha API-Schlüssel anfordern.
Mit dem API-Schlüssel sollte Ihre security.json so aussehen:
{
"token" : " your discord bot token " ,
"wolframAlphaAPI" : " your api key "
}
Standardmäßig werden alle Protokolle in die Konsole geschrieben. Wenn Sie möchten, dass die Protokolle in Protokolldateien geschrieben werden, müssen Sie die Protokollierung in security.json
wie folgt aktivieren:
{
"token" : " your discord bot token " ,
"logging" : true
}
Jetzt können Sie den Bot starten, indem Sie den Befehl node main.js
im Verzeichnis dynoBot
verwenden.
Sie können Module in JavaScript, Python oder Lua erstellen. Es gibt zwei Arten von Modulen: ein Chat-Modul und ein Hook-Modul. Ein Chat-Modul wird jedes Mal ausgeführt, wenn ein Benutzer eine Nachricht mit dem entsprechenden Befehl sendet. Ein Hook wird automatisch in einem bestimmten Intervall ausgeführt. Im Folgenden zeige ich Ihnen, wie Sie sie in JavaScript, Python und Lua erstellen. Alternativ können Sie einen Blick auf die im Projekt enthaltenen Beispielmodule für JavaScript, Python und Lua werfen.
JavaScript-, Python- und Lua-Module benötigen einen Eintrag in der Datei „commands.json“, der wie folgt aussieht:
{
"group" : " command-group-name " ,
"type" : " python " ,
"regex" : " py-example|python example " ,
"help" : " python example " ,
"path" : " src/py-modules/example-python.py " ,
"hidden" : false
}
Der Inhalt der Hilfeeigenschaft wird für die Befehlsliste verwendet. Wenn sie nicht vorhanden ist, wird die Regex-Eigenschaft verwendet.
Die Gruppeneigenschaft kann verwendet werden, um das Filtern während der Verwendung des Hilfebefehls zu ermöglichen. Beispielsweise gibt es eine Gruppe namens „Basic“, die alle integrierten Kernbefehle enthält. Wenn Sie in der Befehlsliste nur Befehle der Gruppe „Basic“ sehen möchten, verwenden Sie „help“ anstelle des normalen Hilfebefehls.
Wenn Sie „hidden“ auf „true“ setzen, wird der Befehl aus der Befehlsliste ausgeschlossen.
Das JavaScript-Modul hat direkten Zugriff auf den Discord.js-Wrapper. Der Grundaufbau eines Moduls sieht folgendermaßen aus:
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
Der beim Aufruf des Moduls ausgeführte Code gehört zur Ausführungsfunktion. Die Parameter msg und client stammen vom Chatbot-API-Wrapper. Weitere Informationen zur Umsetzung finden Sie dort.
Das Python-Modul hat keinen Zugriff auf den Discord.js-Wrapper, ruft jedoch die msg.contentArray
und msg.aRegexGroups
ab. Die Grundstruktur sieht so aus:
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
Wie Sie sehen, veranlasst der Ausdruck den Bot, eine Nachricht zu senden.
Das Lua-Modul hat auch keinen Zugriff auf den Discord.js-Wrapper, sondern erhält die msg.contentArray
und msg.aRegexGroups
. Die Grundstruktur sieht so aus:
-- 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 ]) .. " ] " )
Wie Sie sehen, veranlasst der Ausdruck den Bot, eine Nachricht zu senden. Insgesamt sind Lua-Module den Python-Modulen ziemlich ähnlich.
Sowohl JavaScript- als auch Python-Module benötigen einen Eintrag in der Datei „hooks.json“, der wie folgt aussieht:
"technicalHookName" : {
"type" : " js " ,
"name" : " hookName " ,
"path" : " src/js-modules/yourModule.js " ,
"channel" : 0 ,
"interval" : 10000 ,
"running" : false
}
Das JavaScript-Modul hat Zugriff auf das Kanalobjekt des Discord.js-Wrappers. Der beim Aufruf des Moduls ausgeführte Code gehört in die Hook-Funktion.
module . exports = {
hook : function ( channel ) {
channel . send ( "This js message is automatically sent in a specific interval" ) ;
}
} ;
Die Hook-Funktion wird ausgeführt, wenn die Datei „hooks.json“ über einen vorhandenen Kanal verfügt und ausgeführt wird.
Das Python-Modul hat keinen Zugriff auf das Kanalobjekt, es empfängt keine Eingaben. Es führt lediglich das Python-Skript aus und jeder Aufruf von print erstellt eine Bot-Nachricht. Es sollte so aussehen:
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
Das Lua-Modul hat auch keinen Zugriff auf das Kanalobjekt, es empfängt keine Eingaben. Es führt lediglich das Lua-Skript aus und jeder Aufruf von print erstellt eine Bot-Nachricht. Es sollte so aussehen:
-- Insert code here
-- This will be the msg that the bot sends
print ( " This lua message is automatically sent in a specific interval. " )
Dies ähnelt wiederum Python-Modulen.
Ja, ich werde Ihren Code überprüfen und wenn er gut ist, werde ich ihn in den Master einbinden. Bitte passen Sie Ihren Codestil hinsichtlich bereits vorhandener Module an.
Ja, das ist auch ok. Aber es wäre schön, wenn mehr Menschen von Ihrer Arbeit profitieren könnten.