Skip to content

fanyuuu2006/NTUST-BoardGameClub-Bot

Repository files navigation

NTUST-BoardGameClub-Bot 🎲

台科大桌遊社 LINE Bot

📝 專案簡介

這是一個專為台科大桌遊社開發的 LINE Bot,提供社團成員桌遊查詢、借還、推薦等功能。透過 LINE 聊天機器人,社員可以輕鬆管理桌遊相關事務,並參與社團活動。

✨ 主要功能

🔐 社員系統

  • 註冊: 社員透過入社序號完成註冊
  • 手動註冊: 手動輸入個人資料進行註冊
  • 簽到: 社課簽到功能,影響期末抽獎機率

🎯 桌遊功能

  • 找桌遊: 透過多種條件搜尋桌遊(需指定搜尋條件)
  • 借桌遊: 使用桌遊編號借用桌遊(限已註冊社員)
  • 還桌遊: 使用桌遊編號歸還桌遊(限已註冊社員)
  • 推薦: 查看社員推薦的桌遊資訊
  • 熱門桌遊: 瀏覽最受歡迎的桌遊排行

🎮 社團互動

  • 我覺得好好玩: 為玩過的桌遊留下評價(限已註冊社員)
  • 建議桌遊: 向社團推薦新桌遊(限已註冊社員)

🛠️ 管理功能(幹部專用)

  • on: 開啟特定功能
  • off: 關閉特定功能

🔧 系統功能

  • 重置: 清除個人使用狀態,重新開始對話流程

🏗️ 技術架構

後端技術

  • Node.js + TypeScript: 主要開發語言
  • Express.js: Web 框架
  • LINE Bot SDK: LINE 聊天機器人開發套件
  • Google Sheets API: 資料儲存與管理
  • Vercel: 部署平台

專案結構

BGC-Bot/
├── src/
│   ├── app.ts                 # 主應用程式
│   ├── server.ts              # 伺服器啟動
│   ├── configs/               # 設定檔
│   │   ├── dotenv.ts          # 環境變數設定
│   │   ├── googleapis.ts      # Google API 設定
│   │   └── line.ts            # LINE Bot 設定
│   ├── controllers/           # 控制器
│   │   ├── assets.ts          # 資產管理
│   │   └── webhook.ts         # Webhook 處理
│   ├── libs/                  # 核心功能模組
│   │   ├── dialog.ts          # 對話處理
│   │   ├── index.ts           # 索引
│   │   ├── keywords.ts        # 關鍵字處理
│   │   ├── sheets.ts          # 試算表處理
│   │   └── statusFeatures.ts  # 狀態功能
│   ├── middlewares/           # 中介軟體
│   │   ├── authorzation.ts    # 授權驗證
│   │   └── line.ts            # LINE 驗證
│   ├── routers/               # 路由
│   │   ├── assets.ts          # 資產路由
│   │   └── webhook.ts         # Webhook 路由
│   ├── types/                 # TypeScript 型別定義
│   │   ├── custom.ts          # 自定義型別
│   │   ├── line.ts            # LINE 相關型別
│   │   ├── sheets.ts          # 試算表型別
│   │   └── user.ts            # 使用者型別
│   └── utils/                 # 工具函式
│       ├── custom.ts          # 自定義工具
│       └── sheets.ts          # 試算表工具
├── image/                     # 圖片資源
├── package.json               # 套件管理
├── tsconfig.json              # TypeScript 設定
├── vercel.json                # Vercel 部署設定
└── eslint.config.mjs          # ESLint 設定

🚀 快速開始

環境需求

  • Node.js 16.x 或更高版本
  • npm 或 yarn 套件管理器

安裝步驟

  1. 複製專案

    git clone https://github.com/fanyuuu2006/NTUST-BoardGameClub-Bot.git
    cd NTUST-BoardGameClub-Bot
  2. 安裝依賴

    npm install
  3. 設定環境變數

    建立 .env 檔案並設定以下變數:

    # LINE Bot 設定
    LINE_CHANNEL_ACCESS_TOKEN=your_line_channel_access_token
    LINE_CHANNEL_SECRET=your_line_channel_secret
    
    # Google Sheets API 設定
    GOOGLE_SERVICE_ACCOUNT_EMAIL=your_google_service_account_email
    GOOGLE_PRIVATE_KEY=your_google_private_key
    
    # 其他設定
    PORT=3000
  4. 啟動開發伺服器

    npm run dev
  5. 生產環境啟動

    npm start

🛠️ 開發指令

# 開發模式啟動
npm run dev

# 生產環境啟動  
npm start

# 程式碼檢查
npm run lint

# 自動修正程式碼格式
npm run lint:fix

# 執行測試
npm test

📊 API 端點

Webhook

  • POST /webhook - LINE Bot webhook 接收訊息

社產管理

  • GET /assets - 取得所有桌遊清單
  • GET /assets/search - 搜尋桌遊
  • GET /assets/:id - 取得特定桌遊資訊

🔐 權限管理

社員權限

  • 未註冊用戶: 僅能使用註冊功能
  • 已註冊社員: 可使用所有桌遊借還功能
  • 管理員: 擁有系統管理權限

功能權限分級

  • 公開功能: 幫助、註冊、手動註冊、找桌遊、推薦、熱門桌遊
  • 社員功能: 簽到、借桌遊、還桌遊、建議桌遊、我覺得好好玩
  • 管理功能: on/off 系統控制(需特殊權限)

📱 使用方式

  1. 加入 LINE Bot 好友
  2. 註冊社員: 輸入「註冊」開始註冊流程,或使用「手動註冊」
  3. 查詢桌遊: 輸入「找桌遊」後選擇搜尋條件,再輸入關鍵字
  4. 借用桌遊: 輸入「借桌遊」後提供桌遊編號(盒子上的編號)
  5. 歸還桌遊: 輸入「還桌遊」後提供桌遊編號
  6. 社課簽到: 輸入「簽到」參與社課簽到
  7. 查看推薦: 輸入「推薦」查看推薦桌遊或「熱門桌遊」查看排行
  8. 桌遊評價: 玩完桌遊後輸入「我覺得好好玩」留下評價

🚀 部署

本專案使用 Vercel 進行部署:

  1. 連接 GitHub: 將專案推送到 GitHub
  2. 部署到 Vercel: 連接 Vercel 並自動部署
  3. 設定環境變數: 在 Vercel 控制台設定環境變數
  4. 設定 Webhook: 在 LINE Developer Console 設定 Webhook URL

🤝 貢獻指南

歡迎提交 Pull Request 或回報 Issue!

  1. Fork 本專案
  2. 建立功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交變更 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 開啟 Pull Request

📄 授權條款

本專案採用 ISC 授權條款 - 詳見 LICENSE 檔案


⭐ 如果這個專案對你有幫助,歡迎給個星星!

About

A custom Line Bot for NTUST Board Game Club.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published