openwechat

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Aug 7, 2022 License: Apache-2.0 Imports: 30 Imported by: 0

README

openwechat

Go DocReleaseGo Report CardStarsForks

golang版个人微信号API, 突破网页版限制,类似开发公众号一样,开发个人微信号

微信机器人😈,利用微信号完成一些功能的定制化开发⭐

  • 支持定制化开发,如日志记录,自动回复
  • 突破网页版登录限制📣
  • 无需重复扫码登录
  • 支持多个微信号同时登陆
安装

go get

go get github.com/hyperits/openwechat

go mod

require github.com/hyperits/openwechat latest
快速开始
package main

import (
	"fmt"
	"github.com/hyperits/openwechat"
)

func main() {
	bot := openwechat.DefaultBot()
  // bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式,上面登录不上的可以尝试切换这种模式

	// 注册消息处理函数
	bot.MessageHandler = func(msg *openwechat.Message) {
		if msg.IsText() && msg.Content == "ping" {
			msg.ReplyText("pong")
		}
	}
	// 注册登陆二维码回调
	bot.UUIDCallback = openwechat.PrintlnQrcodeUrl

	// 登陆
	if err := bot.Login(); err != nil {
		fmt.Println(err)
		return
	}

	// 获取登陆的用户
	self, err := bot.GetCurrentUser()
	if err != nil {
		fmt.Println(err)
		return
	}

	// 获取所有的好友
	friends, err := self.Friends()
	fmt.Println(friends, err)

	// 获取所有的群组
	groups, err := self.Groups()
	fmt.Println(groups, err)

	// 阻塞主goroutine, 直到发生异常或者用户主动退出
	bot.Block()
}
支持功能
  • 消息回复、给指定对象(好友、群组)发送文本、图片、文件、emoji表情等消息
  • 热登陆(无需重复扫码登录)、自定义消息处理、文件下载、消息防撤回
  • 获取对象信息、设置好友备注、拉好友进群等
  • 更多功能请查看文档
文档

点击查看

项目主页

https://github.com/hyperits/openwechat

Thanks

JetBrains

添加微信(EatMoreApple)🍎(备注: openwechat),进群交流😈

如果二维码图片没显示出来,请添加微信号 EatMoreApple

Documentation

Index

Examples

Constants

View Source
const (
	StatusSuccess = "200"
	StatusScanned = "201"
	StatusTimeout = "400"
	StatusWait    = "408"
)

登录状态

View Source
const (
	MALE   = 1
	FEMALE = 2
)

性别

View Source
const ALL = 0

ALL 跟search函数搭配

friends.Search(openwechat.ALL, )
View Source
const (
	AppMessage = 6
)

消息类型

View Source
const TimeFormat = "Mon Jan 02 2006 15:04:05 GMT+0800 (中国标准时间)"
View Source
const ZombieText = "وُحfخe ̷̴̐nخg ̷̴̐cخh ̷̴̐aخo امارتيخ ̷̴̐خ\n"

ZombieText 检测僵尸好友字符串 发送该字符给好友,能正常发送不报错的为正常好友,否则为僵尸好友

Variables

View Source
var (
	ErrNoSuchUserFoundError = errors.New("no such user found")
	ErrMissLocationHeader   = errors.New("301 response missing Location header")
	ErrLoginForbiddenError  = errors.New("login forbidden")
	ErrLoginTimeout         = errors.New("login timeout")
)

errors

View Source
var Emoji = struct {
	Smile        string
	Grimace      string
	Drool        string
	Scowl        string
	CoolGuy      string
	Sob          string
	Shy          string
	Silent       string
	Sleep        string
	Cry          string
	Awkward      string
	Angry        string
	Tongue       string
	Grin         string
	Surprise     string
	Frown        string
	Ruthless     string
	Blush        string
	Scream       string
	Puke         string
	Chuckle      string
	Joyful       string
	Slight       string
	Smug         string
	Hungry       string
	Drowsy       string
	Panic        string
	Sweat        string
	Laugh        string
	Commando     string
	Determined   string
	Scold        string
	Shocked      string
	Shhh         string
	Dizzy        string
	Tormented    string
	Toasted      string
	Skull        string
	Hammer       string
	Wave         string
	Speechless   string
	NosePick     string
	Clap         string
	Shame        string
	Trick        string
	BahL         string
	BahR         string
	Yawn         string
	PoohPooh     string
	Shrunken     string
	TearingUp    string
	Sly          string
	Kiss         string
	Wrath        string
	Whimper      string
	Cleaver      string
	Watermelon   string
	Beer         string
	Basketball   string
	PingPong     string
	Coffee       string
	Rice         string
	Pig          string
	Rose         string
	Wilt         string
	Lips         string
	Heart        string
	BrokenHeart  string
	Cake         string
	Lightning    string
	Bomb         string
	Dagger       string
	Soccer       string
	Ladybug      string
	Poop         string
	Moon         string
	Sun          string
	Gift         string
	Hug          string
	ThumbsUp     string
	ThumbsDown   string
	Shake        string
	Peace        string
	Fight        string
	Beckon       string
	Fist         string
	Pinky        string
	RockOn       string
	Nuhuh        string
	OK           string
	InLove       string
	Blowkiss     string
	Waddle       string
	Tremble      string
	Aaagh        string
	Twirl        string
	Kotow        string
	Dramatic     string
	JumpRope     string
	Surrender    string
	Hooray       string
	Meditate     string
	Smooch       string
	TaiChiL      string
	TaiChiR      string
	Hey          string
	Facepalm     string
	Smirk        string
	Smart        string
	Moue         string
	Yeah         string
	Tea          string
	Packet       string
	Candle       string
	Blessing     string
	Chick        string
	Onlooker     string
	GoForIt      string
	Sweats       string
	OMG          string
	Emm          string
	Respect      string
	Doge         string
	NoProb       string
	MyBad        string
	KeepFighting string
	Wow          string
	Rich         string
	Broken       string
	Hurt         string
	Sigh         string
	LetMeSee     string
	Awesome      string
	Boring       string

}{}/* 134 elements not displayed */

emoji 表情 字段太多了,污染命名空间,封装成struct返回

Functions

func DispatchMessage

func DispatchMessage(dispatcher MessageDispatcher) func(msg *Message)

DispatchMessage 跟 MessageDispatcher 结合封装成 MessageHandler

func FormatEmoji

func FormatEmoji(text string) string

func GetFileContentType

func GetFileContentType(file multipart.File) (string, error)

GetFileContentType 获取文件上传的类型

func GetQrcodeUrl

func GetQrcodeUrl(uuid string) string

GetQrcodeUrl 通过uuid获取登录二维码的url

func GetRandomDeviceId

func GetRandomDeviceId() string

GetRandomDeviceId 获取随机设备id

func IgnoreNetworkError

func IgnoreNetworkError(errHandler func(err error)) func(error)

IgnoreNetworkError 忽略网络请求的错误

func IsNetworkError

func IsNetworkError(err error) bool

func NewFileAppMessage

func NewFileAppMessage(stat os.FileInfo, attachId string) *appmsg

func PrintlnQrcodeUrl

func PrintlnQrcodeUrl(uuid string)

PrintlnQrcodeUrl 打印登录二维码

func ToBuffer

func ToBuffer(v interface{}) (*bytes.Buffer, error)

func ToDSNString added in v0.0.1

func ToDSNString(user, passwd, ip, dataBase string, port int) string

ToDSNString TODO

Types

type AppMessageData

type AppMessageData struct {
	XMLName xml.Name `xml:"msg"`
	AppMsg  struct {
		Appid             string         `xml:"appid,attr"`
		SdkVer            string         `xml:"sdkver,attr"`
		Title             string         `xml:"title"`
		Des               string         `xml:"des"`
		Action            string         `xml:"action"`
		Type              AppMessageType `xml:"type"`
		ShowType          string         `xml:"showtype"`
		Content           string         `xml:"content"`
		URL               string         `xml:"url"`
		DataUrl           string         `xml:"dataurl"`
		LowUrl            string         `xml:"lowurl"`
		LowDataUrl        string         `xml:"lowdataurl"`
		RecordItem        string         `xml:"recorditem"`
		ThumbUrl          string         `xml:"thumburl"`
		MessageAction     string         `xml:"messageaction"`
		Md5               string         `xml:"md5"`
		ExtInfo           string         `xml:"extinfo"`
		SourceUsername    string         `xml:"sourceusername"`
		SourceDisplayName string         `xml:"sourcedisplayname"`
		CommentUrl        string         `xml:"commenturl"`
		AppAttach         struct {
			TotalLen          string `xml:"totallen"`
			AttachId          string `xml:"attachid"`
			EmoticonMd5       string `xml:"emoticonmd5"`
			FileExt           string `xml:"fileext"`
			FileUploadToken   string `xml:"fileuploadtoken"`
			OverwriteNewMsgId string `xml:"overwrite_newmsgid"`
			FileKey           string `xml:"filekey"`
			CdnAttachUrl      string `xml:"cdnattachurl"`
			AesKey            string `xml:"aeskey"`
			EncryVer          string `xml:"encryver"`
		} `xml:"appattach"`
		WeAppInfo struct {
			PagePath       string `xml:"pagepath"`
			Username       string `xml:"username"`
			Appid          string `xml:"appid"`
			AppServiceType string `xml:"appservicetype"`
		} `xml:"weappinfo"`
		WebSearch string `xml:"websearch"`
	} `xml:"appmsg"`
	FromUsername string `xml:"fromusername"`
	Scene        string `xml:"scene"`
	AppInfo      struct {
		Version string `xml:"version"`
		AppName string `xml:"appname"`
	} `xml:"appinfo"`
	CommentUrl string `xml:"commenturl"`
}

