itchatgo受到itchat 项目的启发,可以通过golang处理微信信息。
itchatgo参考UOS版本微信,绕过了微信的登录限制。
itchatgo提供了更为易扩展的接口,通过这些接口,可以极大程度的开发出极具个性化的程序。
在golang项目中使用itchatgo
import(
"github.com/timerzz/itchatgo"
)
如果只使用api部分可以只引入api
import(
"github.com/timerzz/itchatgo/api"
)
var api = api.NewApi()
- 登录、登出
- 接收消息
- 发送文字,图片
- 获取联系人
- 获取群成员详情
- 获取头像
- 登录回调,退出登录回调,停止监听回调
- 发送文件
- 发送视频
- 群、好友变更
- 创建群聊
- 邀请入群
- 撤回消息
import(
"github.com/timerzz/itchatgo"
)
func func main() {
clientSet := itchatgo.NewClientSet()
uuidInfo, err := cs.LoginCtl().SetTimeout(3 * time.Minute).Login()
if err != nil{
fmt.Println(err)
return
}
//设置登录成功和退出登录的回调函数
cs.LoginCtl().SetLoggedCall(func() {
fmt.Println("登录成功")
})
cs.LoginCtl().SetLogoutCall(func() {
fmt.Println("退出登录")
})
}
登录是LoginCtl
的Login
函数,函数返回uuidInfo和error。其中uuidInfo包含uuid、二维码图片
的[]byte以及二维码url。可以通过类似github.com/qianlnk/qrcode的库直接通过uuidInfo中的QrUrl生成二维码。
除此之外,还可以通过SetLoggedCall和SetLogoutCall用来设置登录成功和退出登录的回调函数。
登录有默认的超时时间是10min,超过10min就不再轮询。这个超时时间可以通过SetTimeout设置
cs.LoginCtl().ReLoadUUid()
cs.LoginCtl().StopLogin()
在登录成功前,如果不停止登录,会一直轮询有没有登录成功
clientSet.LoginCtl().Logout()
var msgHandler = func(msg *model.WxRecvMsg) {
if strings.Contains(msg.Content, "exit"){
cs.LoginCtl().Logout()
}else{
fmt.Println(msg.Content)
}
}
//错误处理函数
var errHandler = func(err error) {
fmt.Println(err)
}
//开始监听
cs.MsgCtl().Receive(msgHandler, errHandler)
Receive
需要传入消息的处理函数和错误处理函数
如果你不需要一直进行消息的接收,也可以使用MsgCtl().WebWxSync()
来接收消息(可以参考Receive的实现)。
也可以通过SetExitCall
设置退出监听时的回调函数
clientSet.Api().SendMsg(msg, toUserName) //发送文字消息
clientSet.Api().SendImage(filePath, toUserName, MediaId) //发送图片
如果toUserName
是"",默认会发给文件传输助手。
clientSet.ContactCtl().GetAllContact()
clientSet.ContactCtl().GetUserByNickName()
GetAllContact
会获取所有联系人,好友和群会混在一起。
clientSet.Api().GetHeadImg(userName, chatRoomName,filePath)
clientSet.Api().GetHeadImgByUser(User,filePath)
获取头像提供了两个方法。
GetHeadImg
接收三个参数:userName, chatRoomUserName, filePath。
如果没有username而有chatRoomUname, 就是获取群的头像
如果两个都有,就是获取群中某个用户的头像
如果有picPath, 还会把头像保存到filePath路径
返回值是头像的[]byte和error
另一个方法是GetHeadImgByUser(User,filePath)
, 可以直接传入model.User对象,这个方法
会使用User中的HedImgUrl字段去获取头像。
需要注意的是,这样个方法获取的头像大小不一样,GetHeadImg获取的图大,GetHeadImgByUser获取的图小
clientSet.ContactCtl().GetContactDetail()