# README
Better-Bot-Go
由原来的 Go-QQ-SDK 迁移过来。
已支持正向 WebSocket ,正向 WebSocket 地址为 wss://你的域名:端口/websocket
, 程序启动默认启用。
示例 wss://fw1009zb5979.vicp.fun:443/websocket
对应的 WebSocket 客户端地址 Bot-Client-Go ,欢迎大家使用。
QQ频道机器人,官方 GOLANG SDK。
QQ交流群 677742758
已完成功能/开发计划列表
登录
- 登录
消息类型
- 文本
- 图片
- 语音
- MarkDown
- 表情
- At
- 回复
- 长消息(仅群聊/私聊)
- 链接分享
- 小程序(暂只支持RAW)
- 短视频
- 合并转发
- 群文件(上传与接收信息)
群聊
- 收发群消息
- 机器人加群通知
- 机器人离群通知
- 群接收机器人主动消息通知
- 群拒绝机器人主动消息通知
- 机器人撤回自己在2分钟内的消息
- 机器人获取群成员列表【需要申请权限】
C2C
- 收发C2C消息
- 机器人加好友通知
- 机器人删好友通知
- 接收机器人消息通知
- 拒绝机器人消息通知
- 机器人撤回自己在2分钟内的消息
一、如何使用
1.回调地址配置
is_open 为 true 时, 服务端只需要关注 port, cert_file 和 cert_key
https://你的域名:端口/qqbot/你的应用appid/你的应用app_secret
示例 https://fw1009zb5979.vicp.fun:443/qqbot/101981675/hjksdfhi3jkslfjlksdfjksejkdjk
is_open 为 false 时
https://你的域名:端口/qqbot/你的应用appid
示例 https://fw1009zb5979.vicp.fun:443/qqbot/101981675
2.配置文件填写(支持多账号)
默认配置文件为
{
"apps": {
"123456": {
"qq": 123456,
"app_id": 123456,
"token": "你的AppToken",
"app_secret": "你的AppSecret"
"is_sandbox": true,
"wss_addr": "你的wss地址,服务端不用管"
}
},
"port": 8443,
"cert_file": "ssl证书文件路径",
"cert_key": "ssl证书密钥"
"is_open": true
}
多账号
{
"apps": {
"5123456": {
"qq": 123456,
"app_id": 5123456,
"token": "你的AppToken",
"app_secret": "你的AppSecret"
"is_sandbox": true,
"wss_addr": "你的wss地址,服务端不用管"
},
"7234567": {
"qq": 234567,
"app_id": 7234567,
"token": "你的AppToken",
"app_secret": "你的AppSecret"
"is_sandbox": true,
"wss_addr": "你的wss地址,服务端不用管"
}
},
"port": 8443,
"cert_file": "ssl证书文件路径",
"cert_key": "ssl证书密钥"
"is_open": true
}
3.请求 openapi 接口,操作资源
package main
import (
"context"
"encoding/json"
"fmt"
"strings"
"time"
"github.com/2mf8/Better-Bot-Go/dto"
"github.com/2mf8/Better-Bot-Go/openapi"
"github.com/2mf8/Better-Bot-Go/token"
"github.com/2mf8/Better-Bot-Go/webhook"
log "github.com/sirupsen/logrus"
)
var Apis = make(map[string]openapi.OpenAPI, 0)
func main() {
webhook.InitLog()
as := webhook.ReadSetting()
var ctx context.Context
for i, v := range as.Apps {
token := token.BotToken(v.AppId, v.Token, string(token.TypeBot))
api := bot.NewOpenAPI(token).WithTimeout(3 * time.Second)
Apis[i] = api
}
b, _ := json.Marshal(as)
fmt.Println("配置", string(b))
webhook.GroupAtMessageEventHandler = func(bot *webhook.BotHeaderInfo, event *dto.WSPayload, data *dto.WSGroupATMessageData) error {
fmt.Println(bot.XBotAppid, data.GroupId, data.Content)
if len(data.Attachments) > 0 {
log.Infof(`BotId(%s) GroupId(%s) UserId(%s) <- %s <image id="%s">`, bot.XBotAppid[0], data.GroupId, data.Author.UserId, data.Content, data.Attachments[0].URL)
} else {
log.Infof("BotId(%s) GroupId(%s) UserId(%s) <- %s", bot.XBotAppid[0], data.GroupId, data.Author.UserId, data.Content)
}
if strings.TrimSpace(data.Content) == "测试" {
Apis[bot.XBotAppid[0]].PostGroupMessage(ctx, data.GroupId, &dto.GroupMessageToCreate{
Content: "成功",
MsgID: data.MsgId,
MsgType: 0,
})
}
return nil
}
webhook.C2CMessageEventHandler = func(bot *webhook.BotHeaderInfo, event *dto.WSPayload, data *dto.WSC2CMessageData) error {
b, _ := json.Marshal(event)
fmt.Println(bot.XBotAppid, string(b), data.Content)
return nil
}
webhook.MessageEventHandler = func(bot *webhook.BotHeaderInfo, event *dto.WSPayload, data *dto.WSMessageData) error {
b, _ := json.Marshal(event)
fmt.Println(bot.XBotAppid, string(b), data.Content)
return nil
}
webhook.InitGin()
select {}
}
# Packages
No description provided by the author
Package dto 维护了用于与机器人接口通信的数据结构对象。.
Package errs 是 SDK 里面的错误类型的集合,同时封装了 SDK 专用的错误类型。.
No description provided by the author
No description provided by the author
Package log 是 SDK 的 logger 接口定义与内置的 logger。.
No description provided by the author
Package openapi 声明了 sdk 所使用的 openapi 接口。.
Package token 用于调用 openapi,websocket 的 token 对象。.
No description provided by the author
Package version sdk 版本声明。.
No description provided by the author
No description provided by the author
# Functions
NewOpenAPI 创建新的 openapi 实例,会返回当前的 openapi 实现的实例 如果需要使用其他版本的实现,需要在调用这个方法之前调用 SelectOpenAPIVersion 方法.
NewSandboxOpenAPI 创建测试环境的 openapi 实例.
SelectOpenAPIVersion 指定使用哪个版本的 api 实现,如果不指定,sdk将默认使用第一个 setup 的 api 实现.