AppMessageData 获取APP消息的正文 See https://github.com/hyperits/openwechat/issues/62

func (*AppMessageData) IsArticle

func (a *AppMessageData) IsArticle() bool

IsArticle 判断当前的消息类型是否为文章

func (AppMessageData) IsFile

func (a AppMessageData) IsFile() bool

IsFile 判断当前的消息类型是否为文件

func (*AppMessageData) IsFromApplet

func (a *AppMessageData) IsFromApplet() bool

IsFromApplet 判断当前的消息类型是否来自小程序

type AppMessageType

type AppMessageType int

AppMessageType 以Go惯用形式定义了PC微信所有的官方App消息类型。

const (
	AppMsgTypeText                  AppMessageType = 1      // 文本消息
	AppMsgTypeImg                   AppMessageType = 2      // 图片消息
	AppMsgTypeAudio                 AppMessageType = 3      // 语音消息
	AppMsgTypeVideo                 AppMessageType = 4      // 视频消息
	AppMsgTypeUrl                   AppMessageType = 5      // 文章消息
	AppMsgTypeAttach                AppMessageType = 6      // 附件消息
	AppMsgTypeOpen                  AppMessageType = 7      // Open
	AppMsgTypeEmoji                 AppMessageType = 8      // 表情消息
	AppMsgTypeVoiceRemind           AppMessageType = 9      // VoiceRemind
	AppMsgTypeScanGood              AppMessageType = 10     // ScanGood
	AppMsgTypeGood                  AppMessageType = 13     // Good
	AppMsgTypeEmotion               AppMessageType = 15     // Emotion
	AppMsgTypeCardTicket            AppMessageType = 16     // 名片消息
	AppMsgTypeRealtimeShareLocation AppMessageType = 17     // 地理位置消息
	AppMsgTypeTransfers             AppMessageType = 2000   // 转账消息
	AppMsgTypeRedEnvelopes          AppMessageType = 2001   // 红包消息
	AppMsgTypeReaderType            AppMessageType = 100001 //自定义的消息
)

func (AppMessageType) String

func (i AppMessageType) String() string

type BaseRequest

type BaseRequest struct {
	Uin                 int64
	Sid, Skey, DeviceID string
}

BaseRequest 初始的请求信息 几乎所有的请求都要携带该参数

type BaseResponse

type BaseResponse struct {
	Ret    Ret
	ErrMsg string
}

BaseResponse 大部分返回对象都携带该信息

func (BaseResponse) Error

func (b BaseResponse) Error() string

func (BaseResponse) Ok

func (b BaseResponse) Ok() bool

type Bot

type Bot struct {
	ScanCallBack        func(body []byte)            // 扫码回调,可获取扫码用户的头像
	LoginCallBack       func(body []byte)            // 登陆回调
	LogoutCallBack      func(bot *Bot)               // 退出回调
	UUIDCallback        func(uuid string)            // 获取UUID的回调函数
	SyncCheckCallback   func(resp SyncCheckResponse) // 心跳回调
	MessageHandler      MessageHandler               // 获取消息成功的handle
	MessageErrorHandler func(err error) bool         // 获取消息发生错误的handle, 返回true则尝试继续监听

	Caller *Caller

	Storage          *Storage
	HotReloadStorage HotReloadStorage

	DBRepo *Repositories
	Nic    string
	// contains filtered or unexported fields
}

func DefaultBot

func DefaultBot(modes ...Mode) *Bot

DefaultBot 默认的Bot的构造方法, mode不传入默认为 openwechat.Desktop,详情见mode

bot := openwechat.DefaultBot(openwechat.Desktop)

func NewBot

func NewBot() *Bot

NewBot Bot的构造方法

func (*Bot) Alive

func (b *Bot) Alive() bool

Alive 判断当前用户是否正常在线

func (*Bot) Block

func (b *Bot) Block() error

Block 当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞

func (*Bot) CrashReason

func (b *Bot) CrashReason() error

CrashReason 获取当前Bot崩溃的原因

func (*Bot) DumpHotReloadStorage

func (b *Bot) DumpHotReloadStorage() error

DumpHotReloadStorage 写入HotReloadStorage

func (*Bot) Exit

func (b *Bot) Exit()

Exit 主动退出,让 Block 不在阻塞

func (*Bot) GetCurrentUser

func (b *Bot) GetCurrentUser() (*Self, error)

GetCurrentUser 获取当前的用户

self, err := bot.GetCurrentUser()
if err != nil {
	return
}
fmt.Println(self.NickName)

func (*Bot) HandleLogin

func (b *Bot) HandleLogin(data []byte) error

HandleLogin 登录逻辑

func (*Bot) HotLogin

func (b *Bot) HotLogin(storage HotReloadStorage, retry ...bool) error

HotLogin 热登录,可实现重复登录, retry设置为true可在热登录失效后进行普通登录行为

Storage := NewJsonFileHotReloadStorage("Storage.json")
err := bot.HotLogin(Storage, true)
fmt.Println(err)

func (*Bot) IsHot

func (b *Bot) IsHot() bool

IsHot returns true if is hot login otherwise false

func (*Bot) Login

func (b *Bot) Login() error

Login 用户登录

func (*Bot) LoginWithUUID

func (b *Bot) LoginWithUUID(uuid string) error

LoginWithUUID 用户登录 该方法会一直阻塞,直到用户扫码登录,或者二维码过期

func (*Bot) Logout

func (b *Bot) Logout() error

Logout 用户退出

func (*Bot) MessageOnError

func (b *Bot) MessageOnError(h func(err error) bool)

MessageOnError setter for Bot.GetMessageErrorHandler

func (*Bot) MessageOnSuccess

func (b *Bot) MessageOnSuccess(h func(msg *Message))

MessageOnSuccess setter for Bot.MessageHandler

func (*Bot) OnLogin

func (b *Bot) OnLogin(f func(body []byte))

OnLogin is a setter for LoginCallBack

func (*Bot) OnLogout

func (b *Bot) OnLogout(f func(bot *Bot))

OnLogout is a setter for LogoutCallBack

func (*Bot) OnScanned

func (b *Bot) OnScanned(f func(body []byte))

OnScanned is a setter for ScanCallBack

func (*Bot) UUID

func (b *Bot) UUID() string

UUID returns current uuid of bot

func (*Bot) WebInit

func (b *Bot) WebInit() error

WebInit 根据有效凭证获取和初始化用户信息

type Caller

type Caller struct {
	Client *Client
	// contains filtered or unexported fields
}

Caller 调用请求和解析请求 上层模块可以直接获取封装后的请求结果

func DefaultCaller

func DefaultCaller() *Caller

DefaultCaller Default Constructor for Caller

func NewCaller

func NewCaller(client *Client) *Caller

NewCaller Constructor for Caller

func (*Caller) AddFriendIntoChatRoom

func (c *Caller) AddFriendIntoChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*Friend) error

AddFriendIntoChatRoom 拉好友入群

func (*Caller) CheckLogin

func (c *Caller) CheckLogin(uuid string) (*CheckLoginResponse, error)

CheckLogin 检查是否登录成功

func (*Caller) GetLoginInfo

func (c *Caller) GetLoginInfo(body []byte) (*LoginInfo, error)

GetLoginInfo 获取登录信息

func (*Caller) GetLoginUUID

func (c *Caller) GetLoginUUID() (string, error)

GetLoginUUID 获取登录的uuid

func (*Caller) Logout

func (c *Caller) Logout(info *LoginInfo) error

Logout 用户退出

func (*Caller) RemoveFriendFromChatRoom

func (c *Caller) RemoveFriendFromChatRoom(req *BaseRequest, info *LoginInfo, group *Group, users ...*User) error

RemoveFriendFromChatRoom 从群聊中移除用户

func (*Caller) SyncCheck

func (c *Caller) SyncCheck(request *BaseRequest, info *LoginInfo, response *WebInitResponse) (*SyncCheckResponse, error)

SyncCheck 异步获取是否有新的消息

func (*Caller) UploadMedia

func (c *Caller) UploadMedia(file *os.File, request *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*UploadResponse, error)

func (*Caller) WebInit

func (c *Caller) WebInit(request *BaseRequest) (*WebInitResponse, error)

WebInit 获取初始化信息

func (*Caller) WebWxBatchGetContact

func (c *Caller) WebWxBatchGetContact(members Members, request *BaseRequest) (Members, error)

WebWxBatchGetContact 获取联系人的详情 注: Members参数的长度不要大于50

func (*Caller) WebWxCreateChatRoom

func (c *Caller) WebWxCreateChatRoom(request *BaseRequest, info *LoginInfo, topic string, friends Friends) (*Group, error)

WebWxCreateChatRoom 创建群聊

func (*Caller) WebWxGetContact

func (c *Caller) WebWxGetContact(info *LoginInfo) (Members, error)

