Skip to content

About

123

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🤖 Discord AI Auto Bot (Gemini 3.7 Flash + YouTube 即時通知)

一個基於 Python discord.py、Google 最新 google-genai SDK (Gemini 3.7 Flash) 與 FastAPI 打造的多功能高品質 Discord 機器人。

本機器人具備 AI 角色扮演對話 (多角色切換 / 多模態圖片與大頭貼辨識 / 雙層自適應記憶學習 / 情緒貼圖 / 動態聊天室上下文)、YouTube 影片即時推送通知 (WebSub 鉤子 + RSS 雙軌機制),以及 獨立 Bot 管理層與 VIP 限額白名單系統。


🌟 核心功能特色

🎭 1. Gemini AI 角色扮演對話系統

  • 多角色動態切換:支援自訂多組 persona_*.txt 人設 Prompt 與對應的 persona_*_setting.json 設定檔,可透過下拉選單一鍵切換。
  • 頭像與暱稱同步變更:切換角色時,機器人會自動將 Discord 伺服器暱稱與全域頭像(支援 PNG、JPG、WEBP)同步更新為該角色。
  • 🧠 雙層自適應記憶與學習系統:背景自動異步萃取對話(包含文字與圖片梗圖),動態更新「群組文化與內部梗 (guild_cultures.json)」與「活躍使用者個人印象 (user_profiles.json)」,實現越聊越懂你的深度默契。
  • 聊天室動態上下文 (Ambient Context):@標記機器人時,自動抓取頻道內最近 30 條聊天紀錄(包含 Bot 本人之前的發言),AI 完美理解對話前後文。
  • 跨時空回覆 (Reply) 目標精準抓取:對極早以前的舊訊息點擊 Discord「回覆」時,機器人會精準抓取該條被回覆目標訊息進行回答。
  • 智慧多模態視覺與大頭貼辨識:
    • 支援直接上傳圖片、回覆目標圖片分析。
    • 依用戶意圖智能下載歷史圖片,降低 Token 消耗。
    • 支援即時抓取並分析用戶或指定成員的 Discord 大頭貼/頭像 (Avatar)。
  • 情感表情包自動附圖:AI 依據情緒在回覆末端輸出標籤(如 [EMOTION: happy]),自動附帶傳送 assets/emotions/ 下的對應 PNG 貼圖。
  • 持續輸入中 (KeepTyping 心跳機制):AI 思考期間背景自動每 4.5 秒發送一次 typing() 心跳封包,輸入中狀態 100% 不間斷亮起。
  • 長文解禁與自動切塊:Gemini 輸出 Token 提高至 2048;超過 Discord 2000 字限制時自動拆分為多頁訊息順序發送。

📺 2. YouTube 影片即時通知系統

  • WebSub (PubSubHubbub) + RSS 雙軌機制:
    • 主推:FastAPI 提供 Port 8080 Webhook 接收 YouTube 官方即時秒級推送。
    • 備援:背景自動每 3 分鐘輪詢 RSS Feed,確保通知零漏發。
  • 頻道綁定與多頻道分發:不同 Discord 文字頻道可訂閱不同的 YouTube 頻道,通知自動精準發送至當時輸入指令的頻道。
  • SQLite 持久化儲存:訂閱紀錄自動寫入 data/subscriptions.db,重啟或遷移不丟失。

👑 3. 獨立 Bot 管理層與 VIP 白名單限制

  • User ID 嚴格權限防護:管理權限完全獨立於 Discord 伺服器權限,僅限 admin_user_ids 白名單中的 Discord User ID 執行管理。
  • /admin_panel 互動式控制面板:針對管理員提供專屬私人彈出介面(ephemeral=True),點擊按鈕即可觸發 Modal 彈出視窗設定 User ID。
  • 動態可配置對話上限:非 VIP 成員設有每日對話上限(預設 10 次,每日午夜自動重置),額度用盡時觸發角色專屬警告訊息;VIP 成員享有無限次數對話。

📋 斜線指令清單 (Slash Commands)

🎭 AI 角色對話相關

斜線指令 權限限制 功能說明
/chat <prompt> [image] 全員 與目前的 AI 角色進行對話(支援附加圖片)
/chg_persona [filename] Bot Admin 切換 AI 角色設定檔(留空則彈出互動下拉選單)
/list_personas 全員 列出目前可用的所有角色設定檔與對應的設定 JSON
/view_memory 全員 檢視 AI 角色對目前群組文化與您的專屬記憶與印象
/bot_info 全員 以當前角色性格回報系統狀態、運行資訊與個人對話額度
/reset_chat 全員 清除目前頻道的 AI 對話歷史記憶

📺 YouTube 通知相關

