MapleStory Artale 廣播訊息 Discord 機器人,使用 NestJS 架構重構版本。
- 🔗 連接 Artale WebSocket API 接收即時廣播訊息
- 🤖 Discord 斜線命令支援
- 🔍 關鍵字過濾系統
- 📋 訊息類型過濾(收購/販售)
- 🔄 智能合併訂閱模式(不會覆蓋現有設定)
- 🗄️ MongoDB 數據持久化
- ⚡ NestJS 模組化架構
/subscribe
- 訂閱廣播訊息(合併模式)/unsubscribe
- 取消訂閱(支援部分取消)/status
- 查看訂閱狀態
/subscribe keywords:劍,盾,藥水 types:收購
/subscribe keywords:武器 types:全部
/subscribe types:販售 # 訂閱所有販售訊息
/subscribe # 訂閱所有訊息
/unsubscribe # 取消所有訂閱
/unsubscribe keywords:手攻 # 完全取消「手攻」關鍵字
/unsubscribe types:收購 # 取消所有關鍵字的收購類型
/unsubscribe keywords:手攻 types:收購 # 只取消「手攻」的收購訂閱
- 只指定關鍵字:完全移除該關鍵字的所有訊息類型
- 只指定類型:從所有關鍵字中移除該訊息類型
- 同時指定:精確移除特定關鍵字的特定類型
- 關鍵字匹配不區分大小寫
- 移除最後一個訂閱會完全取消訂閱
顯示完整的訂閱資訊,包括所有關鍵字和對應的訊息類型
- 框架: NestJS with TypeScript
- 資料庫: MongoDB with Mongoose
- Discord: Discord.js v14
- WebSocket: 連接 Artale API
- 配置: 環境變數配置
npm install
複製 .env.example
為 .env
並填入相關資訊:
cp .env.example .env
編輯 .env
文件:
# Discord Bot Configuration
DISCORD_TOKEN=your_discord_bot_token_here
CLIENT_ID=your_discord_application_client_id_here
# MongoDB Configuration
MONGODB_URI=mongodb://localhost:27017/artale-bot
- 前往 Discord Developer Portal
- 創建新的 Application
- 在 Bot 頁面創建 Bot 並取得 Token
- 在 OAuth2 > General 取得 Client ID
- 在 OAuth2 > URL Generator 選擇
bot
和applications.commands
scope - 將產生的 URL 用於邀請機器人到伺服器
確保 MongoDB 服務正在運行:
# 使用 Docker
docker run -d -p 27017:27017 --name mongodb mongo
# 或使用本地安裝的 MongoDB
mongod
# 開發模式
npm run start:dev
# 生產模式
npm run build
npm run start:prod
# 創建 .env 檔案
cp .env.example .env
# 編輯 .env 填入必要的環境變數
# 啟動服務(包含 MongoDB)
docker-compose up -d
# 查看日誌
docker-compose logs -f artale-bot
# 停止服務
docker-compose down
# 啟動開發環境(包含熱重載)
docker-compose -f docker-compose.dev.yml up -d
# 查看日誌
docker-compose -f docker-compose.dev.yml logs -f artale-bot-dev
# 停止開發環境
docker-compose -f docker-compose.dev.yml down
# 單元測試
npm run test
# e2e 測試
npm run test:e2e
# 測試覆蓋率
npm run test:cov
相比舊版本,新版本具有以下改進:
- 合併訂閱模式:
/subscribe
不再覆蓋現有設定,而是合併新的關鍵字和類型 - 智能取消訂閱:
/unsubscribe
支援參數化部分取消,可精確控制要取消的內容 - 簡化指令集: 僅保留 3 個核心指令,移除冗餘功能
- 統一參數設計:
/subscribe
和/unsubscribe
使用相同的參數結構 - MongoDB: 從 SQLite 遷移到 MongoDB,提供更好的擴展性
- NestJS 架構: 模組化設計,更易維護和擴展
- DatabaseModule: MongoDB 連接和數據操作
- DiscordModule: Discord 機器人和指令處理
- WebSocketModule: Artale API WebSocket 連接
本專案包含完整的 GitHub Actions CI/CD pipeline:
-
CI/CD Pipeline (
.github/workflows/ci.yml
)- Lint & Test: 代碼質量檢查、單元測試、E2E 測試
- Security: 安全掃描和依賴檢查
- Docker Build: 多平台 Docker 映像建置
- Deploy: 自動部署到 staging/production 環境
-
Dependency Update (
.github/workflows/dependency-update.yml
)- 每週一自動檢查依賴更新
- 自動創建 PR 進行依賴升級
-
Docker Build Test (
.github/workflows/docker-build.yml
)- 對 Docker 相關文件變更進行測試
- 確保 Docker 映像能正常建置和運行
STAGING_WEBHOOK_URL - Staging 部署 webhook URL(可選)
PRODUCTION_WEBHOOK_URL - Production 部署 webhook URL(可選)
develop
→ 自動測試,自動部署到 stagingmain
→ 自動測試,自動部署到 production- PR → 自動測試和 Docker 建置檢查
Docker 映像會自動推送到 GitHub Container Registry:
# 最新版本
ghcr.io/[username]/artale-discord-bot:latest
# 開發版本
ghcr.io/[username]/artale-discord-bot:develop
# 特定 commit
ghcr.io/[username]/artale-discord-bot:main-[commit-sha]
# 拉取最新版本
docker pull ghcr.io/[username]/artale-discord-bot:latest
# 運行容器
docker run -d \
-e DISCORD_TOKEN=your_token \
-e CLIENT_ID=your_client_id \
-e MONGODB_URI=your_mongodb_uri \
ghcr.io/[username]/artale-discord-bot:latest
MIT Licensed