xybot/client.go

92 lines
2.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package xybot
import (
"encoding/json"
"errors"
"slices"
"strings"
"gitee.ltd/lxh/xybot/core"
"gitee.ltd/lxh/xybot/friend"
"gitee.ltd/lxh/xybot/group"
"gitee.ltd/lxh/xybot/hongbao"
"gitee.ltd/lxh/xybot/login"
"gitee.ltd/lxh/xybot/message"
"gitee.ltd/lxh/xybot/tool"
"gitee.ltd/lxh/xybot/user"
"github.com/go-resty/resty/v2"
)
type Client struct {
// HTTP客户端
httpClient *resty.Client
// 功能模块
Login login.API
Friend friend.API
Group group.API
Message message.API
User user.API
HongBao hongbao.API
Tool tool.API
}
// NewClient
// @description: 创建新的微信API客户端
// @param wxId string 机器人微信ID
// @param baseUrl string 机器人接口基础URL
// @param debug bool 是否开启调试模式
// @return cli
// @return err
func NewClient(wxId, baseUrl string, debug bool) (cli *Client, err error) {
if baseUrl == "" {
err = errors.New("baseUrl 不得为空,格式为: http://10.0.0.11:9001")
return
}
// 如果URL没有以http://或https://开头自动添加http://
if !strings.HasPrefix(baseUrl, "http://") && !strings.HasPrefix(baseUrl, "https://") {
baseUrl = "http://" + baseUrl
}
// 设置一下机器人微信Id的值
wxInfo := core.NewInfo(wxId)
cli = &Client{}
cli.httpClient = resty.New().
SetBaseURL(baseUrl).
SetDebug(debug).
SetHeader("User-Agent", "lxh-xybot-client").
SetJSONMarshaler(json.Marshal).
SetJSONUnmarshaler(json.Unmarshal).
OnBeforeRequest(requestPreCheck)
cli.Login = login.New(cli.httpClient, wxInfo)
cli.Friend = friend.New(cli.httpClient, wxInfo)
cli.Group = group.New(cli.httpClient, wxInfo)
cli.Message = message.New(cli.httpClient, wxInfo)
cli.User = user.New(cli.httpClient, wxInfo)
cli.HongBao = hongbao.New(cli.httpClient, wxInfo)
cli.Tool = tool.New(cli.httpClient, wxInfo)
return
}
// requestPreCheck
// @description: 请求前置检查
// @param _ *resty.Client
// @param req *resty.Request
// @return err error
func requestPreCheck(_ *resty.Client, req *resty.Request) (err error) {
// 在这儿判断指定请求地址的时候WxId是否有值
whiteUrls := []string{"/GetQRCode", "/CheckUuid", "/IsRunning", "/CheckDatabaseOK"}
if slices.Contains(whiteUrls, req.URL) {
// 如果是白名单请求,直接返回
return nil
}
if req.Header.Get("WeChatId") == "" {
// 如果WxId为空直接返回
return errors.New("wxId不能为空")
}
return nil
}