Из-за решения Discord ввести в действие слэш-команды для ботов, я прекращаю разработку этого проекта. Это означает, что я не буду исправлять какие-либо проблемы или ошибки или добавлять новые функции. Проект останется на GitHub, но он будет реализован.
Основная причина, по которой я принял это решение, заключается в том, что преобразование бота для использования косой черты потребует от меня переписывания всей логики команд. У меня нет ни времени, ни мотивации переписывать основные части кодовой базы. Вдобавок ко всему, dynoBot довольно сложен в обслуживании, особенно в отношении модуля потоковой передачи музыки, который зависит от множества других пакетов npm, которые имеют тенденцию ломаться.
Поэтому я, к сожалению, закрою этот проект.
dynoBot — это модульный бот Discord, использующий JavaScript, а также, при необходимости, Python и Lua. Он построен таким образом, что можно легко создавать новые модули на предпочитаемом вами языке сценариев.
Идея бота заключается в том, чтобы самостоятельно с минимальными усилиями создавать нужные вам модули. Таким образом, dynoBot можно рассматривать как платформу, которая обрабатывает все, что связано с API Discord, поэтому вы можете сразу же приступить к разработке собственных модулей.
Тем не менее, dynoBot можно использовать, не написав ни единой строки кода, если вам нужны все включенные модули.
На данный момент бот имеет следующие модули:
Вы можете просмотреть все доступные команды, набрав «@BotName help» в чате Discord. Альтернативно вы можете просмотреть файл Commands.json.
Сначала вам понадобится nodejs и, при необходимости, python3 для модулей Python и lua для модулей Lua. После установки клонируйте этот репозиторий и запустите npm install
в папке dynoBot
. Он должен установить все необходимые зависимости.
Чтобы запустить бота Discord, вам необходимо добавить файл security.json
в каталог dynoBot/cfg
. Это должно выглядеть так:
{
"token" : " your discord bot token "
}
ВАЖНО: Когда вы разветвляете этот проект, не загружайте файл security.json в свой репозиторий. Это позволит другим украсть ваш токен раздора.
Если вы хотите использовать модуль Wolfram|Alpha, вам также понадобится его ключ API в файле security.json
. Вы можете запросить бесплатный ключ API Wolfram | Alpha здесь.
С ключом API ваш файл security.json должен выглядеть так:
{
"token" : " your discord bot token " ,
"wolframAlphaAPI" : " your api key "
}
По умолчанию все логи записываются в консоль. Если вы хотите, чтобы журналы записывались в файлы журналов, вам необходимо включить ведение журнала в файле security.json
следующим образом:
{
"token" : " your discord bot token " ,
"logging" : true
}
Теперь вы можете запустить бота, используя команду node main.js
в каталоге dynoBot
.
Вы можете создавать модули на JavaScript, Python или Lua. Существует два типа модулей: модуль чата и модуль перехвата. Модуль чата выполняется каждый раз, когда пользователь отправляет сообщение с соответствующей командой. Перехват автоматически выполняется через определенный интервал. Ниже я покажу вам, как их создавать на JavaScript, Python и Lua. Альтернативно вы можете взглянуть на примеры модулей для JavaScript, Python и Lua, включенных в проект.
Модулям JavaScript, Python и Lua необходима запись в файле Commands.json, которая выглядит следующим образом:
{
"group" : " command-group-name " ,
"type" : " python " ,
"regex" : " py-example|python example " ,
"help" : " python example " ,
"path" : " src/py-modules/example-python.py " ,
"hidden" : false
}
Содержимое свойства help будет использоваться для списка команд. Если оно не существует, будет использовано свойство regex.
Свойство группы можно использовать для разрешения фильтрации при использовании команды справки. Например, есть группа под названием «Основные», включающая все встроенные основные команды. Если вы хотите видеть в списке команд только команды группы «основные», используйте «help» вместо обычной команды help.
Если для параметра скрыто значение true, команда будет исключена из списка команд.
Модуль JavaScript имеет прямой доступ к оболочке discord.js. Базовая структура модуля выглядит следующим образом:
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
Код, выполняемый при вызове модуля, принадлежит функции запуска. Параметры msg и client принадлежат чат-боту-api-wrapper. Дополнительную информацию о реализации вы можете найти там.
Модуль Python не имеет доступа к оболочке discord.js, но получает msg.contentArray
и msg.aRegexGroups
. Базовая структура выглядит следующим образом:
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
Как видите, отпечаток заставляет бота отправить сообщение.
Модуль Lua также не имеет доступа к оболочке discord.js, но получает msg.contentArray
и msg.aRegexGroups
. Базовая структура выглядит следующим образом:
-- 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 ]) .. " ] " )
Как видите, отпечаток заставляет бота отправить сообщение. В целом модули Lua очень похожи на модули Python.
Модулям JavaScript и Python необходима запись в файлеooks.json, выглядящая следующим образом:
"technicalHookName" : {
"type" : " js " ,
"name" : " hookName " ,
"path" : " src/js-modules/yourModule.js " ,
"channel" : 0 ,
"interval" : 10000 ,
"running" : false
}
Модуль JavaScript имеет доступ к объекту канала оболочки discord.js. Код, выполняемый при вызове модуля, принадлежит функции-перехватчику.
module . exports = {
hook : function ( channel ) {
channel . send ( "This js message is automatically sent in a specific interval" ) ;
}
} ;
Функция перехвата выполняется, когда файлooks.json имеет существующий канал и работает.
Модуль Python не имеет доступа к объекту канала и не получает входных данных. Он просто запускает скрипт Python, и каждый вызов печати создает сообщение бота. Это должно выглядеть так:
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
Модуль Lua также не имеет доступа к объекту канала, он не получает никаких входных данных. Он просто запускает сценарий Lua, и каждый вызов печати создает сообщение бота. Это должно выглядеть так:
-- Insert code here
-- This will be the msg that the bot sends
print ( " This lua message is automatically sent in a specific interval. " )
Это снова похоже на модули Python.
Да, я просмотрю ваш код и, если он будет хорош, я солью его с мастером. Пожалуйста, адаптируйте свой стиль кода к уже существующим модулям.
Да, это тоже нормально. Но было бы здорово, если бы больше людей могли получить пользу от вашей работы.