WebWxGetContact 获取所有的联系人

func (*Caller) WebWxOplog

func (c *Caller) WebWxOplog(request *BaseRequest, remarkName, toUserName string) error

WebWxOplog 修改用户备注接口

func (*Caller) WebWxPushLogin

func (c *Caller) WebWxPushLogin(uin int) (*PushLoginResponse, error)

WebWxPushLogin 免扫码登陆接口

func (*Caller) WebWxRelationPin

func (c *Caller) WebWxRelationPin(request *BaseRequest, user *User, op uint8) error

WebWxRelationPin 将联系人是否置顶

func (*Caller) WebWxRenameChatRoom

func (c *Caller) WebWxRenameChatRoom(request *BaseRequest, info *LoginInfo, newTopic string, group *Group) error

WebWxRenameChatRoom 群组重命名

func (*Caller) WebWxRevokeMsg

func (c *Caller) WebWxRevokeMsg(msg *SentMessage, request *BaseRequest) error

WebWxRevokeMsg 撤回消息操作

func (*Caller) WebWxSendAppMsg

func (c *Caller) WebWxSendAppMsg(msg *SendMessage, req *BaseRequest) (*SentMessage, error)

WebWxSendAppMsg 发送媒体消息

func (*Caller) WebWxSendFile

func (c *Caller) WebWxSendFile(file *os.File, req *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error)

func (*Caller) WebWxSendImageMsg

func (c *Caller) WebWxSendImageMsg(file *os.File, request *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error)

WebWxSendImageMsg 发送图片消息接口

func (*Caller) WebWxSendMsg

func (c *Caller) WebWxSendMsg(msg *SendMessage, info *LoginInfo, request *BaseRequest) (*SentMessage, error)

WebWxSendMsg 发送消息接口

func (*Caller) WebWxSendVideoMsg

func (c *Caller) WebWxSendVideoMsg(file *os.File, request *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error)

func (*Caller) WebWxStatusAsRead

func (c *Caller) WebWxStatusAsRead(request *BaseRequest, info *LoginInfo, msg *Message) error

WebWxStatusAsRead 将消息设置为已读

func (*Caller) WebWxStatusNotify

func (c *Caller) WebWxStatusNotify(request *BaseRequest, response *WebInitResponse, info *LoginInfo) error

WebWxStatusNotify 通知手机已登录

func (*Caller) WebWxSync

func (c *Caller) WebWxSync(request *BaseRequest, response *WebInitResponse, info *LoginInfo) (*WebWxSyncResponse, error)

WebWxSync 获取新的消息接口

func (*Caller) WebWxVerifyUser

func (c *Caller) WebWxVerifyUser(storage *Storage, info RecommendInfo, verifyContent string) error

WebWxVerifyUser 同意加好友请求

type Card

type Card struct {
	XMLName                 xml.Name `xml:"msg"`
	ImageStatus             int      `xml:"imagestatus,attr"`
	Scene                   int      `xml:"scene,attr"`
	Sex                     int      `xml:"sex,attr"`
	Certflag                int      `xml:"certflag,attr"`
	BigHeadImgUrl           string   `xml:"bigheadimgurl,attr"`
	SmallHeadImgUrl         string   `xml:"smallheadimgurl,attr"`
	UserName                string   `xml:"username,attr"`
	NickName                string   `xml:"nickname,attr"`
	ShortPy                 string   `xml:"shortpy,attr"`
	Alias                   string   `xml:"alias,attr"` // Note: 这个是名片用户的微信号
	Province                string   `xml:"province,attr"`
	City                    string   `xml:"city,attr"`
	Sign                    string   `xml:"sign,attr"`
	Certinfo                string   `xml:"certinfo,attr"`
	BrandIconUrl            string   `xml:"brandIconUrl,attr"`
	BrandHomeUr             string   `xml:"brandHomeUr,attr"`
	BrandSubscriptConfigUrl string   `xml:"brandSubscriptConfigUrl,attr"`
	BrandFlags              string   `xml:"brandFlags,attr"`
	RegionCode              string   `xml:"regionCode,attr"`
}

Card 名片消息内容

type CheckLoginResponse

type CheckLoginResponse struct {
	Code string
	Raw  []byte
}

type Client

type Client struct {
	HttpHooks HttpHooks
	*http.Client
	Domain WechatDomain
	// contains filtered or unexported fields
}

Client http请求客户端 客户端需要维持Session会话 并且客户端不允许跳转

func DefaultClient

func DefaultClient() *Client

DefaultClient 自动存储cookie 设置客户端不自动跳转

func NewClient

func NewClient() *Client

func (*Client) AddHttpHook

func (c *Client) AddHttpHook(hooks ...HttpHook)

func (*Client) AddMemberIntoChatRoom

func (c *Client) AddMemberIntoChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*Friend) (*http.Response, error)

AddMemberIntoChatRoom 添加用户进群聊

func (*Client) CheckLogin

func (c *Client) CheckLogin(uuid string) (*http.Response, error)

CheckLogin 检查是否登录

func (*Client) Do

func (c *Client) Do(req *http.Request) (*http.Response, error)

Do 抽象Do方法,将所有的有效的cookie存入Client.cookies 方便热登陆时获取

func (*Client) GetCookieMap

func (c *Client) GetCookieMap() map[string][]*http.Cookie

GetCookieMap 获取当前client的所有的有效的client

func (*Client) GetLoginInfo

func (c *Client) GetLoginInfo(path string) (*http.Response, error)

GetLoginInfo 请求获取LoginInfo

func (*Client) GetLoginQrcode

func (c *Client) GetLoginQrcode(uuid string) (*http.Response, error)

GetLoginQrcode 获取登录的二维吗

func (*Client) GetLoginUUID

func (c *Client) GetLoginUUID() (*http.Response, error)

GetLoginUUID 获取登录的uuid

func (*Client) Logout

func (c *Client) Logout(info *LoginInfo) (*http.Response, error)

Logout 用户退出

func (*Client) RemoveMemberFromChatRoom

func (c *Client) RemoveMemberFromChatRoom(req *BaseRequest, info *LoginInfo, group *Group, friends ...*User) (*http.Response, error)

RemoveMemberFromChatRoom 从群聊中移除用户

func (*Client) SetMode

func (c *Client) SetMode(mode Mode)

SetMode 设置Client的模式

func (*Client) SyncCheck

func (c *Client) SyncCheck(request *BaseRequest, info *LoginInfo, response *WebInitResponse) (*http.Response, error)

SyncCheck 异步检查是否有新的消息返回

func (*Client) WebInit

func (c *Client) WebInit(request *BaseRequest) (*http.Response, error)

WebInit 请求获取初始化信息

func (*Client) WebWxBatchGetContact

func (c *Client) WebWxBatchGetContact(members Members, request *BaseRequest) (*http.Response, error)

WebWxBatchGetContact 获取联系人详情

func (*Client) WebWxCreateChatRoom

func (c *Client) WebWxCreateChatRoom(request *BaseRequest, info *LoginInfo, topic string, friends Friends) (*http.Response, error)

WebWxCreateChatRoom 创建群聊

func (*Client) WebWxGetContact

func (c *Client) WebWxGetContact(info *LoginInfo) (*http.Response, error)

WebWxGetContact 获取联系人信息

func (*Client) WebWxGetHeadImg

func (c *Client) WebWxGetHeadImg(user *User) (*http.Response, error)

WebWxGetHeadImg 获取用户的头像

func (*Client) WebWxGetMedia

func (c *Client) WebWxGetMedia(msg *Message, info *LoginInfo) (*http.Response, error)

WebWxGetMedia 获取文件消息的文件响应

func (*Client) WebWxGetMsgImg

func (c *Client) WebWxGetMsgImg(msg *Message, info *LoginInfo) (*http.Response, error)

WebWxGetMsgImg 获取图片消息的图片响应

func (*Client) WebWxGetVideo

func (c *Client) WebWxGetVideo(msg *Message, info *LoginInfo) (*http.Response, error)

WebWxGetVideo 获取视频消息的视频响应

func (*Client) WebWxGetVoice

func (c *Client) WebWxGetVoice(msg *Message, info *LoginInfo) (*http.Response, error)

WebWxGetVoice 获取语音消息的语音响应

func (*Client) WebWxOplog

func (c *Client) WebWxOplog(request *BaseRequest, remarkName, userName string) (*http.Response, error)

WebWxOplog 用户重命名接口

func (*Client) WebWxPushLogin

func (c *Client) WebWxPushLogin(uin int) (*http.Response, error)

WebWxPushLogin 免扫码登陆接口

func (*Client) WebWxRelationPin

func (c *Client) WebWxRelationPin(request *BaseRequest, op uint8, user *User) (*http.Response, error)

WebWxRelationPin 联系人置顶接口

func (*Client) WebWxRenameChatRoom

func (c *Client) WebWxRenameChatRoom(request *BaseRequest, info *LoginInfo, newTopic string, group *Group) (*http.Response, error)

WebWxRenameChatRoom 群组重命名接口

func (*Client) WebWxRevokeMsg

func (c *Client) WebWxRevokeMsg(msg *SentMessage, request *BaseRequest) (*http.Response, error)

WebWxRevokeMsg 撤回消息

func (*Client) WebWxSendAppMsg

