เนื่องจากการตัดสินใจของ Discord ที่จะบังคับใช้คำสั่ง Slash สำหรับบอท ฉันจะหยุดการพัฒนาโปรเจ็กต์นี้ ซึ่งหมายความว่าฉันจะไม่แก้ไขปัญหาหรือข้อบกพร่องใดๆ หรือเพิ่มคุณสมบัติใหม่ โครงการจะยังคงอยู่ใน GitHub แต่จะสำเร็จ
เหตุผลหลักที่ฉันตัดสินใจครั้งนี้ก็คือการแปลงบอทให้ใช้คำสั่งสแลชจะทำให้ฉันต้องเขียนตรรกะคำสั่งทั้งหมดใหม่ ฉันไม่มีเวลาและไม่มีแรงจูงใจที่จะเขียนส่วนสำคัญของโค้ดเบสใหม่ ยิ่งไปกว่านั้น dynoBot นั้นค่อนข้างมีการบำรุงรักษาหนัก โดยเฉพาะอย่างยิ่งในเรื่องของโมดูลการสตรีมเพลงซึ่งขึ้นอยู่กับแพ็คเกจ npm อื่นๆ จำนวนมากที่มีแนวโน้มที่จะเสียหาย
ดังนั้นผมจึงขอพักโครงการนี้ไว้อย่างน่าเสียดาย
dynoBot เป็นบอท Discord แบบโมดูลาร์ที่ใช้ JavaScript และยังสามารถเลือก Python และ Lua ได้ด้วย มันถูกสร้างขึ้นในลักษณะที่ทำให้การสร้างโมดูลใหม่สามารถทำได้อย่างง่ายดายในภาษาสคริปต์ที่คุณต้องการ
แนวคิดเบื้องหลังบอทคือการสร้างโมดูลที่คุณต้องการด้วยตัวเองโดยใช้ความพยายามเพียงเล็กน้อย ดังนั้น dynoBot จึงถือเป็นเฟรมเวิร์กที่จัดการทุกอย่างที่เกี่ยวข้องกับ discord api ดังนั้นคุณจึงสามารถเริ่มพัฒนาโมดูลของคุณเองได้ทันที
อย่างไรก็ตาม สามารถใช้ dynoBot ได้โดยไม่ต้องเขียนโค้ดแม้แต่บรรทัดเดียว ตราบใดที่โมดูลที่ให้มานั้นเป็นสิ่งที่คุณต้องการ
ปัจจุบันบอทมีโมดูลดังต่อไปนี้:
คุณสามารถดูคำสั่งที่ใช้ได้ทั้งหมดโดยพิมพ์ "@BotName help" ในแชทที่ไม่ลงรอยกัน หรือคุณสามารถดูไฟล์ commands.json ได้
ก่อนอื่นคุณต้องมี nodejs และทางเลือก python3 สำหรับโมดูล python และ lua สำหรับโมดูล lua หลังจากการติดตั้ง ให้โคลนพื้นที่เก็บข้อมูลนี้และรัน npm install
ภายในโฟลเดอร์ dynoBot
ควรติดตั้งการขึ้นต่อกันที่จำเป็นทั้งหมด
หากต้องการเรียกใช้บอทที่ไม่ลงรอยกัน คุณจะต้องเพิ่มไฟล์ security.json
ภายในไดเร็กทอรี dynoBot/cfg
มันควรมีลักษณะเช่นนี้:
{
"token" : " your discord bot token "
}
สิ่งสำคัญ: เมื่อคุณแยกโปรเจ็กต์นี้ อย่าอัปโหลด security.json ไปยังที่เก็บของคุณ ซึ่งจะทำให้ผู้อื่นสามารถขโมยโทเค็นความไม่ลงรอยกันของคุณได้
หากคุณต้องการใช้โมดูล Wolfram|Alpha คุณจะต้องมีคีย์ API ใน security.json
เช่นกัน คุณสามารถขอคีย์ Wolfram|Alpha API ฟรีได้ที่นี่
ด้วยคีย์ 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 โมดูลมีสองประเภท ได้แก่ โมดูลแชทและโมดูล hook โมดูลแชทจะถูกดำเนินการทุกครั้งที่ผู้ใช้ส่งข้อความด้วยคำสั่งที่เกี่ยวข้อง hook จะดำเนินการโดยอัตโนมัติในช่วงเวลาที่กำหนด ด้านล่างนี้ฉันจะแสดงวิธีสร้างพวกมันใน 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
}
เนื้อหาของคุณสมบัติวิธีใช้จะถูกใช้สำหรับรายการคำสั่ง หากไม่มีอยู่ ระบบจะใช้คุณสมบัติ regex
คุณสมบัติกลุ่มสามารถใช้เพื่ออนุญาตการกรองในขณะที่ใช้คำสั่งวิธีใช้ ตัวอย่างเช่น มีกลุ่มที่เรียกว่า "พื้นฐาน" รวมถึงคำสั่งคอร์ในตัวทั้งหมด หากคุณต้องการดูเฉพาะคำสั่งของกลุ่ม "พื้นฐาน" ในรายการคำสั่ง ให้ใช้ " help" แทนคำสั่ง help ปกติ
การตั้งค่าซ่อนเป็นจริงจะแยกคำสั่งออกจากรายการคำสั่ง
โมดูล JavaScript สามารถเข้าถึง wrapper discord.js ได้โดยตรง โครงสร้างพื้นฐานของโมดูลมีลักษณะดังนี้:
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
รหัสที่ดำเนินการเมื่อมีการเรียกโมดูลนั้นอยู่ในฟังก์ชันการทำงาน พารามิเตอร์ msg และ client มาจาก chatbot-api-wrapper คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานได้ที่นั่น
โมดูล Python ไม่สามารถเข้าถึง wrapper 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 ยังไม่สามารถเข้าถึง wrapper 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 สามารถเข้าถึงอ็อบเจ็กต์ช่องของ wrapper discord.js รหัสที่ดำเนินการเมื่อมีการเรียกโมดูลนั้นอยู่ในฟังก์ชัน hook
module . exports = {
hook : function ( channel ) {
channel . send ( "This js message is automatically sent in a specific interval" ) ;
}
} ;
ฟังก์ชัน hook จะดำเนินการเมื่อ hooks.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 อีกครั้ง
ใช่ ฉันจะตรวจสอบโค้ดของคุณ และหากดี ฉันจะรวมมันเข้ากับโค้ดหลัก โปรดปรับรูปแบบโค้ดของคุณเกี่ยวกับโมดูลที่มีอยู่แล้ว
ใช่ มันก็โอเคเช่นกัน แต่คงจะดีถ้ามีคนได้กำไรจากงานของคุณมากขึ้น