# Kikyo Discord BOT </br> 本篇將介紹如何用低成本(第一個月免費,收費後每個月 1.49 鎂)建立 Discord BOT,實現同一個伺服器中同時 host 多個 BOT,新增或移除角色時也能輕易完成。 這邊跟 Google 有關的工具**並非完全免費**,而是使用 [Google Cloud 的三個月 300 美金](https://cloud.google.com/free)的免費試用方案,需要綁定信用卡。三個月過後,你的專案仍然可以使用,每個工具都有其免費版的使用額度,有些是要付費的,有興趣的人可以到每個工具的網站了解詳細資訊唷! 篇幅超級長,有遇到問題可以到我的 [Discord 伺服器](https://discord.gg/aPrVk96bHC)一起討論,或是許願新增功能,我會努力試試看! 抱歉我做圖片的時候完全忘記把介面切成中文,以為那些工具預設就是英文,如果有看不懂的地方,可以在 DC 詢問我~ :::warning 本人完全不懂程式編碼,所有代碼皆由 ChatGPT/Gemini/Claude/Cursor 完成,超級不專業,純粹好玩,我相信有更多更厲害的工具及編碼,目前這個設定是我覺得最方便我使用的,有興趣的人請帶著愉快的心情還有高度的耐心,跟我一起胡搞瞎搞 🤪。 ::: :::danger 請讓你的 AI 工具陪著你一起執行程序,遇到任何問題先問 AI,因為我也不是專業的,問我不一定答的出來 🤣 ::: </br> # 使用工具清單 - [Discord Developer Portal](https://discord.com/developers/applications) - [Google Gemini API](https://aistudio.google.com/apikey%E3%80%82) - [Google Firebase/Firestore](https://console.firebase.google.com/u/0) - [Google Cloud Console - Buckets](https://console.cloud.google.com/storage/browser) - [Cybrancee](https://cybrancee.com/discord-bot-hosting) - [Visual Studio Code](https://code.visualstudio.com/)(不一定需要,這是編輯代碼用的,用電腦的記事本也可以) </br> # Discord Developer Portal ## 建立新的 Discord BOT 第一件事當然就是建立新的 BOT! 1. 前往 [Discord Developer Portal](https://discord.com/developers/applications)。 3. 登入後,點選右上角 `New Application`。 ![image](https://hackmd.io/_uploads/H1ozpsn8ex.png) 3. 輸入 BOT 名字後點選 `Create`。 ![image](https://hackmd.io/_uploads/SyOmpohUll.png =50%x) 4. General Information:可以編輯 BOT 名字及狀態。 ![image](https://hackmd.io/_uploads/BJl3TihUgx.png) 5. BOT:打開 `Server Members Intent`、`Message Content Intent` 後,點選 `Save Changes`。 ![image](https://hackmd.io/_uploads/B1z-UdkOee.png) 1. 取得金鑰:左側 `BOT` ➡️ `Reset Token` ➡️ `Yes, do it!`。 ![image](https://hackmd.io/_uploads/BJuSkayDll.png) ![image](https://hackmd.io/_uploads/SJAuk61Pxe.png =50%x) 2. 先把這個金鑰存在記事本,等等會用到。 ![image](https://hackmd.io/_uploads/S1zF1TJwgx.png) 6. OAuth2 - Scopes:打勾 `bot`、`application.command`。 ![image](https://hackmd.io/_uploads/S1e8Ai3Iee.png) 7. OAuth2 - BOT Permissions:打勾 `Send Messages`、`Read Message History`、`Use Slash Commands`、`Add Reactions`。 ![image](https://hackmd.io/_uploads/ryPUJYzwxl.png) 8. 往下滑,點選 `Copy` 以複製連結。 ![image](https://hackmd.io/_uploads/HkxMeh2Igg.png) 9. 網址貼到瀏覽器,把 BOT 邀請到你的伺服器 ![image](https://hackmd.io/_uploads/r1NFM2nIgl.png) </br> # Google Gemini API 這個步驟之前在 SillyTavern 的文章中有提到過,以下提供傳送門: - [申請 Google Gemini API](https://hackmd.io/4oCZAC7ARliFDQl7367EvA?view#%E7%94%B3%E8%AB%8B-Google-Gemini-API) 如果已經有申請過的話,可以用同一個 API Key,不需重新申請。 </br> # 下載 kikyo_discord_bot 1. 前往 Github 連結:[kikyo_discord_bot](https://github.com/kikyoicecream/kikyo_discord_bot) 2. 點選 `Code` ➡️ `Download ZIP` ![image](https://hackmd.io/_uploads/Hy-9can8ex.png) 3. 下載完畢後先解壓縮,等等會使用到。 </br> # Google Firebase / Firestore / Buckets 角色設定、角色記憶及表情符號回應系統都是存放在這邊,先建立一個 BOT 專用的專案吧! ## 新增 Google Firebase 專案 1. 前往 **[Google Firebase](https://console.firebase.google.com/u/0/?hl=zh-tw)** 3. 建立 Firebase 專案 ![image](https://hackmd.io/_uploads/HJzoSJKSxg.png) 3. 輸入專案名稱,這個專案會用來儲存所有的 BOT 角色設定、使用者記憶及表情符號管理資料,所以這邊輸入你喜歡的名稱就好,這個之後還可以修改(使用英文)。 ![image](https://hackmd.io/_uploads/SJ4F8kFrgl.png =80%x) 4. 點選兩次 `繼續`。 ![image](https://hackmd.io/_uploads/HkRcLkKSgl.png =80%x) ![image](https://hackmd.io/_uploads/Hkho8JFSgl.png =80%x) 5. 設定 Google Analytics,選 `default` ➡️ `建立專案`。 ![image](https://hackmd.io/_uploads/rJFvP1YSlg.png) 6. 等待建立完畢。 ![image](https://hackmd.io/_uploads/ryxhukYBex.png =50%x) ![image](https://hackmd.io/_uploads/Bkmh_yKreg.png =50%x) 7. 左側欄位 `建構` ➡️ `Firestore Database`。 ![image](https://hackmd.io/_uploads/B1sltJKSgx.png =50%x) 8. 點選 `建立資料庫`。 ![image](https://hackmd.io/_uploads/r1eEKytBlx.png) 9. 欄位如圖所示,不需要修改 ➡️ `下一步`(如果 `位置` 顯示為空格的話,請關掉此視窗再打開一次)。 ![image](https://hackmd.io/_uploads/Hk1PFkFHge.png) 10. 不用修改,點選 `建立`。 ![image](https://hackmd.io/_uploads/Sk8hKytBll.png) 11. 取得金鑰:左上角齒輪 icon ➡️ `專案設定` ➡️ `服務帳戶`。 ![image](https://hackmd.io/_uploads/HJX1Wpyvxl.png) 12. 點選 `產生新的私密金鑰`,你就會得到一個 json 檔。 ![image](https://hackmd.io/_uploads/SyljsMT1Pxl.png) 13. 打開這個檔案,把換行都刪除,所有內容變成一行文字,例如: ``` {"type": "service_account","project_id": "discord-bot-kikyo",...} ``` </br> ## 匯入資料庫 建立完專案後,再來要匯入範本,這樣 BOT 才能按照程式的指令抓取 Firestore 裡的資料。 ### 設定 Google Cloud Billing Account 1. 前往 [Google Cloud Billing](https://console.cloud.google.com/billing/linkedaccount)。 2. 點選 `Link a billing account`。 ![image](https://hackmd.io/_uploads/BJz2XuAIlx.png) 3. 點選 `My Billing Account` ➡️ `Set account`。 ![image](https://hackmd.io/_uploads/ryIAmOA8gl.png) </br> ### 設定 Buckets / Firestore (請注意圖片中的資料夾名稱可能會變動,因為我更新資料庫檔案後,如果沒有太大變動不會去更新圖片,檔案名稱都 87% 像,看得懂在幹嘛就好 XD) 1. 上方搜尋欄輸入 `buckets`,點選 `buckets`。 ![image](https://hackmd.io/_uploads/SypzIMJwgx.png) 4. 點選 `Create`。 ![image](https://hackmd.io/_uploads/rylCEdRLle.png) 5. 輸入一個特定字串作為 Buckets 的名字,然後一直按 `Continue` ➡️ `Create`。 ![image](https://hackmd.io/_uploads/r19OSdALle.png) 6. 點選 `Confirm`。 ![image](https://hackmd.io/_uploads/SJ9vOuALex.pn =80%x) 7. 點選 `Upload files`。 ![image](https://hackmd.io/_uploads/BkzH5uCLee.png) 8. 把 Github 下載的內容裡,`2025-07-25T02/01/29_72578` 資料夾整個上傳上去 ➡️ `upload`。 ![image](https://hackmd.io/_uploads/rJlbPFlwee.png =50%x) 11. 看到資料夾出現在下面,就代表上傳成功了。 ![image](https://hackmd.io/_uploads/Skm4wtgwee.png) 1. 點進去 `2025-07-25T03:32:48_18637` 資料夾,在這個頁面點選路徑旁邊的 icon 複製路徑,先複製起來。 ![image](https://hackmd.io/_uploads/B1euwYlPle.png) 11. 我們要使用 Google Cloud Shell 來匯入我們剛剛上傳到 Bucket 的資料夾,點選右上角的 icon,再點選 `Authorize`。 ![image](https://hackmd.io/_uploads/rynsbmWwxl.png) 1. 在 Google Cloud Shell 輸入以下指令: ``` gcloud firestore import gs://{你剛剛複製的路徑} ``` 範例: ``` gcloud firestore import gs://kikyo-discord-bot-template/2025-07-25T14:17:57_3440 ``` 9. 等跑完之後,上方搜尋欄位輸入 `Firestore`,點選 `Firestore`,回到 Firestore。 ![image](https://hackmd.io/_uploads/BkfL2u0Ige.png) 12. 看到以下內容,就代表你匯入成功了! ![image](https://hackmd.io/_uploads/Bkayp_xvgl.png) </br> 資料庫結構: ``` your-project/ ├── prompt/ # AI 提示詞模板系統 │ ├── user_memories/ # 記憶提取提示詞 │ │ ├── content: "提示詞內容" │ │ └── model: "gemini-2.0-flash" │ ├── memories_summary/ # 記憶統整提示詞 │ │ ├── content: "提示詞內容" │ │ ├── model: "gemini-2.0-flash" │ │ └── memory_limit: 15 # 記憶統整門檻 │ └── system/ # 系統角色提示詞 │ ├── content: "提示詞內容" │ └── model: "gemini-2.5-pro" ├── {character_id}/ # 角色設定 │ ├── profile/ # 角色設定檔 │ ├── users/ # 使用者記憶(單一文件) │ │ └── {user_id}: [] # 使用者 ID 對應記憶陣列 │ ├── emoji_system/ # 表情符號管理器 │ │ ├── general_emojis: [] │ │ ├── trigger_emojis: {} │ │ ├── trigger_keywords: {} │ │ ├── general_probability: 0.3 │ │ └── server_probability: 0.2 │ └── system/ # 系統配置 │ ├── name: "角色名稱" │ ├── token_env: "{CHARACTER_ID}_TOKEN" │ ├── proactive_keywords: [] │ ├── enabled: true │ ├── allowed_guilds: [] │ ├── allowed_channels: [] │ ├── enable_dm: false # 私訊功能開關 │ ├── allowed_dm_users: [] # 允許私訊的使用者 ID 列表 │ ├── intro: "角色簡介文字" │ ├── allowed_custom_prompt: false # 是否啟用自定義提示詞 │ ├── custom_prompt: "自定義提示詞內容" # 個別角色提示詞設定 │ └── gemini_config: { # 統一 Gemini 配置 │ ├── model: "gemini-2.5-pro" │ ├── temperature: 1.0 │ ├── top_k: 40 │ ├── top_p: 0.9 │ ├── max_output_tokens: 2048 │ └── enabled: true │ } ``` </br> # Cybrancee 這個平台的用途是讓 BOT 一直保持在線上的狀態,我嘗試過 Replit 和 GCE,覺得還是 Cybrancee 使用起來最友善也最順手,雖然需要收費,但他的方案很實惠,而且有第一個月免費的優惠碼,所以最後決定使用 Cybrancee。 你可以選擇看以下文字教學,或是看 Under Ctrl 的教學影片(如下),內容大同小異,我也是看這個影片操作的。 - [🕐 How to Host your Discord Bot 24/7 (Updated)](https://youtu.be/EV9MJUM_FQE?si=GwZ8vBwKpa_0Uh8D&t=400) </br> ## 建立帳號 1. 前往 [Cybrancee](https://cybrancee.com/discord-bot-hosting)。 2. 點選 `See Plans and Pricing`。 ![image](https://hackmd.io/_uploads/HJB5VC3Ulx.png) 3. 點選 `Starter` 方案。 ![image](https://hackmd.io/_uploads/B1QbH038xg.png =40%x) 4. 勾選以下選項: Choose Billing Cycle: `Monthly` Server Location: `North America (West)` Discord Bot Type: `Python` Additional Information: `Terms of Service` 打勾 5. 以上都勾選完畢後,點選 `Continue` ➡️ `Continue`。 6. 折扣碼 Promotion,可享一個月免費。 ``` UNDERCTRL ``` 7. 選好付款方式後就可以 `Checkout`。 8. Getting Started:選擇 `BOT Hosting`。 9. 驗證 email。 10. 驗證完畢後你會收到一封信(Account Created),點選郵件中的 `Setup Your Account`,開始設置你的帳號密碼。 11. 完成後你會看到這個畫面,點選 `Manage server`。 ![image](https://hackmd.io/_uploads/S1bPYC2Ugx.png) </br> ## 匯入 Github 檔案 1. 左邊側位找到 `File`,把這邊的檔案全部刪掉。 14. 把你剛剛在 [Github 下載的解壓縮檔案](https://hackmd.io/@kikyoicecream/H1lydGdree?stext=2493%3A26%3A0%3A1753432412%3AE6AiHO)全部丟進去,壓縮檔裡面有個資料夾會傳不上去,那個不用上傳。 1. 全部上傳之後應該會類似下圖這樣,有些檔案會在程式啟動後自動安裝。(圖片是示意圖,檔案不會完全一樣) ![image](https://hackmd.io/_uploads/H1dt6XWPgg.png) 16. 左側欄位找到 `Startup`,按照圖中欄位輸入文字: BOT PY FILE: `main.py` ADDITIONAL PYTHON PACKAGES: `discord` REQUIREMENTS FILE: `requirements.txt` ![image](https://hackmd.io/_uploads/BkKfZKAIxx.png) 16. 輸入完畢後重啟一下伺服器:左側欄位找到 `Settings` ➡️ `Reinstall Server`。 ![image](https://hackmd.io/_uploads/S1CWfYRIxe.png) 17. 再回到 `Files`,建立 `.env`。 ![image](https://hackmd.io/_uploads/SkPXbHbPgg.png) 這個檔案裡面需要有三個金鑰: - [Discord Bot Token](https://hackmd.io/@kikyoicecream/H1lydGdree?stext=1649%3A19%3A0%3A1753432519%3AEehSLU):這個在後面的章節還會提到,如果看不懂怎麼填可以先跳過。 - [GOOGLE_API_KEY](https://hackmd.io/@kikyoicecream/H1lydGdree?stext=2171%3A17%3A0%3A1753465412%3AOLMvYm) - [FIREBASE_CREDENTIALS_JSON](https://hackmd.io/@kikyoicecream/H1lydGdree?stext=3855%3A29%3A0%3A1753432591%3A0ALNr9) 在輸入框貼上以下內容(# 號部分是註解,可刪可不刪): ``` # Discord Bot Token 設定(全大寫) (CHARACTER_ID)_TOKEN= # 範例: # SHEN_ZE_TOKEN= # GU_BEICHEN_TOKEN= # FAN_CHENGXI_TOKEN= # Google Gemini API 設定 GOOGLE_API_KEY= # Firebase 金鑰,必須把所有內容放在同一行 FIREBASE_CREDENTIALS_JSON={"type": "service_account","project_id": ... ,"universe_domain": "googleapis.com"} ``` 1. 點選 `Save Content` ➡️ 檔名為 `.env` ➡️ `Create File`。 ![image](https://hackmd.io/_uploads/SyAlvf-Dxg.png) ![image](https://hackmd.io/_uploads/HJT4VY0Ule.png) ## 修改 .env 檔 1. 前往 [Cybrancee](https://panel.cybrancee.com/server/)。 3. 左側欄位尋找 `file`,打開 `.env`。 ![image](https://hackmd.io/_uploads/H1GMC3ywlg.png) </br> # 如何建立角色 建立新的角色總共有以下步驟: 1. 建立新的 Discord BOT 3. 把新的 BOT 金鑰放進 `.env` 4. 複製 `template` 集合,並重新更名為 `character_id` 5. 修改 `character_id` 集合內容 6. 完成! 建立角色很重要的一點就是 `character_id`,這個是角色的身分證,程式碼都靠這個字串來辨識所有的資訊該歸屬哪位角色,這個 ID 建議使用容易辨識的字串,例如我的角色叫做「顧北辰」,`character_id` 我就會設定為 `gu_beichen`,這個在接下來的流程中會一直提到,所以先想好你的 `character_id` 吧! 另外你也需要先把 Discord 的開發者模式打開,請按照官方文件的步驟執行:[哪裡可以找到我的使用者/伺服器/訊息 ID?](https://support.discord.com/hc/zh-tw/articles/206346498-%E5%93%AA%E8%A3%A1%E5%8F%AF%E4%BB%A5%E6%89%BE%E5%88%B0%E6%88%91%E7%9A%84%E4%BD%BF%E7%94%A8%E8%80%85-%E4%BC%BA%E6%9C%8D%E5%99%A8-%E8%A8%8A%E6%81%AF-ID) </br> ## 建立新的 Discord BOT 前面我們已經有製作一個 BOT 了,所以這步驟可以跳過,不需要重複做;如果你是要做第二隻的話,就需要到 [Discord Developer Portal](https://discord.com/developers/applications) 再建立一個新的。([操作步驟傳送門](https://hackmd.io/@kikyoicecream/H1lydGdree?stext=949%3A24%3A0%3A1753465800%3AgWlmep)) </br> ## 把新的 Discord BOT TOKEN 放進 `.env` 同上,我們剛剛已經有匯入新建立的 Discord BOT TOKEN 至 `.env` ,所以這步驟可以跳過,不需要重複做;如果你是要做第二隻的話,只要在 `.env` 裡面新增一行 Discord BOT TOKEN 就可以囉!(等號以左要全部大寫) ``` CHARACTER_ID_TOKEN= ``` </br> ## 複製 `template`,並重新更名為 `character_id` 我們將複製 Firestore 裡的 `template` 來建立新的角色檔案,在此使用 Cloud Shell 並使用 Python 腳本來完成這個操作。 為什麼要這麼麻煩?因為 Firestore 不能直接修改集合名稱,所以我們才用這個方式來操作。 腳本步驟是: 1. 連接到你的 Firestore 資料庫。 2. 讀取 `template` 集合裡的所有文件。 3. 將 `template` 集合裡的所有文件,寫入到新的 `character_id` 集合。 請跟著以下步驟,直接在 Cloud Shell 中操作即可。 1. 前往 [Firestore](https://console.cloud.google.com/firestore/databases/),選擇你正在使用的資料庫。 ![image](https://hackmd.io/_uploads/Sk1Kh_0Lel.png) 1. 開啟 Google Cloud Shell,點選右上角的 icon,再點選 `Authorize`。 ![image](https://hackmd.io/_uploads/BkWR7QWPxx.png) 1. 使用 nano 建立檔案存放 Python 程式碼。 在 Cloud Shell 的提示字元後,輸入以下指令並按下 Enter: ``` nano copy_collection_recursive.py ``` 這會開啟一個新的、名為 copy_collection_recursive.py 的空白檔案。 2. 修改下方程式碼的「請在這裡設定你的參數」區段。(建議複製到記事本編輯) ``` # --- 請在這裡設定你的參數 --- project_id = "{你的 project id}" source_collection_name = "template" target_collection_name = "{character_id}" # -------------------------- ``` - {你的 project id}:在左上方可以查看,例如我的就是 `template-1db20`。 ![image](https://hackmd.io/_uploads/SyTSK7kvlx.png) 以我的範例就是: ``` project_id = "template-1db20" source_collection_name = "template" target_collection_name = "gu_beichen" ``` 將下方的 Python 程式碼完整複製,把你剛剛修改好的內容加入代碼,然後直接在 nano 編輯器的視窗中貼上。 ``` from google.cloud import firestore import os # --- 請在這裡設定你的參數 --- project_id = "{你的 project id}" source_collection_name = "template" target_collection_name = "{character_id}" # -------------------------- # 初始化 Firestore 用戶端 db = firestore.Client(project=project_id) def copy_subcollections(source_doc_ref, target_doc_ref): """ 一個遞迴函式,用來複製一份文件底下所有的子集合。 :param source_doc_ref: 來源文件的參考 (e.g. db.collection('A').document('B')) :param target_doc_ref: 目標文件的參考 (e.g. db.collection('C').document('D')) """ # 取得來源文件下一層所有的子集合 subcollections = source_doc_ref.collections() for subcollection in subcollections: # 取得子集合中的所有文件 docs = subcollection.stream() for doc in docs: # 在目標路徑下建立對應的子集合與文件 new_doc_ref = target_doc_ref.collection(subcollection.id).document(doc.id) new_doc_ref.set(doc.to_dict()) # 繼續往下檢查並複製更深層的子集合 # <-- 這就是遞迴的核心!函式在這裡呼叫了自己 copy_subcollections(doc.reference, new_doc_ref) # --- 主程式開始 --- print(f"準備從 {source_collection_name} 複製到 {target_collection_name} (包含所有子集合)...") print("-" * 30) # 獲取頂層集合的所有文件 top_level_docs = db.collection(source_collection_name).stream() docs_copied_count = 0 for doc in top_level_docs: print(f"正在複製主文件: {doc.id}") # 1. 複製主文件的資料 new_top_level_doc_ref = db.collection(target_collection_name).document(doc.id) new_top_level_doc_ref.set(doc.to_dict()) # 2. 呼叫遞迴函式,複製該文件底下的所有子集合 copy_subcollections(doc.reference, new_top_level_doc_ref) docs_copied_count += 1 print("-" * 30) print(f"✨ 深度複製完成!總共複製了 {docs_copied_count} 份頂層文件及其所有子集合。") ``` 貼上後,儲存並離開: - 按下 `Ctrl + O` (Output 的 O,不是 zero)畫面下方會詢問檔名,直接按 `Enter` 確認。 - 按下 `Ctrl + X` 離開 nano 編輯器。 3. 安裝 Firestore 函式庫:Cloud Shell 可能沒有預先安裝這個 Python 函式庫,使用以下指令來安裝它。 在 Cloud Shell 中執行: ``` pip install google-cloud-firestore ``` 4. 在 Cloud Shell 中執行腳本: ``` python3 copy_collection_recursive.py ``` 你會看到腳本開始執行,並逐一印出正在複製的文件 ID。等待它顯示「✨ 深度複製完成!」的訊息後,你就可以去 [Firestore](https://console.cloud.google.com/firestore/databases/) 查看,一個全新的 `character_id` 集合已經被建立好了,且裡面包含了所有建立角色所需要的範本資料。 5. 現在你已經複製了我預設的範本,並且更名為你的新角色名稱,接著就可以直接編輯 `profile` 裡面的人設了! ![image](https://hackmd.io/_uploads/HJLafikvel.png) </br> ## 修改 `character_id` 集合內容 資料庫裡有些集合和文件是不能更改的,不然會出現錯誤,以下帶你大致認識一下資料庫的結構。 ### emoji_system - `enable`:如果不想要這個 BOT 按 emoji 的話可以改成 false。 - `general_emojis`:裡面的 emoji 可以新增或刪除。 - `general_probability`:如果沒有檢測到特定關鍵字,從 `general_emojis` 中隨機選擇,預設機率 0.2 (20%)。 - `server_probability`:如果都沒有,嘗試使用伺服器自訂 emoji,預設機率 0.3 (30%)。 - `trigger_emojis`:`trigger_keywords` 會觸發的表情符號,可以新增或刪除,只要跟 `trigger_keywords` 是相對應的資料就好。例如 `trigger_keywords` 裡有 `happy`,`trigger_emojis` 也要新增相對應的 `happy`emoji。 - `trigger_keywords`:每個情緒的關鍵字,可以新增或刪除。 </br> ### profile 裡面的欄位都可以任意編輯,以及新增屬性,例如我的預設裡面沒有他的穿衣風格,你就可以新增一個 `穿衣風格` 的字串欄位。 如果想知道欄位的屬性要選什麼(字串還是陣列?),可以問 AI 來決定。 </br> ### system - `allowed_channels`:BOT 可以發送回覆的頻道,每個頻道 ID 單獨一行,在這個陣列底下新增欄位時選擇「字串(string)」。 - `allowed_custom_prompt`:是否啟用自定義提示詞。如果你要這個角色使用不同的風格回應的話,就設定為 `true`,若為 `false` 則是使用預設提示詞。 - `allowed_dm_users`:可以私訊這個 BOT 的使用者 ID,在這個陣列底下新增欄位時選擇「字串(string)」。 - `allowed_guilds`:BOT 可以發送回覆的伺服器,每個伺服器 ID 單獨一行,在這個陣列底下新增欄位時選擇「字串(string)」。 - `enabled_dm`:是否啟用 BOT 私訊功能,預設為不啟用(false)。 - `custom_prompt`:這個角色專屬的自定義提示詞,若要使用此提示詞,`allowed_custom_prompt` 必須為 `true`。 - `enabled`:是否啟用 BOT,預設為啟用(true)。 - `gemini_config`:Gemini 的參數調整。 - `max_output_token`:最大輸出 token 數。 - `model`:Gemini 模型名稱,請參考[官方文件](https://ai.google.dev/gemini-api/docs/models)來填寫。 - `temperature`、`top_k`、`top_p`:建議先保持原參數,或了解意義後再調整。 - `intro`:角色簡介,會出現在斜線指令中。 - `name`:BOT 的名字,主要出現在後台數據中。 - `proactive_keywords`:呼叫的關鍵字, - `token_env`:Discord Bot Token 的環境變數,用來讓程式知道要從哪裡讀取 Discord Bot Token,必須和 `.env` 裡所設定的一模一樣(全部大寫)。 :::warning 如果 `enabled_dm` 為 `true` 又沒設定 `allowed_dm_users` 名單的話,等於是每個人都可以私訊 BOT,會造成不可控的 API 使用量,記得要檢查一下! ::: </br> ### users 這邊存放所有跟 BOT 互動的使用者記憶,在對話的過程中他會以使用者 ID 新增文件,開始聊天之後,BOT 會自動把記憶存放在這邊,以 `user_id` 來建立陣列欄位,大概會是下方圖片這種結構: ![image](https://hackmd.io/_uploads/r1rthigwgg.png =80%x) </br> # 啟動 BOT! 當你都完成好你的角色設定後,就可以執行最後一步啦! 1. 前往 [Cybrancee](https://panel.cybrancee.com/server/)。 4. 左側欄位找到 `Console`,點選 `Start`,如果你看到底下的 Console 跑了一堆字之後顯示啟用成功的字樣,應該就可以看到你的 BOT 上線囉! ![image](https://hackmd.io/_uploads/HkF_VGBvee.png) </br> # Firestore 中的 `prompt` 集合 在此也介紹一下 `prompt` 集合裡面有放哪些資訊,以下的內容可以在 Github 檔案中的 `prompt.txt` 中查看易讀版本。 ## memories_summary 📍 功能:當記憶條目過多時,將多條記憶整合成一條精簡摘要 🔄 使用時機:當使用者記憶數量超過設定門檻(預設 15 則)時自動觸發 ⚙️ 工作流程: 1. 接收該使用者的所有記憶條目 2. 合併相似的記憶內容 3. 移除重複資訊 4. 生成統整後的摘要(< 300 字) ## user_memories 📍 功能:從使用者對話中提取重要資訊並生成結構化記憶 🔄 使用時機:每當使用者與角色對話後,系統會自動使用此 prompt ⚙️ 工作流程: 1. 接收使用者的對話內容 2. 分析對話中的重要資訊(喜好、經歷、特徵等) 3. 生成簡潔的記憶條目(每則 < 40 字) ## system 📍 功能:定義角色的行為模式、說話風格和回應邏輯 🔄 使用時機:每次生成角色回應時都會使用 ⚙️ 工作流程: 1. 載入角色的基礎設定模板 2. 結合角色 persona、使用者記憶、群組情況 3. 構建完整的系統提示詞 4. 指導 AI 生成符合角色特色的回應 # 斜線指令 每個角色都有四個指令可以使用: 1. `/{character_id}_intro`:角色簡介。 2. `/{character_id}_restart`:重新啟動 Bot。 3. `/{character_id}_keywords`:顯示角色的呼叫關鍵字,你的訊息如果包含其中一個關鍵字,他就會主動回覆你。 4. `/{character_id}_memories`:顯示角色與使用者的記憶內容。 </br> # 常見問題 FAQ ### 參數錯誤 果你解壓縮時出現參數錯誤,可以嘗試從 Github 單獨下載這個檔案。 ![image](https://hackmd.io/_uploads/rk_m6QbDlx.png =50%x) --- ### Cybrancee 後台出現「❌ 沒有可啟動的 Bot,請檢查 Token 設定」 可以從以下幾點開始排查: 1. `character_id` 是否一致? 2. 金鑰後面是否有空白? 3. Firestore 中的 `character_id` 集合是否有空白? 4. Firestore 專案金鑰是否是對應到角色資料庫? ---