func (c *Client) WebWxSendAppMsg(msg *SendMessage, request *BaseRequest) (*http.Response, error)

WebWxSendAppMsg 发送文件信息

func (*Client) WebWxSendMsg

func (c *Client) WebWxSendMsg(msg *SendMessage, info *LoginInfo, request *BaseRequest) (*http.Response, error)

WebWxSendMsg 发送文本消息

func (*Client) WebWxSendMsgImg

func (c *Client) WebWxSendMsgImg(msg *SendMessage, request *BaseRequest, info *LoginInfo) (*http.Response, error)

WebWxSendMsgImg 发送图片 这个接口依赖上传文件的接口 发送的图片必须是已经成功上传的图片

func (*Client) WebWxSendVideoMsg

func (c *Client) WebWxSendVideoMsg(request *BaseRequest, msg *SendMessage) (*http.Response, error)

WebWxSendVideoMsg 发送视频消息接口

func (*Client) WebWxStatusAsRead

func (c *Client) WebWxStatusAsRead(request *BaseRequest, info *LoginInfo, msg *Message) (*http.Response, error)

func (*Client) WebWxStatusNotify

func (c *Client) WebWxStatusNotify(request *BaseRequest, response *WebInitResponse, info *LoginInfo) (*http.Response, error)

WebWxStatusNotify 通知手机已登录

func (*Client) WebWxSync

func (c *Client) WebWxSync(request *BaseRequest, response *WebInitResponse, info *LoginInfo) (*http.Response, error)

WebWxSync 获取消息接口

func (*Client) WebWxUploadMediaByChunk

func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, info *LoginInfo, forUserName, toUserName string) (*http.Response, error)

func (*Client) WebWxVerifyUser

func (c *Client) WebWxVerifyUser(storage *Storage, info RecommendInfo, verifyContent string) (*http.Response, error)

WebWxVerifyUser 添加用户为好友接口

type ConfInfo added in v0.0.1

type ConfInfo struct {
	User     string
	Passw    string
	IP       string
	Port     int
	DataBase string
	Table    string
}

ConfInfo 配置struct

var Configer *ConfInfo

type Friend

type Friend struct{ *User }

func NewFriendHelper

func NewFriendHelper(self *Self) *Friend

NewFriendHelper 这里为了兼容Desktop版本找不到文件传输助手的问题 文件传输助手的微信身份标识符永远是filehelper 这种形式的对象可能缺少一些其他属性 但是不影响发送信息的功能

func (*Friend) AddIntoGroup

func (f *Friend) AddIntoGroup(groups ...*Group) error

AddIntoGroup 拉该好友入群

func (*Friend) SendFile

func (f *Friend) SendFile(file *os.File) (*SentMessage, error)

SendFile 发送文件消息

func (*Friend) SendImage

func (f *Friend) SendImage(file *os.File) (*SentMessage, error)

SendImage 发送图片消息

func (*Friend) SendText

func (f *Friend) SendText(content string) (*SentMessage, error)

SendText 发送文本消息

func (*Friend) SendVideo

func (f *Friend) SendVideo(file *os.File) (*SentMessage, error)

SendVideo 发送视频消息

func (*Friend) SetRemarkName

func (f *Friend) SetRemarkName(name string) error

SetRemarkName 重命名当前好友

func (Friend) String

func (f Friend) String() string

implement fmt.Stringer

type FriendAddMessage

type FriendAddMessage struct {
	XMLName           xml.Name `xml:"msg"`
	Shortpy           int      `xml:"shortpy,attr"`
	ImageStatus       int      `xml:"imagestatus,attr"`
	Scene             int      `xml:"scene,attr"`
	PerCard           int      `xml:"percard,attr"`
	Sex               int      `xml:"sex,attr"`
	AlbumFlag         int      `xml:"albumflag,attr"`
	AlbumStyle        int      `xml:"albumstyle,attr"`
	SnsFlag           int      `xml:"snsflag,attr"`
	Opcode            int      `xml:"opcode,attr"`
	FromUserName      string   `xml:"fromusername,attr"`
	EncryptUserName   string   `xml:"encryptusername,attr"`
	FromNickName      string   `xml:"fromnickname,attr"`
	Content           string   `xml:"content,attr"`
	Country           string   `xml:"country,attr"`
	Province          string   `xml:"province,attr"`
	City              string   `xml:"city,attr"`
	Sign              string   `xml:"sign,attr"`
	Alias             string   `xml:"alias,attr"`
	WeiBo             string   `xml:"weibo,attr"`
	AlbumBgImgId      string   `xml:"albumbgimgid,attr"`
	SnsBgImgId        string   `xml:"snsbgimgid,attr"`
	SnsBgObjectId     string   `xml:"snsbgobjectid,attr"`
	MHash             string   `xml:"mhash,attr"`
	MFullHash         string   `xml:"mfullhash,attr"`
	BigHeadImgUrl     string   `xml:"bigheadimgurl,attr"`
	SmallHeadImgUrl   string   `xml:"smallheadimgurl,attr"`
	Ticket            string   `xml:"ticket,attr"`
	GoogleContact     string   `xml:"googlecontact,attr"`
	QrTicket          string   `xml:"qrticket,attr"`
	ChatRoomUserName  string   `xml:"chatroomusername,attr"`
	SourceUserName    string   `xml:"sourceusername,attr"`
	ShareCardUserName string   `xml:"sharecardusername,attr"`
	ShareCardNickName string   `xml:"sharecardnickname,attr"`
	CardVersion       string   `xml:"cardversion,attr"`
	BrandList         struct {
		Count int   `xml:"count,attr"`
		Ver   int64 `xml:"ver,attr"`
	} `xml:"brandlist"`
}

FriendAddMessage 好友添加消息信息内容

type Friends

type Friends []*Friend

func (Friends) Count

func (f Friends) Count() int

Count 获取好友的数量

func (Friends) First

func (f Friends) First() *Friend

First 获取第一个好友

func (Friends) GetByNickName

func (f Friends) GetByNickName(nickname string) *Friend

GetByNickName 根据nickname查询一个Friend

func (Friends) GetByRemarkName

func (f Friends) GetByRemarkName(remarkName string) *Friend

GetByRemarkName 根据remarkName查询一个Friend

func (Friends) GetByUsername

func (f Friends) GetByUsername(username string) *Friend

GetByUsername 根据username查询一个Friend

func (Friends) Last

func (f Friends) Last() *Friend

Last 获取最后一个好友

func (Friends) Search

func (f Friends) Search(limit int, condFuncList ...func(friend *Friend) bool) (results Friends)

Search 根据自定义条件查找好友

func (Friends) SearchByNickName

func (f Friends) SearchByNickName(limit int, nickName string) (results Friends)

SearchByNickName 根据昵称查找好友

func (Friends) SearchByRemarkName

func (f Friends) SearchByRemarkName(limit int, remarkName string) (results Friends)

SearchByRemarkName 根据备注查找好友

func (Friends) SearchByUserName

func (f Friends) SearchByUserName(limit int, username string) (results Friends)

SearchByUserName 根据用户名查找好友

func (Friends) SendFile

func (f Friends) SendFile(file *os.File, delay ...time.Duration) error

SendFile 群发文件

func (Friends) SendImage

func (f Friends) SendImage(file *os.File, delay ...time.Duration) error

SendImage 向slice的好友依次发送图片消息

func (Friends) SendText

func (f Friends) SendText(text string, delay ...time.Duration) error

SendText 向slice的好友依次发送文本消息

type Group

type Group struct{ *User }

func (*Group) AddFriendsIn

func (g *Group) AddFriendsIn(friends ...*Friend) error

AddFriendsIn 拉好友入群

func (*Group) Members

func (g *Group) Members() (Members, error)

Members 获取所有的群成员

func (*Group) RemoveMembers

func (g *Group) RemoveMembers(members Members) error

RemoveMembers 从群聊中移除用户 Deprecated 无论是网页版,还是程序上都不起作用

func (*Group) Rename

func (g *Group) Rename(name string) error

Rename 群组重命名

func (*Group) SendFile

func (g *Group) SendFile(file *os.File) (*SentMessage, error)

SendFile 发送文件给当前的群组

func (*Group) SendImage

func (g *Group) SendImage(file *os.File) (*SentMessage, error)

SendImage 发行图片消息给当前的群组

func (*Group) SendText

func (g *Group) SendText(content string) (*SentMessage, error)

SendText 发行文本消息给当前的群组

func (*Group) SendVideo

func (g *Group) SendVideo(file *os.File) (*SentMessage, error)

SendVideo 发行视频消息给当前的群组

func (Group) String

func (g Group) String() string

implement fmt.Stringer

type Groups

type Groups []*Group

func (Groups) Count

func (g Groups) Count() int

Count 获取群组数量

func (Groups) First

func (g Groups) First() *Group

First 获取第一个群组

func (Groups) GetByNickName

func (g Groups) GetByNickName(nickname string) *Group

GetByNickName 根据nickname查询一个Group

func (Groups) GetByRemarkName

func (g Groups) GetByRemarkName(remarkName string) *Group

GetByRemarkName 根据remarkName查询一个Group

func (Groups) GetByUsername

func (g Groups) GetByUsername(username string) *Group

GetByUsername 根据username查询一个Group

func (Groups) Last

