wkteam

package module
v0.0.0-...-4d5d464 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 18, 2019 License: MIT Imports: 15 Imported by: 0

README

go-wkteam

微控管家 SDK in Golang.

参考文档:https://wkteam.gitbook.io/doc/

快速开始

下载与安装
go get github.com/suboat/go-wkteam
快速启动 hello.go
package main

import "github.com/suboat/go-wkteam"

func main() {
	api := &wkteam.WkTeam{
		Phone:    "13700000000",                                                      // 微控平台手机号
		Password: "wd2dQ6enmYcj2V5K",                                                 // 微控平台密码
		Secret:   "SQjDw77MEdyWRnTu2ZejfzAtNQBt6arxjGUAhA2QApQAuUCnVq5NCpXDv8nMDbmK", // 微控平台密钥 64字节
		Account:  "wx_2dQ6enmYcj2V5K",                                                // 托管在微控上的微信账号
	}
	if info, err := api.GetAgent(); err != nil {
		panic(err)
	} else {
		println(wkteam.PubJSON(info))
	}
}
监听消息 serve.go
package main

import "github.com/suboat/go-wkteam"

func main() {
	api := &wkteam.WkTeam{
		Phone:    "13700000000",                                                      // 微控平台手机号
		Password: "wd2dQ6enmYcj2V5K",                                                 // 微控平台密码
		Secret:   "SQjDw77MEdyWRnTu2ZejfzAtNQBt6arxjGUAhA2QApQAuUCnVq5NCpXDv8nMDbmK", // 微控平台密钥 64字节
		Account:  "wx_2dQ6enmYcj2V5K",                                                // 托管在微控上的微信账号
	}

	// hook新单聊消息
	api.HookMsgUser = func(msg *wkteam.MsgUser) error {
		api.Log.Infof("%s 发了一条消息给 %s,内容是:%s", msg.GetFromName(), msg.GetToName(), msg.Content)
		return nil
	}

	// hook群聊消息
	api.HookMsgGroup = func(msg *wkteam.MsgGroup) error {
		api.Log.Infof("%s 在群【%s】发了一条消息:%s", msg.GetName(), msg.GroupName, msg.Content)
		return nil
	}

	// 监听地址
	if err := api.ListenAndServe(
		"http://0.0.0.0:8080/api/wkteam/",  // 本机监听地址,还需要nginx等工具暴露给公网
		"https://yourhost.com/api/wkteam/", // 公网地址,微控收到新消息会往这个地址POST数据
	); err != nil {
		panic(err)
	}
}
拉取消息 sync.go
package main

import (
	"github.com/suboat/go-wkteam"
	"time"
)

func main() {
	api := &wkteam.WkTeam{
		Phone:    "13700000000",                                                      // 微控平台手机号
		Password: "wd2dQ6enmYcj2V5K",                                                 // 微控平台密码
		Secret:   "SQjDw77MEdyWRnTu2ZejfzAtNQBt6arxjGUAhA2QApQAuUCnVq5NCpXDv8nMDbmK", // 微控平台密钥 64字节
		Account:  "wx_2dQ6enmYcj2V5K",                                                // 托管在微控上的微信账号
	}

	// 拉取12小时内的与某人的聊天记录
	if data, err := api.GetMsgUserSince("某好友的微信ID", time.Now().Add(-time.Hour*12)); err != nil {
		panic(err)
	} else {
		for i, d := range data {
			api.Log.Infof("#%d %s %s -> %s : %s", i+1, d.Time, d.GetFromName(), d.GetToName(), d.Content)
		}
	}

	// 拉取6小时内的某群的聊天记录
	if data, err := api.GetMsgGroupSince("某群的微信ID", time.Now().Add(-time.Hour*6)); err != nil {
		panic(err)
	} else {
		for i, d := range data {
			api.Log.Infof("#%d %s %s(%s) : %s", i+1, d.Time, d.Uid, d.GetName(), d.Content)
		}
	}
}

License

The MIT License

Documentation

Index

Constants

View Source
const (
	// 1文字、2图片、3表情、 4语音、5视频、6文件、10系统消息
	MsgCategoryTxt = "txt" // 文字
	MsgCategoryImg = "img" // 图片
	MsgCategoryGif = "gif" // 表情
	MsgCategoryWav = "wav" // 语音
	MsgCategoryMp4 = "mp4" // 视频
	MsgCategoryDoc = "doc" // 文件
	MsgCategorySys = "sys" // 系统消息
)

