使用 Go 發送微信羣消息
背景
最近的某個副業需要我寫一個腳本(腳本內容就不說了),需要通知羣成員,儘快地做出響應。所以去找一下 Go 是否有這樣的類庫。
在這個腳本里面,我只需要發送信息的能力即可。
openwechat
在尋找了一會之後發現 https://github.com/eatmoreapple/openwechat
這個庫,這個庫支持以下能力:
-
消息回覆、給指定對象(好友、羣組)發送文本、圖片、文件、emoji 表情等消息
-
熱登陸(無需重複掃碼登錄)、自定義消息處理、文件下載、消息防撤回
-
獲取對象信息、設置好友備註、拉好友進羣等
這很明顯已經滿足我的需求了,畢竟我的需求超簡單的!
例子
那我們立刻使用項目中的 README.md 例子來測試一下。
package main
import (
"fmt"
"github.com/eatmoreapple/openwechat"
)
func main() {
bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式
// 註冊消息處理函數
bot.MessageHandler = func(msg *openwechat.Message) {
if msg.IsText() && msg.Content == "ping" {
msg.ReplyText("pong")
}
}
// 註冊登陸二維碼回調
bot.UUIDCallback = openwechat.PrintlnQrcodeUrl
// 登陸
if err := bot.Login(); err != nil {
fmt.Println(err)
return
}
// 獲取登陸的用戶
self, err := bot.GetCurrentUser()
if err != nil {
fmt.Println(err)
return
}
// 獲取所有的好友
friends, err := self.Friends()
fmt.Println(friends, err)
// 獲取所有的羣組
groups, err := self.Groups()
fmt.Println(groups, err)
// 阻塞主goroutine, 直到發生異常或者用戶主動退出
bot.Block()
}
這段代碼的內容比較簡單:
-
在瀏覽器中顯示二維碼
-
用戶掃碼模擬微信登錄
-
獲取掃碼微信的信息
-
獲取用戶所有的好友
-
獲取用戶所有的羣組
但是這裏有兩個問題需要注意:
-
模式只能選擇桌面模式,當我使用網頁版模式的時候會報以下錯誤:
login forbidden: try to login with desktop mode
-
我猜測是因爲微信那邊已經不運營微信網頁版了
-
獲取的不是所有的羣聊
-
從 issue[1] 找到解答:需要將羣聊保存到通訊錄纔行。
實現對特定羣發送文本消息
因爲作者封裝得還算不錯,發送文本消息非常簡單,就一個函數的事情。
func main() {
bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式
// 註冊登陸二維碼回調
bot.UUIDCallback = openwechat.PrintlnQrcodeUrl
// 登陸
if err := bot.Login(); err != nil {
fmt.Println(err)
return
}
// 獲取登陸的用戶
self, err := bot.GetCurrentUser()
if err != nil {
fmt.Println(err)
return
}
// 獲取所有的羣組
groups, err := self.Groups()
for _, group := range groups {
if group.NickName == "愛發白日夢的後端" {
_, err = self.SendTextToGroup(group, "Hello!!!羣裏的朋友大家好呀!!!")
if err != nil {
panic(err)
}
}
}
// 阻塞主goroutine, 直到發生異常或者用戶主動退出
bot.Block()
}
核心的函數就是 SendTextToGroup 這個方法,直接調用即可發送羣消息了。
效果如下:
總結
雖然我目前的需求已經被滿足了,不過這個庫裏面的好多功能我都沒有去用過,也沒有在這裏介紹,感興趣的同學可以自行深入去了解。
參考資料
[1]
issue: https://github.com/eatmoreapple/openwechat/issues/441
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/tl-sBa44jkFkyNwjJlS89g