func (g Groups) Last() *Group

Last 获取最后一个群组

func (Groups) Search

func (g Groups) Search(limit int, condFuncList ...func(group *Group) bool) (results Groups)

Search 根据自定义条件查找群组

func (Groups) SearchByNickName

func (g Groups) SearchByNickName(limit int, nickName string) (results Groups)

SearchByNickName 根据昵称查找群组

func (Groups) SearchByRemarkName

func (g Groups) SearchByRemarkName(limit int, remarkName string) (results Groups)

SearchByRemarkName 根据备注查找群组

func (Groups) SearchByUserName

func (g Groups) SearchByUserName(limit int, username string) (results Groups)

SearchByUserName 根据用户名查找群组

func (Groups) SendImage

func (g Groups) SendImage(file *os.File, delay ...time.Duration) error

SendImage 向群组依次发送图片消息, 支持发送延迟

func (Groups) SendText

func (g Groups) SendText(text string, delay ...time.Duration) error

SendText 向群组依次发送文本消息, 支持发送延迟

type HotReloadStorage

type HotReloadStorage io.ReadWriter

HotReloadStorage 热登陆存储接口

func NewJsonFileHotReloadStorage

func NewJsonFileHotReloadStorage(filename string) HotReloadStorage

NewJsonFileHotReloadStorage 创建JsonFileHotReloadStorage Deprecated use os.File instead

type HotReloadStorageItem

type HotReloadStorageItem struct {
	Cookies      map[string][]*http.Cookie
	BaseRequest  *BaseRequest
	LoginInfo    *LoginInfo
	WechatDomain WechatDomain
	UUID         string
}

func NewHotReloadStorageItem

func NewHotReloadStorageItem(storage HotReloadStorage) (*HotReloadStorageItem, error)

type HttpHook

type HttpHook interface {
	BeforeRequest(req *http.Request)
	AfterRequest(response *http.Response, err error)
}

HttpHook 请求上下文钩子

type HttpHooks

type HttpHooks []HttpHook

type JsonFileHotReloadStorage

type JsonFileHotReloadStorage struct {
	FileName string
	// contains filtered or unexported fields
}

JsonFileHotReloadStorage 实现HotReloadStorage接口 默认以json文件的形式存储 Deprecated

func (*JsonFileHotReloadStorage) Read

func (j *JsonFileHotReloadStorage) Read(p []byte) (n int, err error)

func (*JsonFileHotReloadStorage) Write

func (j *JsonFileHotReloadStorage) Write(p []byte) (n int, err error)

type LoginInfo

type LoginInfo struct {
	Ret         int    `xml:"ret"`
	WxUin       int64  `xml:"wxuin"`
	IsGrayScale int    `xml:"isgrayscale"`
	Message     string `xml:"message"`
	SKey        string `xml:"skey"`
	WxSid       string `xml:"wxsid"`
	PassTicket  string `xml:"pass_ticket"`
}

LoginInfo 登录信息

func (LoginInfo) Error

func (l LoginInfo) Error() string

func (LoginInfo) Ok

func (l LoginInfo) Ok() bool

type MPSubscribeMsg

type MPSubscribeMsg struct {
	MPArticleCount int
	Time           int64
	UserName       string
	NickName       string
	MPArticleList  []struct {
		Title  string
		Cover  string
		Digest string
		Url    string
	}
}

MPSubscribeMsg 公众号的订阅信息

type MatchFunc

type MatchFunc func(*Message) bool

MatchFunc 消息匹配函数,返回为true则表示匹配

func MatchFuncList

func MatchFuncList(matchFuncs ...MatchFunc) MatchFunc

MatchFuncList 将多个MatchFunc封装成一个MatchFunc

func SenderFriendRequired

func SenderFriendRequired() MatchFunc

SenderFriendRequired 只匹配好友

func SenderGroupRequired

func SenderGroupRequired() MatchFunc

SenderGroupRequired 只匹配群组

func SenderMatchFunc

func SenderMatchFunc(matchFuncs ...MessageSenderMatchFunc) MatchFunc

SenderMatchFunc 抽象的匹配发送者特征的处理函数

    dispatcher := NewMessageMatchDispatcher()
	   matchFuncList := MatchFuncList(SenderFriendRequired(), SenderNickNameContainsMatchFunc("多吃点苹果"))
	   dispatcher.RegisterHandler(matchFuncList, func(ctx *MessageContext) {
		     do your own business
	   })

func SenderMpRequired

func SenderMpRequired() MatchFunc

SenderMpRequired 只匹配公众号

func SenderNickNameContainsMatchFunc

func SenderNickNameContainsMatchFunc(nickname string) MatchFunc

SenderNickNameContainsMatchFunc 根据用户昵称是否包含指定字符串的匹配函数

func SenderNickNameEqualMatchFunc

func SenderNickNameEqualMatchFunc(nickname string) MatchFunc

SenderNickNameEqualMatchFunc 根据用户昵称是否等于指定字符串的匹配函数

func SenderRemakeNameContainsFunc

func SenderRemakeNameContainsFunc(remakeName string) MatchFunc

SenderRemakeNameContainsFunc 根据用户备注名是否包含指定字符串的匹配函数

func SenderRemarkNameEqualMatchFunc

func SenderRemarkNameEqualMatchFunc(remarkName string) MatchFunc

SenderRemarkNameEqualMatchFunc 根据用户备注是否等于指定字符串的匹配函数

type Members

type Members []*User

Members 抽象的用户组

func (Members) Count

func (m Members) Count() int

Count 统计数量

func (Members) First

func (m Members) First() *User

First 获取第一个

func (Members) Friends

func (m Members) Friends() Friends

func (Members) GetByNickName

func (m Members) GetByNickName(nickname string) (*User, bool)

GetByNickName 根据nickname查找用户

func (Members) GetByRemarkName

func (m Members) GetByRemarkName(remarkName string) (*User, bool)

GetByRemarkName 根据remarkName查找用户

func (Members) GetByUserName

func (m Members) GetByUserName(username string) (*User, bool)

GetByUserName 根据username查找用户

func (Members) Groups

func (m Members) Groups() Groups

func (Members) Last

func (m Members) Last() *User

Last 获取最后一个

func (Members) MPs

func (m Members) MPs() Mps

func (Members) Search

func (m Members) Search(limit int, condFuncList ...func(user *User) bool) (results Members)

Search 根据自定义条件查找

func (Members) SearchByNickName

func (m Members) SearchByNickName(limit int, nickName string) (results Members)

SearchByNickName 根据昵称查找

func (Members) SearchByRemarkName

func (m Members) SearchByRemarkName(limit int, remarkName string) (results Members)

SearchByRemarkName 根据备注查找

func (Members) SearchByUserName

func (m Members) SearchByUserName(limit int, username string) (results Members)

SearchByUserName 根据用户名查找

type Message

type Message struct {
	AppInfo struct {
		Type  int
		AppID string
	}
	AppMsgType           AppMessageType
	HasProductId         int
	ImgHeight            int
	ImgStatus            int
	ImgWidth             int
	ForwardFlag          int
	MsgType              MessageType
	Status               int
	StatusNotifyCode     int
	SubMsgType           int
	VoiceLength          int
	CreateTime           int64
	NewMsgId             int64
	PlayLength           int64
	MediaId              string
	MsgId                string
	EncryFileName        string
	FileName             string
	FileSize             string
	Content              string
	FromUserName         string
	OriContent           string
	StatusNotifyUserName string
	Ticket               string
	ToUserName           string
	Url                  string

	RecommendInfo RecommendInfo
	Bot           *Bot `json:"-"`

	Context context.Context `json:"-"`

	Raw        []byte `json:"-"`
	RowContent string `json:"-"` // 消息原始内容
	// contains filtered or unexported fields
}

func (*Message) Agree

func (m *Message) Agree(verifyContents ...string) error

Agree 同意好友的请求

func (*Message) AsRead

func (m *Message) AsRead() error

AsRead 将消息设置为已读

func (*Message) Card

func (m *Message) Card() (*Card, error)

Card 获取card类型

func (*Message) FriendAddMessageContent

func (m *Message) FriendAddMessageContent() (*FriendAddMessage, error)

FriendAddMessageContent 获取FriendAddMessageContent内容

func (*Message) Get

func (m *Message) Get(key string) (value interface{}, exist bool)

Get 从消息上下文中获取值 goroutine safe

func (*Message) GetFile

func (m *Message) GetFile() (*http.Response, error)

GetFile 获取文件消息的文件

func (*Message) GetMedia

func (m *Message) GetMedia() (*http.Response, error)

GetMedia 获取媒体消息的响应

func (*Message) GetPicture

func (m *Message) GetPicture() (*http.Response, error)

GetPicture 获取图片消息的响应

func (*Message) GetVideo

func (m *Message) GetVideo() (*http.Response, error)

GetVideo 获取视频消息的响应

func (*Message) GetVoice

func (m *Message) GetVoice() (*http.Response, error)

GetVoice 获取录音消息的响应

func (*Message) HasFile

func (m *Message) HasFile() bool

HasFile 判断消息是否为文件类型的消息

func (*Message) IsArticle

func (m *Message) IsArticle() bool

IsArticle 判断当前的消息类型是否为文章

func (*Message) IsAt

func (m *Message) IsAt() bool