Variables

View Source
var (
	// 版本
	Version = &contrib.Version{Major: 0, Minor: 0, Patch: 1, Model: "wkteam"}
	// GitCommit 当前代码对应的git-commit记录
	GitCommit = ""
	// Settings 系统设置
	Settings *Config
)
View Source
var (
	DefaultHookHookMsgGroup = func(msg *MsgGroup) error {
		log.Debugf(`[default] HookHookMsgGroup %s <- %s`, msg.Account, PubJSON(msg))
		return nil
	}
	DefaultHookHookMsgUser = func(msg *MsgUser) error {
		log.Debugf(`[default] HookHookMsgUser %s -> %s : %s`, msg.GetFromName(), msg.GetToName(), PubJSON(msg))
		return nil
	}
)

通用hook

View Source
var (
	CallbackPrefix   = "/callback/" // 回调地址前缀
	CallbackNormal   = "normal"     // 通用回调
	CallbackMsgUser  = "messagelog" // 单聊回调
	CallbackMsgGroup = "msggroup"   // 群聊回调
)

Functions

func PanicRecoverError

func PanicRecoverError(logger contrib.Logger, err *error)

PanicRecoverError 统一处理panic, 并更新error

func PubGetParams

func PubGetParams(req *http.Request) (ret map[string]string)

PubGetParams 取url参数

func PubJSON

func PubJSON(v_ interface{}) (r string)

Types

type Agent

type Agent struct {
	ID         int       `json:"id"`                   // 开发者id
	Phone      string    `json:"phone"`                // 开发者手机号
	Name       string    `json:"name"`                 // 开发者名称
	Sex        string    `json:"sex,omitempty"`        // 性别
	TimeExpire time.Time `json:"timeExpire,omitempty"` // 账户过期时间
	TimeLogin  time.Time `json:"timeLogin,omitempty"`  // 上次登录时间
}

开发者信息

type Config

type Config struct {
	contrib.Config `yaml:"-"`
	//
	ApiHost        string // 微控api入口
	Phone          string // 开发者手机号
	Password       string // 开发者密码
	Secret         string // 开发者密钥
	Account        string // 默认要管理的微信号
	CallbackLocal  string // 实际监听回调地址
	CallbackPublic string // 映射到公网的回调地址
}

Config 系统配置参数

func (*Config) Valid

func (cfg *Config) Valid() (err error)

type Group

type Group struct {
	Gid  string `json:"number"` // 群唯一ID
	Name string `json:"name"`   // 群名
}

群信息

type MsgGroup

type MsgGroup struct {
	Account   string `json:"-"`                   // 获取消息的微信号
	Gid       string `json:"gid,omitempty"`       // 群唯一ID
	Uid       string `json:"uid,omitempty"`       // 消息发送者唯一ID
	Name      string `json:"name,omitempty"`      // 消息发送者昵称
	NameAlias string `json:"nameAlias,omitempty"` // 消息发送者备注
	GroupName string `json:"groupName,omitempty"` // 群名称
	// 消息相关
	Category string    `json:"category,omitempty"` // 消息类型, 见顶部定义
	Content  string    `json:"content,omitempty"`  // 消息内容
	Time     time.Time `json:"time,omitempty"`     // 消息创建时间
}

群消息

func (*MsgGroup) GetHash

func (d *MsgGroup) GetHash() (ret string)

群一条群聊消息的哈希, 去重判断用

func (*MsgGroup) GetName

func (d *MsgGroup) GetName() string

type MsgUser

type MsgUser struct {
	Account       string `json:"-"`                       // 获取消息的微信号
	FromUid       string `json:"fromUid,omitempty"`       // 发送者唯一ID
	FromName      string `json:"fromName,omitempty"`      // 发送者昵称
	FromNameAlias string `json:"fromNameAlias,omitempty"` // 发送者备注
	ToUid         string `json:"toUid,omitempty"`         // 接受者唯一ID
	ToName        string `json:"toName,omitempty"`        // 接受者昵称
	ToNameAlias   string `json:"toNameAlias,omitempty"`   // 接受者备注
	IsMe          bool   `json:"isMe,omitempty"`          // true: 这条消息是我发送的
	// 消息相关
	Category string    `json:"category,omitempty"` // 消息类型, 见顶部定义
	Content  string    `json:"content,omitempty"`  // 消息内容
	Time     time.Time `json:"time,omitempty"`     // 消息创建时间
}

