此 Line Bot 可設定關鍵字與圖片,若聊天中提及該關鍵字會回覆的所設定之圖片
Youtube 介紹影片播放清單請點此
若想試玩此 BOT 請搜尋 Line ID "@srh5401g"
或掃描以下 QR Code 加入好友
- Python + Flask + SQLAlchemy
- GCP - cloud function
- 在機器人所在的聊天室有人講話時便會透過 webhook 觸發此程式,並會依照以下邏輯開始動作:
- new 出新 bot 實體
- new 出新 chat 實體,並去資料庫撈資料 (如該使用者使用權限、該聊天室設定、機器人設定等等)
- 將 chat 餵給 bot,bot 依據該 chat 的設定檔決定該怎麼做事
- 將所有的 skill class 與 mode class 的方法輪巡過一遍,執行所有不為 private 的功能 而是否符合執行的條件則在各 skill、mode 中判斷 如此能做到如果新增新的機器人技能或是新的行為模式時 可以不用在主邏輯中增加 if else 去判斷要做什麼而是獨立判斷進而方便後續維護
- 程式進入點在 main.py (Controller)
- 每筆獨立的聊天訊息在傳進來時會被包裝成自定義的 chat class,並設定其 metadata 例如:
- 該使用者是否已被 banned 所以機器人不用理會該使用者
- 該聊天室的設定(回話長度、是否為不回話的靜音模式等)
- 機器人當下是否設定為要接收新圖片
- 機器人所有設定皆寫在 bot 資料夾中方便維護
- 讓使用者設定關鍵字與圖片組合 使機器人根據聊天中的關鍵字回覆已設定的圖片給該聊天群組 影片
- 列出目前已設定過的關鍵字刪除已設定過的關鍵字 影片
- 設定機器人在該聊天群組的回圖行為: 不回圖 or 隨機回所有群組創的圖(預設) or 只回該群組上傳的圖
- 設定機器人在該聊天群組裡關鍵字符合超過(大於等於)幾字才回話,可以設為 2~15 影片
e.g. trigger_chat = 3
"帥哥" -> 不會被觸發
"我是帥哥" -> 會被觸發
1-1. 圖片字數有限制,空白或是特殊符號皆算數
1-2. 設定同圖片名稱則會蓋掉前面上傳的
1-3. 如果設定多次名字,以最後一個命名為主
2-1. 若上傳URL則必須為 http 開頭(https亦可) .jpg .jpeg .gif .png 結尾(其餘副檔名不支援)
3-1. 若命名上有重疊,則會觸發命中字數較多的那個
e.g. 圖片1: 帥哥
圖片2: 我是帥哥
聊天內容: 你在問我我是帥哥嗎?
將會回覆圖片2,因為命中字數較長
- 0 = 不回圖
- 1 = 隨機回所有群組創的圖(此為預設)
- 2 = 只回該群組上傳的圖
(只回該群組上傳的圖,當不想看到其他群組設定的圖片時可使用
畢竟有時別人的梗我們不一定懂,或是有人放廣告之類的騷擾訊息)
e.g. trigger_chat = 3
"帥哥" -> 不會被觸發
"我是帥哥" -> 會被觸發
e.g. --delete 我是帥哥
1. 只能刪除自己的上傳的圖片(此部分可議)
2. 只能刪除於該聊天室所創的圖片
- 目前有潛在的效能問題,因為每句對話皆會去撈 DB 內所有 pic_name 來判斷是否有在裡面
1-1. DB 連線數會是個問題
1-2. 當圖片多的時候都撈整個 table 回來變得不切實際 - 所有 None group 對話的 mode 設定會算在同一個(也就是每個私底下敲機器人的對話 mode 設定會共用)
- --list 的表格中若字串超過一定長度會爆框,或字串重疊,中文英文的顯示長度也不一樣需要考慮進去
- meme pic 製作功能,效果預期跟 meme gen 一樣,有 open source code 可以參考
- 功能詳見 https://memegen.link/
- source code https://github.com/jacebrowning/memegen
- 讓 user report 不好的圖片機制
- 預計是讓使用者回報哪句話出現不好的圖片,甚至可以附註為什麼
- 管理員能夠透過對話獲得回報的內容並人工檢查圖片並刪除
- 管理員功能
- 管理員登入/登出功能(可以研究能不能用 3rd 的 auth 機制之類的)
- banned 帳號
- 檢視使用者舉報有問題的內容
- 使用最高權限直接無條件刪除圖片
- 建議在 Line 設定將「自動下載照片」取消打勾 設定 > 照片。影片 > 自動下載照片