主題 達人專欄

巴哈姆特勇者造型小幫手 v1.0

解凍豬腳 | 2021-12-28 19:15:01 | 巴幣 5672 | 人氣 1035

 
► 介紹

你也可以從哈哈姆特私訊的「神秘好友」欄位找到這隻機器人

我們都知道小屋一直有個「勇者造型相本」的功能,可以把你目前身上穿的勇造組合給儲存下來。這個功能算是比較老舊的東西,每個帳號最多只能儲存 20 組勇者造型,只要達到上限就只能把既有的給砍掉來騰出空間了,不算好用。

這個聊天機器人的作用很簡單,就是用來儲存你目前身上穿著的勇者造型,可以部分取代原本的勇者造型相本功能。只要對這個聊天機器人輸入指令「/avatar」,它就會把你的勇造直接存在你們的聊天對話裡,同時列出你目前身上穿的勇造配件列表:


和勇者造型相本不同的是,除了自己的勇造以外,如果你看到了別人的勇造很可愛很實用,想要留著拿去滿足其他的用途,勇者造型小幫手還可以幫你把別人的勇造儲存下來。

只要在「/avatar」後面加上目標的帳號(中間一個半形空格),它就會幫你把對方的勇造存下來,並且把搭配的列表一條一條列給你看:


這樣一來,以後每當想對照自己以前的勇造穿搭,只要打開哈哈姆特、點開勇者造型小幫手,就可以從對話紀錄看到自己過去儲存下來的勇造了。

比較一下兩者功能的差別:


► 運作環境、開發考量

主機商:Heroku
程式語言:Golang(Go 語言)
資料庫:Google Apps Script @Google Sheet

原理很簡單,就是讓我的伺服器做下面這三件事:
1. 把你現在的勇造圖片存下來
2. 把勇者造型列表讀取出來之後整理好
3. 藉由機器人把上面這兩樣東西回傳給你

其實單單只是想要達成前面這兩件任務的話,跟聊天機器人本身關聯並不大——正如剛才說的,要把它開發成一個獨立的網頁也行,就好像深海異音的勇者查詢系統也是個獨立的爬蟲服務,不必仰賴聊天機器人。

只是,哈哈姆特的聊天室有幾個特性,讓我覺得很適合把這個勇造的服務綁在哈哈姆特的機器人上面:
1. 哈哈姆特的聊天室自帶圖床,而且這個圖床還內建了檔案的 hash 檢查功能(註),節省資源
2. 透過哈哈姆特的管道,我可以很明確地知道是哪個巴哈帳號使用這個服務,而不是站外的有心人士惡意濫用
3. 大家不用知道我的主機網址,只需要打開巴哈的私訊功能就可以找到它,並且直接使用
4. 我開發起來很輕鬆,不必刻介面刻到昏頭,媽的前端

註:在聊天室上傳圖片的時候,巴哈姆特的伺服器會檢查先前是不是有人上傳過一模一樣的圖片,如果有的話就直接挪用舊的圖片連結

其實本來有考慮獨立開發一個專用的巴哈勇造相本服務,讓大家可以共同閱覽這些相本,甚至可以連動巴哈的系統來做個按讚的功能、勇造的排行什麼的,這樣也能解決它不能個別刪除、個別調整閱覽權限等等的問題(無法個別刪除是受到哈哈姆特聊天室的先天限制)。

不過因為我沒有自己的伺服器和資料庫,擔心只憑 GitHub、Heroku、Firestore 的免費資源會不太好控制成品的品質,再加上我從來沒有建置過這種非個人使用的服務,還沒有一定的把握可以保證這些資源不被濫用,所以目前就只能先維持這樣了,如果我還有什麼鬼點子再來找時間開發吧。
 
送禮物贊助創作者 !
35
留言

創作回應

Darkness
強耶!實用!大推!
2021-12-28 23:43:08
解凍豬腳
感謝,希望大家喜歡 [e7]
2021-12-30 22:21:24
Rolls-Royce向創作者進行贊助 ✦
感謝再感謝
2021-12-29 01:18:13
解凍豬腳
感謝贊助 [e5]
2021-12-30 22:21:32
シッコク
媽的前端
2021-12-29 06:59:55
解凍豬腳
媽的前端!
2021-12-30 22:21:37
每個男生都該有姊姊
笑死真的超討厭刻前端 想問這個是怎麼做到的 以網頁來說想跟SERVER溝通都需get/post /getAvatar?id=xxx 之類的 利用聊天室是如何達到這樣的效果呢?如果是用巴哈的PHP可能可以判斷輸入/avatar而回傳頭貼訊息 但這伺服器好像是你私人的對吧?
2022-01-03 11:14:14
解凍豬腳
對,伺服器可以算是私人的沒錯,至少 code 是我寫的

哈哈姆特的機器人是可以自訂 webhook 的,就像 LINE 的聊天機器人一樣
簡單來講巴哈姆特收到使用者訊息的時候,會按照特定的規範用 POST 模式把訊息轉發給開發者指定的 HTTP 伺服器

關於哈哈姆特機器人原理,你可以參考我三年前的文章:
https://home.gamer.com.tw/artwork.php?sn=4283806
(注意:如果你考慮使用 Golang 開發哈哈姆特聊天機器人並部署到 Heroku 上面,不要用 govendor 來管理套件,那個已經過時了,應該使用 go module 的 vendor 功能)
2022-01-03 14:22:57
(๑˘• ¸•)˘〈影ヨ⁆
原來有這麼讚的東西呀!謝謝製作囉。
2022-05-10 10:08:04

相關創作

更多創作