用户消息

func (*MsgUser) GetFromName

func (d *MsgUser) GetFromName() (ret string)

func (*MsgUser) GetHash

func (d *MsgUser) GetHash() (ret string)

群一条单聊消息的哈希, 去重判断用

func (*MsgUser) GetName

func (d *MsgUser) GetName() string

消息发出者名字

func (*MsgUser) GetToName

func (d *MsgUser) GetToName() (ret string)

type Query

type Query struct {
	Account string                 // 要管理的微信号
	Skip    int                    // 分页参数
	Page    int                    // 分页参数,填写会覆盖Skip信息 0起始
	Limit   int                    // 分页参数,默认10
	Params  map[string]interface{} // 其它参数
	// 回应参数
	Total int // 总数据量
}

query参数

type User

type User struct {
	Account      string `json:"account"`       // 微信号
	AccountAlias string `json:"account_alias"` // 微信唯一id(原始的微信号)
	Name         string `json:"name"`          // 微信昵称
	Sex          int    `json:"sex"`           // 性别
	Area         string `json:"area"`          // 所在地
	Description  string `json:"description"`   // 签名
}

用户信息

type WkTeam

type WkTeam struct {
	// 账号信息
	Phone    string // 开发者手机号
	Password string // 开发者密码
	Secret   string // 开发者密钥
	Account  string // 要管理的微信号
	//
	ApiHost string         // 微控api入口
	Log     contrib.Logger //
	// hooks
	HookMsgUser  func(group *MsgUser) error
	HookMsgGroup func(group *MsgGroup) error
	// contains filtered or unexported fields
}

func NewWkTeam

func NewWkTeam(s *WkTeam) (ret *WkTeam)

NewWkTeam 新建一个微控对象

func (*WkTeam) Do

func (api *WkTeam) Do(name string, query *Query, data interface{}) (ret []byte, err error)

Do 发起请求

func (*WkTeam) GetAgent

func (api *WkTeam) GetAgent() (ret *Agent, err error)

GetAgent 取开发者信息

func (*WkTeam) GetGroupInfo

func (api *WkTeam) GetGroupInfo(gid string) (ret *Group, err error)

GetGroupInfo 获取一个群信息

func (*WkTeam) GetGroups

func (api *WkTeam) GetGroups(query *Query) (ret []*Group, err error)

GetGroups 取群列表

func (*WkTeam) GetMsgGroup

func (api *WkTeam) GetMsgGroup(gid string, query *Query) (ret []*MsgGroup, err error)

取群消息 gid: 群ID 群消息最少拉取30条,默认倒序返回

func (*WkTeam) GetMsgGroupSince

func (api *WkTeam) GetMsgGroupSince(gid string, gte time.Time) (ret []*MsgGroup, err error)

GetMsgGroupSince 获取某时刻及以后的所有群聊消息, 如循环获取数据过程中出错, ret也会返回目前为止收集到的数据

func (*WkTeam) GetMsgUser

func (api *WkTeam) GetMsgUser(targetUid string, query *Query) (ret []*MsgUser, err error)

GetMsgUser 获取单聊信息 toUid: 好友微信唯一ID

func (*WkTeam) GetMsgUserSince

func (api *WkTeam) GetMsgUserSince(targetUid string, gte time.Time) (ret []*MsgUser, err error)

GetMsgUserSince 获取某时刻及以后的所有单聊消息, 如循环获取数据过程中出错, ret也会返回目前为止收集到的数据

func (*WkTeam) GetUserInfo

func (api *WkTeam) GetUserInfo(account string) (ret *User, err error)

GetGroupInfo 获取一个用户的信息

func (*WkTeam) ListenAndServe

func (api *WkTeam) ListenAndServe(urlLocal string, urlPublic string) (err error)

ListenAndServe 监听回调 addrListen:监听地址 urlPublic: 公网地址

func (*WkTeam) PassAddFriend

func (api *WkTeam) PassAddFriend(account string) (ret bool, err error)

PassAddFriend 同意添加好友

func (*WkTeam) RemarkFriend

func (api *WkTeam) RemarkFriend(account, remarkName string) (ret bool, err error)

RemarkFriend 备注好友

func (*WkTeam) SetCallback

func (api *WkTeam) SetCallback(urlPrefix string) (err error)

登记回调

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL