從 0 到 1:Discord Bot 開發之旅

前言

使用Discord也有段很長的時間了,使用過各式各樣的群組Bot,

好的群組Bot可以替群組增加許多有趣功能,增添社群的趣味性,

筆者身為工程師也想做一個出來,至少資料都看得到存在哪,不會因為哪天服務停止就全消失了。

此篇文章不會深入如何從 Discord 開發者模式去創建新Bot,僅開發完成的功能進行說明。

核心功能介紹

以前有開發過用對話輸入特殊格式訊息觸發Bot指令,

後來發現有 Slash Command 能更加客製化會方便許多,

以下功能全部使用 Slash Command 開發,

大部分指令提供給所有身分,

但有些指令關係到群組設定會限定身分使用。

關鍵字回應

當成員輸入某個關鍵字會回應特定訊息

新增

查看

刪除

成員歡迎/離開訊息

設定

該功能只有能群組管理員才能操作

時間提醒任務

新增

查看

重複成員訊息

刪除多筆訊息

該功能只有能刪除訊息的使用者才能操作

技術架構

使用 JavaScript進行開發,

在 Node.js(v18.20.5) 及 discord.js (v14.17.3) 環境運行,

啟動資訊放在專案的 main.js 下,

啟動時會載入相關設定,並設定前端網站(顯示運作狀態),

主要功能都集中在 src 資料夾下,

在底下依功能性區分資料夾,

commands:指令

core:啟動時載入的設定

events:監聽事件

routes:前端顯示

store:狀態及存取資料管理

logs:運作日誌

utils:共通工具

目前資料儲存讀取是都在專案下的Json檔案內,

關鍵字回應: replies

時間提醒: reminders

歡迎/離開訊息:settings

依照 不同群組 區分儲存內容,

依Discord回應設定有分成 私密 與 非私密 訊息,

私密訊息可以自己刪除,

但非私密訊息就需要能刪除的人砍訊息了。

部署到網路我是採用 Heroku方式,

官方文件寫得很詳細,計費方案也很透明,

省去申請網域名稱的問題,也提供實際運作上的效能圖表,

方便查看上線後運行情況。

未來規劃

調整資料儲存方式

目前做法雖然方便,可以直接查看設定內容,

但存儲資料應在資料庫較好,

部署上Heroku 每次啟動都會重建檔案內容,

讓上次新增的資料全部重置也是個問題。

新增更多功能

給予身分組:自動給予成員身分組

隨機抽獎:設定抽獎範圍與數量抽出結果

成員管理:禁言違規用戶

音樂播放:支援 YouTube、Spotify 串流播放

API 整合:天氣查詢

結論

基本上為個人開發,

技術上還不是很成熟,

若願意提出意見我會十分感謝,

感謝你看到這邊,最後附上專案位置,

https://github.com/Chitoseyu/js-dicord-bot