一、
最近用在學習golang,寫了個小工具練練手。通過golang模擬微信網頁端,接收微信服務器的消息並定製。可接入圖靈機器人的api實現一個微信機器人的小玩具,當然了,可以有更多更好玩的玩法。
二、
地址: https://github.com/Orlion/Gochat
Gochat
一個Go微信機器人包
特點
- 靈活。在微信從登錄到開始同步服務器消息的過程中的各個節點觸發事件,從而通過註冊時間監聽器就可以靈活的實現很多功能。
- 失敗重新登錄。可以通過註冊同步失敗的事件重新調用Login()方法來重新登錄,從而達到失敗自動重新登錄, 也可以調用pushlogin的接口免掃碼來登錄。
Demo
有部分僞代碼,不能直接運行
package demo
import (
"gochat"
"os"
"fmt"
)
func main() {
// new 一個微信實例
weChat := gochat.NewWeChat("storage.json", os.Stdout)
// 註冊事件監聽
RegListener(weChat)
// 登錄
err := weChat.Login()
if err != nil {
fmt.Println(err.Error())
}
// Run 開始監聽微信服務器
err = weChat.Run()
if err != nil {
fmt.Println(err.Error())
}
}
// 註冊事件監聽器
func RegListener(weChat *gochat.WeChat) {
// 註冊生成Uuid事件監聽器
weChat.SetListener(gochat.GEN_UUID_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.GenUuidEventData)
if ok {
sendEmail("Uuid=" + eventData.Uuid)
}
})
// 註冊已掃碼事件監聽器
weChat.SetListener(gochat.SCAN_CODE_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.ScanCodeEventData)
if ok {
sendEmail("UserAvatar=" + eventData.UserAvatar)
}
})
// 註冊授權登錄的事件監聽器
weChat.SetListener(gochat.CONFIRM_AUTH_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.ConfirmAuthEventData)
if ok {
sendEmail("RedirectUrl=" + eventData.RedirectUrl)
}
})
// 註冊已登錄事件監聽器
weChat.SetListener(gochat.LOGIN_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.LoginEventData)
if ok {
sendEmail("DeviceID=" + eventData.DeviceID)
}
})
// 註冊初始化完成事件監聽器
weChat.SetListener(gochat.INIT_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.InitEventData)
if ok {
sendEmail("MemberCount=" + eventData.Me.MemberCount)
}
})
// 註冊聯繫人初始化完成事件監聽器
weChat.SetListener(gochat.CONTACTS_INIT_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.ContactsInitEventData)
if ok {
sendEmail("ContactsCount=" + eventData.ContactsCount)
}
})
// 註冊同步微信失敗事件監聽器
weChat.SetListener(gochat.LISTEN_FAILED_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.ListenFailedEventData)
if ok {
sendEmail("ListenFailedCount=" + eventData.ListenFailedCount)
if (eventData.ListenFailedCount > 10) {
// 連續同步失敗10次後重新登錄
weChat.Login()
}
}
})
// 註冊聯繫人修改事件監聽器
weChat.SetListener(gochat.CONTACT_MODIFY_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.ContactModifyEventData)
if ok {
sendEmail("UserNames=" + eventData.UserNames)
}
})
// 註冊聯繫人刪除事件監聽器
weChat.SetListener(gochat.CONTACT_DELETE_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.ContactDeleteEventData)
if ok {
sendEmail("UserNames=" + eventData.UserNames)
}
})
// 註冊消息事件監聽器
weChat.SetListener(gochat.MESSAGE_EVENT, func(event gochat.Event){
eventData, ok := event.Data.(gochat.MessageEventData)
if ok {
if eventData.IsGroupMessage {
if eventData.IsAtMe {
weChat.SendTextMsg(tuling(eventData.Content, eventData.SenderUserId), eventData.SenderUserInfo.UserName)
}
} else {
weChat.SendTextMsg(tuling(eventData.Content, eventData.SenderUserId), eventData.SenderUserInfo.UserName)
}
}
})
}
Something
寫完之後就沒什麼興趣用這個庫做東西了,主要是用的openshift太慢,而且微信很不穩定經常變更規則。
不過用微信機器人還是可以做很多有趣的事情的,有不少同學在玩微信機器人。可以用java寫個Android的App。
類似項目有: