上面這篇是三年前寫的哈哈姆特機(jī)器人運(yùn)作原理跟簡單的訊息收發(fā)範(fàn)例。過往只是大致描述了巴哈姆特提供了什麼樣的 API(以及怎麼用)而已,實(shí)際上要傳送 HTTP request、解析 response 內(nèi)容這些事情還是得自己來。如果要認(rèn)真開發(fā)一個哈哈姆特機(jī)器人的話,把這些東西從頭寫起來還是蠻麻煩的。
這幾年斷斷續(xù)續(xù)摸熟了 Golang 這門語言的基礎(chǔ),找了機(jī)會回頭來做了專門處理哈哈姆特機(jī)器人訊息的套件,也算是終於把這個坑給填完了。
? 簡介
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
支援以下功能:
* 透過本機(jī)檔案路徑或圖片連結(jié)的上傳圖片功能
* 傳送文字訊息、貼圖訊息、圖片訊息、啟動事件訊息、更新事件訊息
* 專門用來解析 webhook 事件的 parser
* 承上,parser 自帶強(qiáng)制檢查簽章的功能
? 使用方法
當(dāng)你想用 Golang 來開發(fā)一個哈哈姆特機(jī)器人的時候,只要用 go get 指令把套件載下來:
go get -u "github.com/upk1997/go-hahamut-bot" |
然後在 code 裡面把這個 package 引到你的 Golang 專案:
import "github.com/upk1997/go-hahamut-bot" |
把對象產(chǎn)生出來(當(dāng)然在這之前你得先到創(chuàng)作者後臺申請一個機(jī)器人,你才有 ID、token、key):
myBot := hahamut.NewBot(botID, botAccessToken, botSecretKey) |
接著就可以直接用短短的幾行 code 來收發(fā)訊息:
myBot.SendText("johnny860726", "Hello") myBot.SendSticker("johnny860726", "1", "08") image, _ := myBot.UploadImageFromURL("https://i.imgur.com/9tzLAzZ.jpg") myBot.SendImage("johnny860726", image) |
剩下的細(xì)節(jié)(包含完整的範(fàn)例),你可以直接在上面提供的說明文件看到。
? Bot on Heroku
為了安全考量,巴哈姆特限制必須在 HTTPS 上面收發(fā)訊息,也因此如果你是在自己的本機(jī)環(huán)境上面執(zhí)行、使用這個套件的話,最多就只能做到發(fā)送訊息、貼圖、圖片而已。想要「接收來自使用者的訊息」的話,你就必須架設(shè)一個 HTTP 伺服器(見說明文件裡的 HTTP Server & Webhook Example 一段),並且有域名(domain name)可以跑 HTTPS 才行。
當(dāng)然我這個人是沒有這麼勤奮,也懶得花什麼錢去租主機(jī),所以一般我會建議用 Heroku 之類的環(huán)境,光是網(wǎng)站給的免費(fèi)額度就很夠用了,還自帶 HTTPS,根本不用煩惱這些有的沒的。
要注意的是我們把哈哈姆特機(jī)器人套件引到專案裡面之後,必須執(zhí)行:
go mod vendor |
把引用的套件複製一份到你的專案目錄下,你的專案內(nèi)容才會完整,也才能推到 Heroku 上面的 repo,避免 Heroku 的主機(jī)發(fā)生抓不到套件的問題。
另外一方面,如果你直接把 secretKey、token 這些比較敏感的資訊寫在 code 裡面的話,要注意別把你的這些 code 推到公開的 GitHub repository 上面,不然你的 key 就會被看光光了,對你的機(jī)器人來說會很危險。我會建議先確定好你的機(jī)器人 repo 是 private 的,到 Heroku 上面連動 GitHub 帳號,然後才把推到 GitHub 上面的程式碼 deploy 到伺服器上面去:
如果你對 Golang 跟哈哈姆特不 EY 的機(jī)器人很有興趣,希望這篇對你來說會有幫助。