IsAt 判断消息是否为@消息

func (*Message) IsCard

func (m *Message) IsCard() bool

func (*Message) IsComeFromGroup

func (m *Message) IsComeFromGroup() bool

IsComeFromGroup 判断消息是否来自群组 可能是自己或者别的群员发送

func (*Message) IsEmoticon

func (m *Message) IsEmoticon() bool

IsEmoticon 是否为表情包消息

func (*Message) IsFriendAdd

func (m *Message) IsFriendAdd() bool

func (*Message) IsJoinGroup

func (m *Message) IsJoinGroup() bool

IsJoinGroup 判断是否有人加入了群聊

func (*Message) IsMap

func (m *Message) IsMap() bool

func (*Message) IsMedia

func (m *Message) IsMedia() bool

func (*Message) IsNotify

func (m *Message) IsNotify() bool

func (*Message) IsPaiYiPai

func (m *Message) IsPaiYiPai() bool

IsPaiYiPai 判断消息是否为拍一拍 不要问我为什么取名为PaiYiPai,因为我也不知道取啥名字好

func (*Message) IsPicture

func (m *Message) IsPicture() bool

func (*Message) IsRecalled

func (m *Message) IsRecalled() bool

IsRecalled 判断是否撤回

func (*Message) IsReceiveRedPacket

func (m *Message) IsReceiveRedPacket() bool

IsReceiveRedPacket 判断当前是否收到红包

func (*Message) IsSendByFriend

func (m *Message) IsSendByFriend() bool

IsSendByFriend 判断消息是否由好友发送

func (*Message) IsSendByGroup

func (m *Message) IsSendByGroup() bool

IsSendByGroup 判断消息是否由群组发送

func (*Message) IsSendBySelf

func (m *Message) IsSendBySelf() bool

IsSendBySelf 判断消息是否由自己发送

func (*Message) IsSendRedPacket

func (m *Message) IsSendRedPacket() bool

IsSendRedPacket 否发出红包判断当前是

func (*Message) IsSysNotice

func (m *Message) IsSysNotice() bool

func (*Message) IsSystem

func (m *Message) IsSystem() bool

func (*Message) IsText

func (m *Message) IsText() bool

func (*Message) IsTickled

func (m *Message) IsTickled() bool

IsTickled 判断消息是否为拍一拍

func (*Message) IsTransferAccounts

func (m *Message) IsTransferAccounts() bool

IsTransferAccounts 判断当前的消息是不是微信转账

func (*Message) IsVideo

func (m *Message) IsVideo() bool

func (*Message) IsVoice

func (m *Message) IsVoice() bool

func (*Message) MediaData

func (m *Message) MediaData() (*AppMessageData, error)

MediaData 获取当前App Message的具体内容

func (*Message) Receiver

func (m *Message) Receiver() (*User, error)

Receiver 获取消息的接收者 如果消息是群组消息,则返回群组 如果消息是好友消息,则返回好友 如果消息是系统消息,则返回当前用户

func (*Message) ReplyFile

func (m *Message) ReplyFile(file *os.File) (*SentMessage, error)

ReplyFile 回复文件消息

func (*Message) ReplyImage

func (m *Message) ReplyImage(file *os.File) (*SentMessage, error)

ReplyImage 回复图片消息

func (*Message) ReplyText

func (m *Message) ReplyText(content string) (*SentMessage, error)

ReplyText 回复文本消息

func (*Message) ReplyVideo

func (m *Message) ReplyVideo(file *os.File) (*SentMessage, error)

ReplyVideo 回复视频消息

func (*Message) RevokeMsg

func (m *Message) RevokeMsg() (*RevokeMsg, error)

RevokeMsg 获取撤回消息的内容

func (*Message) Sender

func (m *Message) Sender() (*User, error)

Sender 获取消息的发送者

func (*Message) SenderInGroup

func (m *Message) SenderInGroup() (*User, error)

SenderInGroup 获取消息在群里面的发送者

func (*Message) Set

func (m *Message) Set(key string, value interface{})

Set 往消息上下文中设置值 goroutine safe

func (*Message) StatusNotify

func (m *Message) StatusNotify() bool

StatusNotify 判断是否为操作通知消息

func (*Message) String

func (m *Message) String() string

type MessageContext

type MessageContext struct {
	*Message
	// contains filtered or unexported fields
}

MessageContext 消息处理上下文对象

func (*MessageContext) Abort

func (c *MessageContext) Abort()

Abort 中断当前消息处理, 不会调用下一个消息处理函数, 但是不会中断当前的处理函数

func (*MessageContext) AbortHandler

func (c *MessageContext) AbortHandler() MessageContextHandler

AbortHandler 获取当前中断的消息处理函数

func (*MessageContext) IsAbort

func (c *MessageContext) IsAbort() bool

IsAbort 判断是否被中断

func (*MessageContext) Next

func (c *MessageContext) Next()

Next 主动调用下一个消息处理函数(或开始调用)

type MessageContextHandler

type MessageContextHandler func(ctx *MessageContext)

MessageContextHandler 消息处理函数

type MessageContextHandlerGroup

type MessageContextHandlerGroup []MessageContextHandler

type MessageDispatcher

type MessageDispatcher interface {
	Dispatch(msg *Message)
}

MessageDispatcher 消息分发处理接口 跟 DispatchMessage 结合封装成 MessageHandler

type MessageHandler

type MessageHandler func(msg *Message)

MessageHandler 消息处理函数

type MessageMatchDispatcher

type MessageMatchDispatcher struct {
	// contains filtered or unexported fields
}

MessageMatchDispatcher impl MessageDispatcher interface

dispatcher := NewMessageMatchDispatcher()
dispatcher.OnText(func(msg *Message){
		msg.ReplyText("hello")
})
bot := DefaultBot()
bot.MessageHandler = DispatchMessage(dispatcher)

func NewMessageMatchDispatcher

func NewMessageMatchDispatcher() *MessageMatchDispatcher

NewMessageMatchDispatcher Constructor

func (*MessageMatchDispatcher) Dispatch

func (m *MessageMatchDispatcher) Dispatch(msg *Message)

Dispatch impl MessageDispatcher 遍历 MessageMatchDispatcher 所有的消息处理函数 获取所有匹配上的函数 执行处理的消息处理方法

func (*MessageMatchDispatcher) OnCard

func (m *MessageMatchDispatcher) OnCard(handlers ...MessageContextHandler)

OnCard 注册处理消息类型为Card的处理函数

func (*MessageMatchDispatcher) OnEmoticon

func (m *MessageMatchDispatcher) OnEmoticon(handlers ...MessageContextHandler)

OnEmoticon 注册处理消息类型为Emoticon的处理函数(表情包)

func (*MessageMatchDispatcher) OnFriend

func (m *MessageMatchDispatcher) OnFriend(handlers ...MessageContextHandler)

OnFriend 注册发送者为好友的处理函数

func (*MessageMatchDispatcher) OnFriendAdd

func (m *MessageMatchDispatcher) OnFriendAdd(handlers ...MessageContextHandler)

OnFriendAdd 注册处理消息类型为FriendAdd的处理函数

func (*MessageMatchDispatcher) OnFriendByNickName

func (m *MessageMatchDispatcher) OnFriendByNickName(nickName string, handlers ...MessageContextHandler)

OnFriendByNickName 注册根据好友昵称是否匹配的消息处理函数

func (*MessageMatchDispatcher) OnFriendByRemarkName

func (m *MessageMatchDispatcher) OnFriendByRemarkName(remarkName string, handlers ...MessageContextHandler)

OnFriendByRemarkName 注册根据好友备注是否匹配的消息处理函数

func (*MessageMatchDispatcher) OnGroup

func (m *MessageMatchDispatcher) OnGroup(handlers ...MessageContextHandler)

OnGroup 注册发送者为群组的处理函数

func (*MessageMatchDispatcher) OnGroupByGroupName

func (m *MessageMatchDispatcher) OnGroupByGroupName(groupName string, handlers ...MessageContextHandler)

OnGroupByGroupName 注册根据群名是否匹配的消息处理函数

func (*MessageMatchDispatcher) OnImage

func (m *MessageMatchDispatcher) OnImage(handlers ...MessageContextHandler)

OnImage 注册处理消息类型为Image的处理函数

func (*MessageMatchDispatcher) OnMedia

func (m *MessageMatchDispatcher) OnMedia(handlers ...MessageContextHandler)

OnMedia 注册处理消息类型为Media(多媒体消息,包括但不限于APP分享、文件分享)的处理函数

func (*MessageMatchDispatcher) OnText

func (m *MessageMatchDispatcher) OnText(handlers ...MessageContextHandler)

OnText 注册处理消息类型为Text的处理函数

func (*MessageMatchDispatcher) OnUser

func (m *MessageMatchDispatcher) OnUser(f func(user *User) bool, handlers ...MessageContextHandler)

OnUser 注册根据消息发送者的行为是否匹配的消息处理函数

func (*MessageMatchDispatcher) OnVoice

func (m *MessageMatchDispatcher) OnVoice(handlers ...MessageContextHandler)

OnVoice 注册处理消息类型为Voice的处理函数

func (*MessageMatchDispatcher) RegisterHandler

func (m *MessageMatchDispatcher) RegisterHandler(matchFunc MatchFunc, handlers ...MessageContextHandler)

