coding by 李東霖
- telegram bot
- python transitions(FSM)
- python web framework
- HTTPS server
- Google Firebase
盡量使用 python3 來跑
$ pip install -r requirement.txt
- windows
- 可點擊
Start_Server.bat
- 可點擊
- linux
- 可執行
$ sh Start_Server.sh
- 可執行
這邊會自動去抓 ngrok 的 https 網址 不用去修改程式碼 但如果要使用不同的 bot ,要更新 API token
$ python ChatBot_Server.py
如出現 Webhook OK!
代表成功開啟並設定
可以開始跟 bot 對話
bot username : @infinite_city_bot
這是一個小遊戲
需要自己打的指令如下
- /start
- 開始遊戲
- /about
- 關於遊戲
- /menu
- 遊戲選單
- /help
- 幫助
之後都會有 keyboard 協助選擇 也可以選擇亂回話,並不會導致 bot 當掉 bot 也會在回錯話時進行提醒
一開始有思考過
- 文字魔法遊戲
- 海龜湯
- 電子小說
- 地下城
最後選擇做一個在 地下城 冒險的遊戲
- 城鎮
- 地下城
- 可自由冒險,有7種房間
- 隨機生成地下城
- 在 server 開啟期間,所有走過地城會被記錄
- 多人
- 可儲存玩家資料
- 能允許多人遊玩
- reply_markup
- 方便使用者當遊戲來玩,減少打字的煩躁
- photo
- 增加趣味性,避免單純文字的煩悶
利用 DFA 的特性,用多個 transitions machine 做為 遊戲指令操作 跟 遊戲引擎運作
- 遊戲命令操作
- 共有 3 個 state
- wait 是等待使用者輸入
- command 是已判斷為遊戲指令,並進行操作
- echo 是將上述以外的輸入回傳並丟入遊戲引擎
- 為所有使用者共用
- 遊戲引擎操作
- 每個使用者有各自的 transitions machine
- 共有 6 個 state
- town 是使用者在城鎮時
- roomroute 是使用者在地城中某個路口
- roomevent 是使用者在地城中遇到事件
- roomevent_handle 是使用者在處理遇到的事件
- menu 是使用者開啟遊戲選單
- menu_command 是使用者正在執行選單的功能
因為在 server 上的 transition machine 必須要有多個才能去記錄每個使用者操作的狀態 因此使用 字典dict 結構去儲存使用者的 transition machine 與 玩家資訊
因為目前的設計上,只要關掉 server 重開 記錄都會消失,因此就找尋了簡單的後端即時資料庫 -- firebase 來把使用者的記錄保存下來,並隨時更新 firebase 也能從後端進行修改跟觀看,方便維護