由于不和谐决定对机器人强制执行斜杠命令,我将停止开发这个项目。这意味着我不会修复任何问题或错误,也不会添加新功能。该项目将保留在 GitHub 上,但它将会实现。
我做出这个决定的主要原因是,将机器人转换为使用斜杠命令将需要我重写整个命令逻辑。我既没有时间也没有动力重写代码库的主要部分。除此之外,dynoBot 的维护工作相当繁重,尤其是音乐流模块,该模块依赖于许多其他容易损坏的 npm 包。
因此,我将遗憾地搁置这个项目。
dynoBot 是一个模块化的 Discord 机器人,使用 JavaScript,也可以选择使用 Python 和 Lua。它的构建方式使您可以使用您喜欢的脚本语言轻松地创建新模块。
该机器人背后的想法是用最少的努力自己创建您需要的模块。因此,dynoBot可以被认为是一个处理与discord api相关的所有内容的框架,因此您可以立即开始开发自己的模块。
尽管如此,只要包含的模块满足您的需要,您无需编写任何代码即可使用 dynoBot。
该机器人目前具有以下模块:
您可以通过在不和谐聊天中输入“@BotName help”来查看所有可用命令。或者,您可以查看commands.json 文件。
首先,您需要 Nodejs 和可选的 python3(用于 python 模块)和 lua(用于 lua 模块)。安装后,克隆此存储库并在dynoBot
文件夹中运行npm install
。它应该安装所有必需的依赖项。
要运行 Discord 机器人,您必须在目录dynoBot/cfg
中添加security.json
文件。它应该看起来像这样:
{
"token" : " your discord bot token "
}
重要提示:当您分叉此项目时,请勿将 security.json 上传到您的存储库。这将允许其他人窃取您的不和谐令牌。
如果您想使用 Wolfram|Alpha 模块,您还需要security.json
中的 API 密钥。您可以在此处申请免费的 Wolfram|Alpha API 密钥。
使用 API 密钥,您的 security.json 应如下所示:
{
"token" : " your discord bot token " ,
"wolframAlphaAPI" : " your api key "
}
默认情况下,所有日志都会写入控制台。如果您希望将日志写入日志文件,则必须在security.json
中启用日志记录,如下所示:
{
"token" : " your discord bot token " ,
"logging" : true
}
现在,您可以使用目录dynoBot
中的命令node main.js
启动机器人。
您可以使用 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
}
帮助属性的内容将用于命令列表。如果不存在,将使用正则表达式属性。
group 属性可用于在使用 help 命令时进行过滤。例如,有一个名为“basic”的组,包括所有内置核心命令。如果您只想查看命令列表中“基本”组的命令,请使用“help”而不是普通的帮助命令。
将 hide 设置为 true 将从命令列表中排除该命令。
JavaScript 模块可以直接访问discord.js 包装器。模块的基本结构如下所示:
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
调用模块时执行的代码属于run函数。参数 msg 和 client 由 chatbot-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 模块都需要 hooks.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" ) ;
}
} ;
当 hooks.json 具有现有通道并且正在运行时,将执行钩子函数。
Python 模块无法访问通道对象,它不接收输入。它只运行 python 脚本,每次调用 print 都会创建一条机器人消息。它应该看起来像这样:
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 脚本,每次调用 print 都会创建一条机器人消息。它应该看起来像这样:
-- Insert code here
-- This will be the msg that the bot sends
print ( " This lua message is automatically sent in a specific interval. " )
这又类似于 Python 模块。
是的,我会审查你的代码,如果好的,我会将其合并到主代码中。请根据现有模块调整您的代码风格。
是的,那也可以。但如果更多的人能够从你的工作中受益,那就太好了。