Skip to content

支持WebHook且更好用的QQ官方机器人 GoSDK,基于BotGo二次开发,已支持群聊和私聊。

License

Notifications You must be signed in to change notification settings

2mf8/Better-Bot-Go

Repository files navigation

Better-Bot-Go

由原来的 Go-QQ-SDK 迁移过来。

已支持正向 WebSocket ,正向 WebSocket 地址为 wss://你的域名:端口/websocket , 程序启动默认启用。

示例 wss://fw1009zb5979.vicp.fun:443/websocket

对应的 WebSocket 客户端地址 Bot-Client-Go ,欢迎大家使用。

QQ频道机器人,官方 GOLANG SDK。

Go Reference

已完成功能/开发计划列表

登录

  • 登录

消息类型

  • 文本
  • 图片
  • 语音
  • 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 {}
}

About

支持WebHook且更好用的QQ官方机器人 GoSDK,基于BotGo二次开发,已支持群聊和私聊。

Resources

License

Stars

Watchers

Forks

Packages

No packages published