主題 達人專欄

輕鬆入門!哈哈姆特機器人開發套件 for Golang

解凍豬腳 | 2022-02-03 19:15:01 | 巴幣 3092 | 人氣 807

 
前篇:《製作哈哈姆特不 EY 的聊天機器人!架設原理概述》

上面這篇是三年前寫的哈哈姆特機器人運作原理跟簡單的訊息收發範例。過往只是大致描述了巴哈姆特提供了什麼樣的 API(以及怎麼用)而已,實際上要傳送 HTTP request、解析 response 內容這些事情還是得自己來。如果要認真開發一個哈哈姆特機器人的話,把這些東西從頭寫起來還是蠻麻煩的。

這幾年斷斷續續摸熟了 Golang 這門語言的基礎,找了機會回頭來做了專門處理哈哈姆特機器人訊息的套件,也算是終於把這個坑給填完了。


► 簡介

Repo:https://github.com/upk1997/go-hahamut-bot
說明文件(英文):https://github.com/upk1997/go-hahamut-bot/blob/master/README.md
說明文件(繁中):https://github.com/upk1997/go-hahamut-bot/blob/master/README_zh-tw.md

支援以下功能:
* 透過本機檔案路徑或圖片連結的上傳圖片功能
* 傳送文字訊息、貼圖訊息、圖片訊息、啟動事件訊息、更新事件訊息
* 專門用來解析 webhook 事件的 parser
* 承上,parser 自帶強制檢查簽章的功能


► 使用方法

當你想用 Golang 來開發一個哈哈姆特機器人的時候,只要用 go get 指令把套件載下來:
go get -u "github.com/upk1997/go-hahamut-bot"

然後在 code 裡面把這個 package 引到你的 Golang 專案:
import "github.com/upk1997/go-hahamut-bot"

把對象產生出來(當然在這之前你得先到創作者後台申請一個機器人,你才有 ID、token、key):
myBot := hahamut.NewBot(botID, botAccessToken, botSecretKey)

接著就可以直接用短短的幾行 code 來收發訊息:
myBot.SendText("johnny860726", "Hello")

myBot.SendSticker("johnny860726", "1", "08")

image, _ := myBot.UploadImageFromURL("https://i.imgur.com/9tzLAzZ.jpg")
myBot.SendImage("johnny860726", image)

剩下的細節(包含完整的範例),你可以直接在上面提供的說明文件看到。


► Bot on Heroku

為了安全考量,巴哈姆特限制必須在 HTTPS 上面收發訊息,也因此如果你是在自己的本機環境上面執行、使用這個套件的話,最多就只能做到發送訊息、貼圖、圖片而已。想要「接收來自使用者的訊息」的話,你就必須架設一個 HTTP 伺服器(見說明文件裡的 HTTP Server & Webhook Example 一段),並且有域名(domain name)可以跑 HTTPS 才行。

當然我這個人是沒有這麼勤奮,也懶得花什麼錢去租主機,所以一般我會建議用 Heroku 之類的環境,光是網站給的免費額度就很夠用了,還自帶 HTTPS,根本不用煩惱這些有的沒的。

要注意的是我們把哈哈姆特機器人套件引到專案裡面之後,必須執行:
go mod vendor

把引用的套件複製一份到你的專案目錄下,你的專案內容才會完整,也才能推到 Heroku 上面的 repo,避免 Heroku 的主機發生抓不到套件的問題。

另外一方面,如果你直接把 secretKey、token 這些比較敏感的資訊寫在 code 裡面的話,要注意別把你的這些 code 推到公開的 GitHub repository 上面,不然你的 key 就會被看光光了,對你的機器人來說會很危險。我會建議先確定好你的機器人 repo 是 private 的,到 Heroku 上面連動 GitHub 帳號,然後才把推到 GitHub 上面的程式碼 deploy 到伺服器上面去:




如果你對 Golang 跟哈哈姆特不 EY 的機器人很有興趣,希望這篇對你來說會有幫助。

測試下來應該是不會有什麼 bug 才對,如果有什麼想要修改的就歡迎大家再把這個套件 fork 到自己的 repo 裡面改,送 pull request 過來的話我也不見得都會按接受就是,因為我就是個懶人嘛 _(:з」∠)_


文章縮圖:哈哈姆特不 EY 官方機器人桃子 BOT 大圖
送禮物贊助創作者 !
70
留言

創作回應

迅疾747向創作者進行贊助 ✦
https://truth.bahamut.com.tw/s01/202202/774a16ad4a301163178ab82869c97ef9.JPG
2022-02-03 19:35:46
解凍豬腳
感謝贊助
都看不懂了還贊助我 哪有這樣的 [e21]
2022-02-05 10:46:25
我好嫉妒你們 哼!
才華洋溢的豬腳
2022-02-03 19:49:11
解凍豬腳
小妹我身上也是香味四溢ㄛ…
2022-02-05 10:46:36
很安全
到 Heroku 上面連動 GitHub 帳號,然後才把推到 GitHub 上面的程式碼 deploy 到伺服器上面去→可教學嗎
2022-02-04 20:10:05
解凍豬腳
這步驟有好幾個,不曉得你是指哪一個環節

一般我們先在 GitHub 註冊帳號、建立一個 private repository

接著寫好 code,利用 Git 把專案內容 add、commit、push 到 GitHub 裡面你建立的這個 repo 裡面
接下來在 Heroku 也註冊一個帳號,建立一個 web application

點開這個建立好的 web application,找到 deploy 的選項,你應該會看到 deploy method 上面有 Heroku Git, GitHub, Container Registry 這三種,選 GitHub,經過一些簡單的驗證之後就可以連動了

這裡的連動只是指 Heroku 有權讀取你這一個 GitHub repo 的內容,還沒真正把這些 code 寫到 Heroku 的 app 裡面去執行,你要經過正式的 deploy(部署)才能讓這些 code 在 Heroku 上面跑

deploy 的方式可以是手動(你每次如果要更新 code,就再進來這個頁面按 manual deploy 這邊的 deploy 按鈕),也可以是自動(enable automatic deploys,啟用的話你每次 push 新版本的 code 到 GitHub 之後,這些 code 會接著再自動部署到 Heroku app 上面去)
2022-02-05 10:56:35
解凍豬腳
要注意你的 repo 一定要是 private,不然你的 code 內容就會是公開給大家看到的
https://i.imgur.com/RvlfxyG.png
2022-02-05 11:00:17
解凍豬腳
Heroku 相關流程參閱:
https://home.gamer.com.tw/artwork.php?sn=4412222
2022-02-05 11:02:10
很安全
謝謝,這部分寫一篇,我收藏
2022-02-05 12:09:46
勳章向創作者進行贊助 ✦
2022-02-26 18:14:37
解凍豬腳
感謝贊助 [e38]
2022-02-28 05:31:52

更多創作