RegisterHandler 注册消息处理函数, 根据自己的需求自定义 matchFunc返回true则表示处理对应的handlers

func (*MessageMatchDispatcher) SetAsync

func (m *MessageMatchDispatcher) SetAsync(async bool)

SetAsync 设置是否异步处理

type MessageResponse

type MessageResponse struct {
	BaseResponse BaseResponse
	LocalID      string
	MsgID        string
}

type MessageSenderMatchFunc

type MessageSenderMatchFunc func(user *User) bool

type MessageType

type MessageType int

MessageType 以Go惯用形式定义了PC微信所有的官方消息类型。 详见 message_test.go

Example (Output)
for _, wxt := range []MessageType{
	MsgTypeText, MsgTypeImage, MsgTypeVoice, MsgTypeVerify,
	MsgTypePossibleFriend, MsgTypeShareCard, MsgTypeVideo, MsgTypeEmoticon,
	MsgTypeLocation, MsgTypeApp, MsgTypeVoip, MsgTypeVoipNotify,
	MsgTypeVoipInvite, MsgTypeMicroVideo, MsgTypeSys, MsgTypeRecalled} {
	fmt.Printf("收到一条%s(type %d)\n", wxt, wxt)
}
fmt.Println("=======")
for _, wxt := range []MessageType{10000, 6, 51} {
	wxtstr := wxt.String()
	if regexp.MustCompile(`^M`).MatchString(wxtstr) {
		wxtstr = "未知消息"
	}
	fmt.Printf("收到一条%s(type %d): %s\n", wxtstr, wxt, wxt)
}
Output:

收到一条文本消息(type 1)
收到一条图片消息(type 3)
收到一条语音消息(type 34)
收到一条认证消息(type 37)
收到一条好友推荐消息(type 40)
收到一条名片消息(type 42)
收到一条视频消息(type 43)
收到一条表情消息(type 47)
收到一条地理位置消息(type 48)
收到一条APP消息(type 49)
收到一条VOIP消息(type 50)
收到一条VOIP结束消息(type 52)
收到一条VOIP邀请(type 53)
收到一条小视频消息(type 62)
收到一条系统消息(type 10000)
收到一条消息撤回(type 10002)
=======
收到一条系统消息(type 10000): 系统消息
收到一条未知消息(type 6): MessageType(6)
收到一条未知消息(type 51): MessageType(51)
const (
	MsgTypeText           MessageType = 1     // 文本消息
	MsgTypeImage          MessageType = 3     // 图片消息
	MsgTypeVoice          MessageType = 34    // 语音消息
	MsgTypeVerify         MessageType = 37    // 认证消息
	MsgTypePossibleFriend MessageType = 40    // 好友推荐消息
	MsgTypeShareCard      MessageType = 42    // 名片消息
	MsgTypeVideo          MessageType = 43    // 视频消息
	MsgTypeEmoticon       MessageType = 47    // 表情消息
	MsgTypeLocation       MessageType = 48    // 地理位置消息
	MsgTypeApp            MessageType = 49    // APP消息
	MsgTypeVoip           MessageType = 50    // VOIP消息
	MsgTypeVoipNotify     MessageType = 52    // VOIP结束消息
	MsgTypeVoipInvite     MessageType = 53    // VOIP邀请
	MsgTypeMicroVideo     MessageType = 62    // 小视频消息
	MsgTypeSys            MessageType = 10000 // 系统消息
	MsgTypeRecalled       MessageType = 10002 // 消息撤回
)

func (MessageType) String

func (i MessageType) String() string

type Mode

type Mode interface {
	GetLoginUUID(client *Client) (*http.Response, error)
	GetLoginInfo(client *Client, path string) (*http.Response, error)
}
var (
	Normal Mode = normalMode{}

	Desktop Mode = desktopMode{}
)

type Mp

type Mp struct{ *User }

Mp 公众号对象

func (*Mp) SendFile

func (m *Mp) SendFile(file *os.File) (*SentMessage, error)

SendFile 发送文件消息给公众号

func (*Mp) SendImage

func (m *Mp) SendImage(file *os.File) (*SentMessage, error)

SendImage 发送图片消息给公众号

func (*Mp) SendText

func (m *Mp) SendText(content string) (*SentMessage, error)

SendText 发送文本消息给公众号

func (Mp) String

func (m Mp) String() string

type Mps

type Mps []*Mp

Mps 公众号组对象

func (Mps) Count

func (m Mps) Count() int

Count 数量统计

func (Mps) First

func (m Mps) First() *Mp

First 获取第一个

func (Mps) GetByNickName

func (m Mps) GetByNickName(nickname string) *Mp

GetByNickName 根据nickname查询一个Mp

func (Mps) GetByUserName

func (m Mps) GetByUserName(username string) *Mp

GetByUserName 根据username查询一个Mp

func (Mps) Last

func (m Mps) Last() *Mp

Last 获取最后一个

func (Mps) Search

func (m Mps) Search(limit int, condFuncList ...func(group *Mp) bool) (results Mps)

Search 根据自定义条件查找

func (Mps) SearchByNickName

func (m Mps) SearchByNickName(limit int, nickName string) (results Mps)

SearchByNickName 根据昵称查找

func (Mps) SearchByUserName

func (m Mps) SearchByUserName(limit int, userName string) (results Mps)

SearchByUserName 根据用户名查找

type NetworkErr

type NetworkErr struct {
	// contains filtered or unexported fields
}

func (NetworkErr) Unwrap

func (n NetworkErr) Unwrap() error

type PushLoginResponse

type PushLoginResponse struct {
	Ret  string `json:"ret"`
	Msg  string `json:"msg"`
	UUID string `json:"uuid"`
}

func (PushLoginResponse) Ok

func (p PushLoginResponse) Ok() bool

type RecommendInfo

type RecommendInfo struct {
	OpCode     int
	Scene      int
	Sex        int
	VerifyFlag int
	AttrStatus int64
	QQNum      int64
	Alias      string
	City       string
	Content    string
	NickName   string
	Province   string
	Signature  string
	Ticket     string
	UserName   string
}

RecommendInfo 一些特殊类型的消息会携带该结构体信息

type Repositories added in v0.0.1

type Repositories struct {
	RotRepo *repo.RotBaseRepo
	// contains filtered or unexported fields
}

Repositories TODO

func NewRepositories added in v0.0.1

func NewRepositories(info *ConfInfo) *Repositories

NewRepositories TODO

type Ret

type Ret int

func (Ret) String

func (r Ret) String() string

type RevokeMsg

type RevokeMsg struct {
	SysMsg    xml.Name `xml:"sysmsg"`
	Type      string   `xml:"type,attr"`
	RevokeMsg struct {
		OldMsgId   int64  `xml:"oldmsgid"`
		MsgId      int64  `xml:"msgid"`
		Session    string `xml:"session"`
		ReplaceMsg string `xml:"replacemsg"`
	} `xml:"revokemsg"`
}

RevokeMsg 撤回消息Content

type Self

type Self struct {
	*User
	Bot *Bot
	// contains filtered or unexported fields
}

Self 自己,当前登录用户对象

func (*Self) AddFriendIntoManyGroups

func (s *Self) AddFriendIntoManyGroups(friend *Friend, groups ...*Group) error

AddFriendIntoManyGroups 拉好友进多个群聊 AddFriendIntoGroups, 名字和上面的有点像

func (*Self) AddFriendsIntoGroup

func (s *Self) AddFriendsIntoGroup(group *Group, friends ...*Friend) error

AddFriendsIntoGroup 拉多名好友进群 最好自己是群主,成功率高一点,因为有的群允许非群组拉人,而有的群不允许

func (*Self) CreateGroup

func (s *Self) CreateGroup(topic string, friends ...*Friend) (*Group, error)

CreateGroup 创建群聊 topic 群昵称,可以传递字符串 friends 群员,最少为2个,加上自己3个,三人才能成群

func (*Self) FileHelper

func (s *Self) FileHelper() (*Friend, error)

FileHelper 获取文件传输助手对象,封装成Friend返回

fh, err := self.FileHelper() // or fh := openwechat.NewFriendHelper(self)

func (*Self) ForwardMessageToFriends

func (s *Self) ForwardMessageToFriends(msg *SentMessage, friends ...*Friend) error

ForwardMessageToFriends 转发给好友

func (*Self) ForwardMessageToGroups

func (s *Self) ForwardMessageToGroups(msg *SentMessage, groups ...*Group) error

ForwardMessageToGroups 转发给群组

func (*Self) Friends

func (s *Self) Friends(update ...bool) (Friends, error)

Friends 获取所有的好友

func (*Self) Groups

func (s *Self) Groups(update ...bool) (Groups, error)

Groups 获取所有的群组

func (*Self) Members

func (s *Self) Members(update ...bool) (Members, error)

Members 获取所有的好友、群组、公众号信息

func (*Self) Mps

func (s *Self) Mps(update ...bool) (Mps, error)

Mps 获取所有的公众号

func (*Self) RemoveMemberFromGroup

func (s *Self) RemoveMemberFromGroup(group *Group, members Members) error

RemoveMemberFromGroup 从群聊中移除用户 Deprecated 无论是网页版,还是程序上都不起作用

func (*Self) RenameGroup