斜線指令 權限限制 功能說明
/sub_yt <url> 伺服器管理員 訂閱指定的 YouTube 頻道,將通知發送至目前頻道
/unsub_yt 伺服器管理員 移除目前 Discord 頻道的指定 YouTube 訂閱
/list_yt 全員 查看目前頻道訂閱的 YouTube 頻道清單

🎛️ 超級管理員與 VIP 相關

斜線指令 權限限制 功能說明
/admin_panel Bot Admin 🎛️ 開啟 Bot 專屬私人互動控制面板(點擊按鈕彈窗操作)
/vip_list 全員 查看 Bot 管理員名單、VIP 白名單與每日對話上限設定

💡 提示:管理員亦可在 Discord 頻道中輸入文字指令 !sync 來強制重新整理與同步斜線指令。


📂 專案目錄結構

dc_auto_bot/
├── main.py                     # Bot & FastAPI 啟動入口 (併行運作與指令同步)
├── config.py                   # 環境變數與設定載入器
├── requirements.txt            # Python 依賴套件套件清單
├── Dockerfile                  # Docker 容器化部署設定
├── README.md                   # 專案說明文件
│
├── utils/
│   ├── vip_manager.py          # 👑 獨立 VIP 與 Bot 管理員 User ID 白名單管理模組
│   └── memory_manager.py       # 🧠 雙層自適應記憶與群組/個人學習管理模組
│
├── cogs/
│   ├── ai_roleplay.py          # 🎭 Gemini 3.7 Flash 角色扮演對話 Cog
│   ├── admin.py                # 🎛️ /admin_panel 管理員與 VIP 控制面板 Cog
│   └── youtube.py              # 📺 YouTube WebSub & RSS 推送通知 Cog
│
├── data/
│   ├── subscriptions.db        # YouTube 訂閱 SQLite 資料庫
│   ├── vip_config.json         # VIP 與 Bot 管理員 User ID 白名單設定檔
│   ├── vip_usage.json          # 非 VIP 每日對話次數紀錄檔
│   ├── guild_cultures.json     # 🧠 各伺服器群組文化與內部梗記憶庫
│   ├── user_profiles.json      # 🧠 各活躍使用者個人印象記憶庫
│   └── personas/
│       ├── active_persona.txt  # 當前生效的角色狀態指標
│       ├── persona_default.txt / .json          # 預設角色 (愛莉)
│       ├── persona_mornye.txt / .json / .webp   # 莫寧 (鳴潮)
│       ├── persona_aemeath.txt / .json / .webp  # 愛彌斯 (鳴潮)
│       ├── persona_daniya.txt / .json / .webp   # 達妮婭 (鳴潮)
│       └── persona_liino.txt / .json / .webp    # 梨諾 (終末地)
│
└── assets/
    └── emotions/               # AI 情感表情包 PNG 圖片 (happy.png, thinking.png...)

🛠️ 環境設定與安裝步驟

1. 複製專案與安裝套件

git clone <your-repo-url>
cd dc_auto_bot

# 建立並啟用虛擬環境 (推薦)
python -m venv venv
venv\Scripts\activate  # Windows
source venv/bin/activate  # Linux/Mac

# 安裝所需套件
pip install -r requirements.txt

2. 設定 .env 環境變數檔

在專案根目錄建立 .env 檔案(可參考 .env.example):

# Discord 機器人 Token
DISCORD_TOKEN=your_discord_bot_token_here

# Google Gemini API Key 與模型設定
GEMINI_API_KEY=your_gemini_api_key_here
GEMINI_MODEL=gemini-3.7-flash

# Webhook 對外服務網址 (YouTube WebSub 接收用)
WEBHOOK_BASE_URL=https://your-domain.com
WEBHOOK_PORT=8080

3. 開啟 Discord Developer Portal 權限 (重要 ⚠️)

  1. 前往 Discord Developer Portal。
  2. 點擊你的 Application ➡️ 左側選單選擇 Bot。
  3. 往下滑找到 Privileged Gateway Intents 區塊。
  4. 將 MESSAGE CONTENT INTENT 開關切換為 開啟 (ON / 藍色) 並儲存。

🚀 啟動運行

本地直接啟動

python main.py
  • 機器人啟動時會自動讀取 Bot Application Owner ID 作為第一位 Bot 超級管理員。
  • 首次啟動或更新指令後,可在 Discord 輸入 !sync,並在 Discord 按 Ctrl + R 刷新介面。

使用 Docker 部署

# 建置 Docker 映像檔
docker build -t dc-auto-bot .

# 運行 Docker 容器
docker run -d --name dc_bot -p 8080:8080 --env-file .env dc-auto-bot

📄 授權條款 (License)

本專案採用 MIT License 授權。

About

123

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages