跳至主要内容

告別龐大的 discord.js:我如何打造零依賴的輕量 Discord 推播套件 ezdcbot

· 閱讀時間約 5 分鐘
Liwen
Digital Architect / Full Stack Developer

身為一名後端工程師,我們經常需要實作一些自動化的小工具,例如:

  • 接收 Stripe 伺服器傳來的付費 Webhook,並把通知傳到團隊的 Discord 群組。
  • 寫一個爬蟲排程,每天早上把最新的天氣預報發到頻道裡。

在過去,要做到這些事,大部分人的直覺反應都是:npm install discord.js

但問題來了:如果你只是想「單向」地發送一則通知,或者只是想寫一個架設在 AWS Lambda 或 Vercel 等 Serverless 平台上的輕量腳本,殺雞真的需要用牛刀嗎?

開發痛點:我們不需要一整台卡車

discord.js 是一個非常強大、完整的生態系,但它為了維持與 Discord 之間的雙向即時通訊,底層實作了複雜的 WebSocket 連線,並且需要設定各式各樣的 Gateway Intents。

如果我的程式碼只是一支跑完就結束的無伺服器函數 (Serverless Function),這意味著我每次喚醒這支 API 都要:

  1. 載入龐大的 node_modules
  2. 建立 WebSocket 連線
  3. 等待 client.on('ready')
  4. 發送訊息
  5. 斷開連線

這無論是在啟動時間 (Cold Start) 還是開發體驗上,都顯得非常笨重。

因此,我決定自己動手,打造一款極致輕量、零第三方依賴 (Zero Dependency) 的推播專用套件:ezdcbot

核心設計理念:極簡的 API

ezdcbot 的底層完全捨棄了 WebSocket,改用 Node.js 18+ 原生支援的 fetch,直接打向 Discord 官方的 REST API (v10)。打完就跑,沒有任何包袱。

為了讓其他開發者能「無腦使用」,我把整個套件的 API 縮減到只剩 3 個動作:

  • setup:初始化 Token。
  • push:把東西丟進頻道。
  • pull:把頻道裡的東西拿出來。

就這樣,沒了。

const bot = require("ezdcbot")();

// 1. 初始化
bot.setup("你的_BOT_TOKEN");

// 2. 發送訊息
await bot.push("頻道ID", "🚀 輕量推播成功!");

驚喜發現:把討論串 (Threads) 當成頻道來玩

在開發過程中,我原本還在思考要不要針對「發送討論串」、「讀取討論串」去新增各式各樣的函式。但我翻了 Discord 的官方 API 文件後,發現了一個非常聰明的底層設計:

在 Discord API 眼裡,討論串 (Thread) 就是一種比較特別的頻道 (Channel)。

這代表我完全不需要寫新的方法!只要你手上有討論串的 ID,你就可以直接把它當作頻道 ID 塞進 pushpull 裡面。

因此,ezdcbot 的使用變得異常優雅:

// 【情境一】無中生有建立一個新討論串
const thread = await bot.push("頻道ID", "今日進度回報", { type: "thread" });

// 【情境二】在剛剛建立的討論串裡面發言
await bot.push(thread.id, "大家早安!請在這裡回報今天的預計進度!");

// 【情境三】下班時,把討論串裡面大家的對話全部抓下來
const messages = await bot.pull(thread.id, 20);

你只需要用 { type: 'thread' } 來觸發第一步的「建立」,後續所有的讀寫操作都不需要改變寫法。這個設計不僅讓原始碼保持極簡,開發者的認知負擔也降到了最低。

真實應用情境:自動化小幫手

結合上面的特性,你可以輕易地用幾十行程式碼,在自己的伺服器上寫出一個每日自動化的「進度追蹤機器人」:

  1. 每天早上 9 點:用 push 傳送包含精美顏色的 Embed 圖文卡片,跟大家說早安。
  2. 同時:用 { type: 'thread' } 幫當天的日期開一個專屬的討論串。
  3. 每天晚上 6 點:用 pull 把該討論串裡大家回報的內容抓成 Array,丟給 ChatGPT 做重點摘要,然後再 push 回主頻道。

開源旅程才剛開始

這是我第一次將自己為了解決特定痛點而寫的程式碼,整理成完整的套件發布到 npm 上。

如果你剛好也在找一個輕量、不需要長連線的 Discord 發報工具,非常歡迎你來試用看看 ezdcbot

🔗 GitHub 原始碼: liwenchiou/ezdcbot (如果對你有幫助,希望能獲得你的 Star 支持!🌟) 📦 npm 安裝: npm install ezdcbot

開發不僅僅是寫出會動的程式碼,更是創造工具來改善開發體驗的過程。希望 ezdcbot 也能成為你日常自動化小專案中的好幫手!

感謝你的閱讀!✨

我的數位花園紀錄了我在工程師之路上的學習點滴與生活分享。如果你覺得內容有幫助,歡迎與我交流或分享給更多人。


💬 歡迎留言討論