原神小幫手:一個多功能的 原神 & 星穹鐵道 Discord Bot 機器人,包含:即時便箋、Hoyolab 每日自動簽到、角色展示櫃、深境螺旋紀錄、旅行者札記...等等
GPL-3.0 License
歡迎將本專案所有或部分程式碼放入你自己的機器人中,只需要在你專案的網頁、README 或任何公開的說明文件放入本專案的作者與連結
Feel free to take all or part of the code to your own bot, just put the author and URL of this project in your project's website, README or any public documentation.
Discord 支援伺服器:https://discord.gg/myugWxgRjd
使用機器人直接在 Discord 聊天頻道內查看原神、星穹鐵道內各項資訊,包含:
原神、崩壞3、星穹鐵道、未定事件簿、絕區零:
原神、星穹鐵道、絕區零:
原神:
/
查看各項指令/cookie設定
,Cookie 取得方式:https://bit.ly/3LgQkg0
/schedule排程
更多展示圖片、GIF 請參考巴哈介紹文章:https://forum.gamer.com.tw/Co.php?bsn=36730&sn=162433
Genshin-Discord-Bot
├── assets = 存放素材的資料夾
| ├── font = 畫圖所用到的字體
| └── image = 畫圖所用到的素材、背景圖
├── cogs = 存放 discord.py cog 資料夾,這裡有所有的機器人指令
├── cogs_external= 存放自訂的 discord.py cog 資料夾,你可以將自己指令的檔案放在這裡
├── configs = 存放設定檔的資料夾
├── database = SQLAlchemy ORM、資料庫操作相關的程式碼
| ├── alembic = = 資料庫結構變動版本控制
| ├── dataclass = 自定義的 data class
| └── legacy = 以前的資料庫程式碼,用來遷移舊資料之外沒有用
├── enka_network = 與 Enka Network API 相關的程式碼
| └── enka_card = Submodule,與畫 Enka 圖片相關的程式碼
├── genshin_db = 與 genshin-db API 相關的程式碼
| └── models = 存放 genshin-db 資料的 pydantic 模型
├── genshin_py = 與 genshin.py 相關的程式碼
| ├── auto_task = 與自動排程任務 (例如:簽到) 相關的程式碼
| ├── client = 向 API 請求資料相關的程式碼
| └── parser = 將 API 的資料轉成 discord embed 格式
├── star_rail = 星穹鐵道展示櫃程式碼
└── utility = 一些本專案用到的設定、公用函數、Log、表情、Prometheus...等程式碼
需要在此步驟取得:
接下來沒特別說明都以 Windows、使用 Powershell 來說明
找到你想放資料的地方,建立新資料夾 Genshin-Discord-Bot
,然後進入
下載 docker-compose.yml 檔案,放在資料夾內
文字編輯器開啟 docker-compose.yml
檔案,基本上都不用動,只要把你剛剛在 #網頁端 拿到的三個資料填入底下三個欄位即可,其他設定可根據自己的需求再改,完成後保存
123456789
123456789
ABCD123456789
在此資料夾開啟 Powershell,輸入底下命令即可運行
docker-compose up
若你想要可以關掉 Powershell 在背景執行的話,則使用
docker-compose up -d
Windows 右下角的鯨魚圖示打開 Docker Desktop 可以隨時管理機器人運行的狀態
註1:當運行後看到 【系統】on_ready: You have logged in as XXXXX
表示參數設置正確並成功啟動,此時機器人會自動同步所有指令到你的測試伺服器,稱為「本地同步」。
註2:若你輸入斜線 / 後看不到指令的話,請嘗試 CTRL + R 重新整理或是完全關閉 Discord 軟體並重啟 Discord。
註3:若要在多個伺服器間使用,請在你機器人的私訊頻道內輸入 $jsk sync
,並等待(約幾分鐘)Discord 將指令推送,稱為「全域同步」。
Genshin-Discord-Bot
,一樣先照上面做到第 4 步驟data
資料夾內的資料:bot.db
(emoji.json
),複製到新資料夾對應位置Genshin-Discord-Bot/
├── docker-compose.yml
└── data/
├── bot/
│ └── bot.db
├── app_commands.json
└── emoji.json
Genshin-Discord-Bot
目錄,因為資料庫結構有變動,需要先執行指令
docker run -v ${pwd}/data:/app/data ghcr.io/kt-yeh/genshin-discord-bot:latest python main.py --migrate_database
sudo docker run -v $(pwd)/data:/app/data ghcr.io/kt-yeh/genshin-discord-bot:latest python main.py --migrate_database
docker-compose up
即可開始運行機器人成功運行機器人後,你的資料夾結構應該是這樣:
Genshin-Discord-Bot/
├── docker-compose.yml = docker 設定擋,啟動機器人相關設定都在此檔案
├── cogs_external/ = 你可以放自己寫的 discord.py cog 到此目錄
└── data/ = 機器人運行時產生的資料都放在此目錄
├── bot/
│ └── bot.db = 資料庫檔案
├── font/ = 存放字體資料夾
├── image/ = 存放圖片資料夾
├── _app_commands.json = 指令 mention 設定檔案
├── _emoji.json = 表情符號設定檔案
├── grafana_dashboard.json = grafana 面板設定檔案
└── prometheus.yml = prometheus 伺服器設定擋
資料都放在 data
資料夾內,備份整個資料夾即可;還原的時候將備份的資料覆蓋回 data
資料夾即可
當專案有更新時,到 Genshin-Discord-Bot
目錄開啟 Powershell
docker-compose pull
docker-compose up -d
非必要,不配置表情符號也能正常運行機器人
data
目錄將 _emoji.json
重新命名為 emoji.json
emoji.json
檔案裡註:
<:表符名字:表符ID>
,例如:<:Mora:979597026285200002>
\:表符名字:
取得上述格式非必要,Sentry 是用來追蹤程式執行中沒接到的例外,並將發生例外當時的函式呼叫、變數、例外...等詳細資訊傳送到網頁上供開發者追蹤,若不需要此功能的話可以跳過此設定
https://[email protected]/xxx
)docker-compose.yml
檔案的 SENTRY_SDK_DSN
欄位裡註:
sentry_sdk.capture_exception(exception)
管理指令只能在配置檔案設定的測試伺服器內才能使用
/status:顯示機器人狀態,包含延遲、已連接伺服器數量、已連接伺服器名稱
/system:立即開始每日簽到任務、下載 Enka 展示櫃新素材
/system precense 字串1,字串2,字串3,...:變更機器人顯示狀態(正在玩 ...),每分鐘隨機變更為設定的其中一個字串,字串數量不限
/maintenance:設定遊戲維護時間,在此時間內自動排程(簽到、檢查樹脂)不會執行
/config:動態改動部分設定的值
另外,機器人包含了 jsk
指令可以做到載入/重載模組、同步指令、執行程式碼...等等,請參考 jishaku 網站 說明。
要使用 jsk 指令,可以
$jsk ping
@原神小幫手 jsk ping
總共需要三步驟,分別是
到 Grafana 官網 註冊帳號,途中會讓你選 Cloud 地區,直接預設就可以
辦完後回到 官網,右上角選 My Account,如下圖可以看到 GRAFANA CLOUD 裡面有 Grafana 與 Prometheus,在 Prometheus 上選擇 Send Metrics
滑到頁面中間,在 Password / API Key 這裡選擇 Generate now,然後下面的 Sending metrics 黑底部分很重要,先留在這個頁面
回到機器人資料夾,文字編輯器開啟 docker-compose.yml
檔案
prometheus
整段取消註解 (注意欄位格式要對齊)- PROMETHEUS_SERVER_PORT=9091
到 data
資料夾,文字編輯器開啟 prometheus.yml
檔案
回到剛才 Grafana 網頁,你會看到網頁上的 remote_write
欄位與 prometheus.yml
檔案最底下相對應,將網頁上 remote_write
的設定內容一一填入到 prometheus.yml
內的對應欄位,然後存檔
remote_write:
- url: https://....(此行填入 Remote Write Endpoint)
basic_auth:
username: 123456(此行填入 Username / Instance ID)
password: XXXXXX(此行填入 Password / API Key)
docker-compose up -d
有資料後,我們還需要讓資料顯示在儀表板上
與 1-2 步驟一樣,回到 官網,右上角選 My Account,這次我們在 Grafana 上按 Launch 啟動
左邊選 Dashboards,然後右邊點選 New → Import,之後按 Upload JSON file 按鈕
到 data
資料夾,上傳 grafana_dashboard.json
到 Grafana 上面,也可以複製貼上到 Grafana
成功匯入儀表板後,即可在儀表板上看到機器人的各項資料,到此完成結束
API:
Card:
Misc: