由於不和諧決定對機器人強制執行斜線命令,我將停止開發這個專案。這意味著我不會修復任何問題或錯誤,也不會添加新功能。該專案將保留在 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 模組。
是的,我會審查你的程式碼,如果好的,我會將其合併到主程式碼中。請根據現有模組調整您的程式碼風格。
是的,那也可以。但如果更多的人能夠從你的工作中受益,那就太好了。