func (s *Self) RenameGroup(group *Group, newName string) error

RenameGroup 群组重命名

func (*Self) RevokeMessage

func (s *Self) RevokeMessage(msg *SentMessage) error

RevokeMessage 撤回消息

sentMessage, err := friend.SendText("message")
if err == nil {
    self.RevokeMessage(sentMessage) // or sentMessage.Revoke()
}

func (*Self) SendFileToFriend

func (s *Self) SendFileToFriend(friend *Friend, file *os.File) (*SentMessage, error)

SendFileToFriend 发送文件给好友

func (*Self) SendFileToGroup

func (s *Self) SendFileToGroup(group *Group, file *os.File) (*SentMessage, error)

SendFileToGroup 发送文件给群组

func (*Self) SendFileToMp

func (s *Self) SendFileToMp(mp *Mp, file *os.File) (*SentMessage, error)

SendFileToMp 发送文件给公众号

func (*Self) SendImageToFriend

func (s *Self) SendImageToFriend(friend *Friend, file *os.File) (*SentMessage, error)

SendImageToFriend 发送图片消息给好友

func (*Self) SendImageToGroup

func (s *Self) SendImageToGroup(group *Group, file *os.File) (*SentMessage, error)

SendImageToGroup 发送图片消息给群组

func (*Self) SendImageToMp

func (s *Self) SendImageToMp(mp *Mp, file *os.File) (*SentMessage, error)

SendImageToMp 发送图片消息给公众号

func (*Self) SendTextToFriend

func (s *Self) SendTextToFriend(friend *Friend, text string) (*SentMessage, error)

SendTextToFriend 发送文本消息给好友

func (*Self) SendTextToGroup

func (s *Self) SendTextToGroup(group *Group, text string) (*SentMessage, error)

SendTextToGroup 发送文本消息给群组

func (*Self) SendTextToMp

func (s *Self) SendTextToMp(mp *Mp, text string) (*SentMessage, error)

SendTextToMp 发送文本消息给公众号

func (*Self) SendVideoToFriend

func (s *Self) SendVideoToFriend(friend *Friend, file *os.File) (*SentMessage, error)

SendVideoToFriend 发送视频给好友

func (*Self) SendVideoToGroup

func (s *Self) SendVideoToGroup(group *Group, file *os.File) (*SentMessage, error)

SendVideoToGroup 发送视频给群组

func (*Self) SendVideoToMp

func (s *Self) SendVideoToMp(mp *Mp, file *os.File) (*SentMessage, error)

SendVideoToMp 发送视频消息给公众号

func (*Self) SetRemarkNameToFriend

func (s *Self) SetRemarkNameToFriend(friend *Friend, remarkName string) error

SetRemarkNameToFriend 设置好友备注

self.SetRemarkNameToFriend(friend, "remark") // or friend.SetRemarkName("remark")

func (*Self) UpdateMembersDetail

func (s *Self) UpdateMembersDetail() error

UpdateMembersDetail 更新所有的联系人信息

type SendMessage

type SendMessage struct {
	Type         MessageType
	Content      string
	FromUserName string
	ToUserName   string
	LocalID      string
	ClientMsgId  string
	MediaId      string `json:"MediaId,omitempty"`
}

SendMessage 发送消息的结构体

func NewMediaSendMessage

func NewMediaSendMessage(msgType MessageType, fromUserName, toUserName, mediaId string) *SendMessage

NewMediaSendMessage 媒体消息的构造方法

func NewSendMessage

func NewSendMessage(msgType MessageType, content, fromUserName, toUserName, mediaId string) *SendMessage

NewSendMessage SendMessage的构造方法

func NewTextSendMessage

func NewTextSendMessage(content, fromUserName, toUserName string) *SendMessage

NewTextSendMessage 文本消息的构造方法

type SentMessage

type SentMessage struct {
	*SendMessage
	Self  *Self
	MsgId string
}

SentMessage 已发送的信息

func (*SentMessage) CanRevoke

func (s *SentMessage) CanRevoke() bool

CanRevoke 是否可以撤回该消息

func (*SentMessage) ForwardToFriends

func (s *SentMessage) ForwardToFriends(friends ...*Friend) error

ForwardToFriends 转发该消息给好友

func (*SentMessage) ForwardToGroups

func (s *SentMessage) ForwardToGroups(groups ...*Group) error

ForwardToGroups 转发该消息给群组

func (*SentMessage) Revoke

func (s *SentMessage) Revoke() error

Revoke 撤回该消息

type Storage

type Storage struct {
	LoginInfo *LoginInfo
	Request   *BaseRequest
	Response  *WebInitResponse
}

Storage 身份信息, 维持整个登陆的Session会话

type SyncCheckResponse

type SyncCheckResponse struct {
	RetCode  string
	Selector string
}

func (SyncCheckResponse) Error

func (s SyncCheckResponse) Error() string

实现error接口

func (SyncCheckResponse) NorMal

func (s SyncCheckResponse) NorMal() bool

func (SyncCheckResponse) Success

func (s SyncCheckResponse) Success() bool

type SyncKey

type SyncKey struct {
	Count int
	List  []struct{ Key, Val int64 }
}

type UploadResponse

type UploadResponse struct {
	BaseResponse BaseResponse
	MediaId      string
}

type User

type User struct {
	HideInputBarFlag  int
	StarFriend        int
	Sex               int
	AppAccountFlag    int
	VerifyFlag        int
	ContactFlag       int
	WebWxPluginSwitch int
	HeadImgFlag       int
	SnsFlag           int
	IsOwner           int
	MemberCount       int
	ChatRoomId        int
	UniFriend         int
	OwnerUin          int
	Statues           int
	AttrStatus        int64
	Uin               int64
	Province          string
	City              string
	Alias             string
	DisplayName       string
	KeyWord           string
	EncryChatRoomId   string
	UserName          string
	NickName          string
	HeadImgUrl        string
	RemarkName        string
	PYInitial         string
	PYQuanPin         string
	RemarkPYInitial   string
	RemarkPYQuanPin   string
	Signature         string

	MemberList Members

	Self *Self
}

User 抽象的用户结构: 好友 群组 公众号

func (*User) Detail

func (u *User) Detail() error

Detail 获取用户的详情

func (*User) GetAvatarResponse

func (u *User) GetAvatarResponse() (*http.Response, error)

GetAvatarResponse 获取用户头像

func (*User) IsFriend

func (u *User) IsFriend() bool

IsFriend 判断是否为好友

func (*User) IsGroup

func (u *User) IsGroup() bool

IsGroup 判断是否为群组

func (*User) IsMP

func (u *User) IsMP() bool

IsMP 判断是否为公众号

func (*User) IsPin

func (u *User) IsPin() bool

IsPin 判断当前联系人(好友、群组、公众号)是否为置顶状态

func (*User) Pin

func (u *User) Pin() error

Pin 将联系人置顶

func (*User) SaveAvatar

func (u *User) SaveAvatar(filename string) error

SaveAvatar 下载用户头像

func (*User) SaveAvatarWithWriter

func (u *User) SaveAvatarWithWriter(writer io.Writer) error

func (*User) String

func (u *User) String() string

implement fmt.Stringer

func (*User) UnPin

func (u *User) UnPin() error

UnPin 将联系人取消置顶

type UserAgentHook

type UserAgentHook struct{}

func (UserAgentHook) AfterRequest

func (u UserAgentHook) AfterRequest(response *http.Response, err error)

func (UserAgentHook) BeforeRequest

func (u UserAgentHook) BeforeRequest(req *http.Request)

type UserDetailItem

type UserDetailItem struct {
	UserName        string
	EncryChatRoomId string
}

type UserDetailItemList

type UserDetailItemList []UserDetailItem

func NewUserDetailItemList

func NewUserDetailItemList(members Members) UserDetailItemList

type WebInitResponse

type WebInitResponse struct {
	Count               int
	ClientVersion       int
	GrayScale           int
	InviteStartCount    int
	MPSubscribeMsgCount int
	ClickReportInterval int
	SystemTime          int64
	ChatSet             string
	SKey                string
	BaseResponse        BaseResponse
	SyncKey             SyncKey
	User                User
	MPSubscribeMsgList  []MPSubscribeMsg
	ContactList         []User
}

WebInitResponse 初始化的相应信息

type WebWxBatchContactResponse

type WebWxBatchContactResponse struct {
	Count        int
	BaseResponse BaseResponse
	ContactList  []*User
}

type WebWxContactResponse

type WebWxContactResponse struct {
	MemberCount  int
	Seq          int
	BaseResponse BaseResponse
	MemberList   []*User
}

type WebWxSyncResponse

type WebWxSyncResponse struct {
	AddMsgCount            int
	ContinueFlag           int
	DelContactCount        int
	ModChatRoomMemberCount int
	ModContactCount        int
	Skey                   string
	SyncCheckKey           SyncKey
	SyncKey                SyncKey
	BaseResponse           BaseResponse
	ModChatRoomMemberList  Members
	AddMsgList             []*Message
}

type WechatDomain

type WechatDomain string

func (WechatDomain) BaseHost

func (w WechatDomain) BaseHost() string

func (WechatDomain) FileHost

func (w WechatDomain) FileHost() string

func (WechatDomain) SyncHost

func (w WechatDomain) SyncHost() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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