SmartQQ By Golang
SmartQQ Package By Golang.
##简介
1.基于 Smart QQ(Web QQ) 的 Api 封装,你可以用这个 Api 制作属于自己的 QQ 机器人!
2.提供的接口包括接收QQ好友、QQ群、QQ讨论组消息,并可以主动或被动的发送消息给好友、群、讨论组。
3.用数组或其他方式保存QClient对象,可以实现批量QQ登录及收发消息。
4.更多有趣的用途请自行脑洞吧。
##依赖
1.因为SmartQQ登录验证及收发消息接口较为复杂,所以使用的是自己封装的Http-Client包(已经集成在本包中),稍后会开源出来。
2.另外因为qq返回的json有点小复杂,所以使用了bitly的SimpleJson包来解析QQ返回的json字符串,请手动go get github.com/bitly/go-simplejson
##进度
1.当前版本只提供了登录验证、收发消息的接口。
2.未来会逐步实现查询QQ好友列表、聊天记录等接口。
##不足
1.SmartQQ不支持收发图片、语音、视屏、及附件。
2.SmartQQ接口不够稳定,有时候发送消息会返回失败但实际上是发送成功了的,有时候会发送失败但是返回成功...万恶的TX
3.截止2016年4月7日接口可用。
##使用方法
先get source
go get github.com/bitly/go-simplejson
go get github.com/JamesWone/SmartQQ
然后,直接见Demo吧! ##Demo
package main
import (
"fmt"
"os"
"strings"
"github.com/JamesWone/SmartQQ"
)
//使用自己封装的Http-Client包
var client_turing smartqq.Client = smartqq.Client{
IsKeepCookie: true,
Timeout: 5,
}
//调用图灵机器人Api
func getResponseByTuringRobot(request string) string {
resp_turing, err := client_turing.Post("http://www.niurenqushi.com/app/simsimi/ajax.aspx", "txt="+request)
if err != nil {
return ""
}
return resp_turing.Body
}
func main() {
//初始化一个QClient
client := smartqq.QClient{}
//当二维码图片变动后触发
client.OnQRChange(func(qc *smartqq.QClient, image_bin []byte) {
//将二维码保存至当前目录,打开手机QQ扫描二维码后即可登录成功
fmt.Println("正在保存二维码图片.")
file_image, err := os.OpenFile("v.jpg", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
fmt.Println(err)
return
}
defer file_image.Close()
if _, err := file_image.Write(image_bin); err != nil {
fmt.Println(err)
return
}
})
//当登录成功后触发
client.OnLogined(func(qc *smartqq.QClient) {
fmt.Println("登录成功了!")
})
//当收到消息后触发
client.OnMessage(func(qc *smartqq.QClient, qm smartqq.QMessage) {
fmt.Println("收到新消息了:")
fmt.Println(qm)
content := qm.Content
if strings.Contains(qm.Content, "@ai") {
content = strings.Replace(qm.Content, "@ai", "", 1)
switch qm.Poll_type {
//QQ好友消息
case "message":
//发送给QQ好友
qc.SendToQQ(qm.From_uin, getResponseByTuringRobot(content)+"\n(by:ai)")
//QQ群消息
case "group_message":
//发送给QQ群
qc.SendToGroup(qm.From_uin, getResponseByTuringRobot(content)+"\n(by:ai)")
//讨论组消息
case "discu_message":
//发送给讨论组
qc.SendToDiscuss(qm.From_uin, getResponseByTuringRobot(content)+"\n(by:ai)")
}
}
})
fmt.Println("开始登录.")
//开始登录,并自动收发消息
client.Run()
}