1. 核心架構與 Zero Dependency
在開發 ezdcbot 時,我們面臨的第一個決策是:要如何設計這個套件的基礎架構?我們希望它輕量、安全,且能適應 Serverless 環境。
Factory Pattern (工廠模式)
我們沒有採用常見的單例模式 (Singleton) 或直接 export 一個物件,而是設計了 createBot() 這樣的工廠函數。
index.js
/**
* 建立一個 ezdcbot 實例
* @returns {object} 包含 setup, push, pull 方法的物件
*/
const createBot = () => {
let currentToken = null;
const setup = (token) => {
if (!token) throw new Error('ezdcbot: Token is required for setup.');
currentToken = token;
};
// ... 略過 push 與 pull 的實作
return { setup, push, pull };
};
module.exports = createBot;
為什麼這樣設計?
- 避免全域狀態污染:如果使用者需要在同一個 Node.js 應用中操作多個 Discord Bot(例如:一個負責通知、一個負責客服),工廠模式允許他們實例化多個獨立的
bot物件,彼此的token不會互相干擾。 - 高封裝性與安全性:變數
currentToken被封裝在閉包 (Closure) 內部。外部程式碼無法直接讀取或竄改它,只能透過setup()來寫入,確保了敏感資料的安全。
零依賴 (Zero Dependency) 與原生 Fetch
為了讓套件極致輕量,我們堅持不依賴任何外部 npm 套件(例如 axios 或是龐大的 discord.js)。
index.js
// 完全依賴 Node.js v18+ 原生的 fetch API 進行請求
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bot ${currentToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
這樣做的好處是:
- 體積最小化:大幅降低了
node_modules的大小。 - 減少資安風險:沒有第三方相依套件,就不用擔心未來因為依賴鏈導致的漏洞 (Vulnerabilities)。
- Serverless 友善:在 Vercel 或 AWS Lambda 這種錙銖必較的無伺服器環境中,載入時間極短,有效減少冷啟動 (Cold Start) 的延遲。