使用Go語(yǔ)言實(shí)現(xiàn)發(fā)送微信群消息
背景
最近的某個(gè)副業(yè)需要我寫一個(gè)腳本(腳本內(nèi)容就不說(shuō)了),需要通知群成員,盡快地做出響應(yīng)。所以去找一下 Go 是否有這樣的類庫(kù)。
在這個(gè)腳本里面,我只需要發(fā)送信息的能力即可。
openwechat
在尋找了一會(huì)之后發(fā)現(xiàn) https://github.com/eatmoreapple/openwechat 這個(gè)庫(kù),這個(gè)庫(kù)支持以下能力:
- 消息回復(fù)、給指定對(duì)象(好友、群組)發(fā)送文本、圖片、文件、emoji表情等消息
- 熱登陸(無(wú)需重復(fù)掃碼登錄)、自定義消息處理、文件下載、消息防撤回
- 獲取對(duì)象信息、設(shè)置好友備注、拉好友進(jìn)群等
這很明顯已經(jīng)滿足我的需求了,畢竟我的需求超簡(jiǎn)單的!
例子
那我們立刻使用項(xiàng)目中的 README.md 例子來(lái)測(cè)試一下。
package main import ( "fmt" "github.com/eatmoreapple/openwechat" ) func main() { bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式 // 注冊(cè)消息處理函數(shù) bot.MessageHandler = func(msg *openwechat.Message) { if msg.IsText() && msg.Content == "ping" { msg.ReplyText("pong") } } // 注冊(cè)登陸二維碼回調(diào) 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, 直到發(fā)生異?;蛘哂脩糁鲃?dòng)退出 bot.Block() }
這段代碼的內(nèi)容比較簡(jiǎn)單:
- 在瀏覽器中顯示二維碼
- 用戶掃碼模擬微信登錄
- 獲取掃碼微信的信息
- 獲取用戶所有的好友
- 獲取用戶所有的群組
但是這里有兩個(gè)問題需要注意:
模式只能選擇桌面模式,當(dāng)我使用網(wǎng)頁(yè)版模式的時(shí)候會(huì)報(bào)以下錯(cuò)誤:login forbidden: try to login with desktop mode
我猜測(cè)是因?yàn)槲⑿拍沁呉呀?jīng)不運(yùn)營(yíng)微信網(wǎng)頁(yè)版了
獲取的不是所有的群聊
從 issue[1] 找到解答:需要將群聊保存到通訊錄才行。
實(shí)現(xiàn)對(duì)特定群發(fā)送文本消息
因?yàn)樽髡叻庋b得還算不錯(cuò),發(fā)送文本消息非常簡(jiǎn)單,就一個(gè)函數(shù)的事情。
func main() { bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式 // 注冊(cè)登陸二維碼回調(diào) 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 == "愛發(fā)白日夢(mèng)的后端" { _, err = self.SendTextToGroup(group, "Hello!??!群里的朋友大家好呀?。?!") if err != nil { panic(err) } } } // 阻塞主goroutine, 直到發(fā)生異?;蛘哂脩糁鲃?dòng)退出 bot.Block() }
核心的函數(shù)就是 SendTextToGroup 這個(gè)方法,直接調(diào)用即可發(fā)送群消息了。
效果如下:
總結(jié)
雖然我目前的需求已經(jīng)被滿足了,不過這個(gè)庫(kù)里面的好多功能我都沒有去用過,也沒有在這里介紹,感興趣的同學(xué)可以自行深入去了解。
到此這篇關(guān)于使用Go語(yǔ)言實(shí)現(xiàn)發(fā)送微信群消息的文章就介紹到這了,更多相關(guān)Go發(fā)送微信群消息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang實(shí)現(xiàn)PHP數(shù)組特性的方法
我們做業(yè)務(wù)過程中,對(duì)應(yīng)強(qiáng)類型語(yǔ)言使用有個(gè)痛點(diǎn),就是使用變量之前一定要定義變量類型,那么本文就來(lái)介紹一下golang實(shí)現(xiàn)PHP數(shù)組特性的方法2021-12-12go mock server的簡(jiǎn)易實(shí)現(xiàn)示例
這篇文章主要為大家介紹了go mock server的簡(jiǎn)易實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù)
這篇文章主要介紹了Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù),Golang?程序在運(yùn)行時(shí)加載C動(dòng)態(tài)庫(kù)的技術(shù),跳過了Golang項(xiàng)目編譯階段需要鏈接C動(dòng)態(tài)庫(kù)的過程,提高了Golang項(xiàng)目開發(fā)部署的靈活性2022-07-07golang實(shí)現(xiàn)分頁(yè)算法實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于golang實(shí)現(xiàn)分頁(yè)算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09Golang在整潔架構(gòu)基礎(chǔ)上實(shí)現(xiàn)事務(wù)操作
這篇文章在 go-kratos 官方的 layout 項(xiàng)目的整潔架構(gòu)基礎(chǔ)上,實(shí)現(xiàn)優(yōu)雅的數(shù)據(jù)庫(kù)事務(wù)操作,需要的朋友可以參考下2024-08-08Golang的循環(huán)語(yǔ)句和循環(huán)控制語(yǔ)句詳解
循環(huán)語(yǔ)句為了簡(jiǎn)化程序中有規(guī)律的重復(fù)性操作,需要用到循環(huán)語(yǔ)句,和其他大多數(shù)編程語(yǔ)言一樣,GO的循環(huán)語(yǔ)句有for循環(huán),不同的是沒有while循環(huán),而循環(huán)控制語(yǔ)句可以改變循環(huán)語(yǔ)句的執(zhí)行過程,下面給大家介紹下go循環(huán)語(yǔ)句和循環(huán)控制語(yǔ)句的相關(guān)知識(shí),一起看看吧2021-11-11Go語(yǔ)言實(shí)現(xiàn)RSA加解密算法詳解
隨著互聯(lián)網(wǎng)的高速發(fā)展,人們對(duì)安全的要求也越來(lái)越高,加解密也變得越來(lái)越重要,本文主要為大家介紹了Go語(yǔ)言中實(shí)現(xiàn)RSA加解密與簽名驗(yàn)證算法,希望對(duì)大家有所幫助2023-06-06