wwdk

package module
v2.1.0+incompatible Latest Latest
Warning

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

Go to latest
Published: May 5, 2019 License: MIT Imports: 21 Imported by: 0

README

wwdk

License

wwdk是web微信对接的sdk,主要专注于实现微信机器人相关的逻辑,关注文字、音频、视频、图片的对接

TODO:

  • 实现微信加好友请求的处理
  • 实现更多信息类型的兼容
  • 完善doc下的微信web协议记录(如果不懒的话

使用方法:

基于wwdk使用微信,大致步骤为:

  • 实例化一个WechatWeb对象
  • 然后调用其登陆方法,
  • 通过登陆channel获取到登陆二维码并且展示给用户
  • 用户扫码成功后登陆channel会返回登陆成功并关闭
  • 调用StartServe方法,并读取syncChannel
  • 根据syncChannel读取到的状态调用对应的处理方法

代码示范

一个简单的例子,通过终端显示二维码、收到消息后打印到终端的实现如下(仅处理文字信息)

func main() {
	// 实例化WechatWeb对象
	wx, err := wwdk.NewWechatWeb()
	if err != nil {
		panic("Get new wechatweb client error: " + err.Error())
	}
	// 创建登陆用channel用于回传登陆信息
	loginChan := make(chan wwdk.LoginChannelItem)
	wx.Login(loginChan)
	// 根据channel返回信息进行处理
	for item := range loginChan {
		switch item.Code {
		case wwdk.LoginStatusWaitForScan:
			// 返回了登陆二维码链接,输出到屏幕
			qrterminal.Generate(item.Msg, qrterminal.L, os.Stdout)
		case wwdk.LoginStatusErrorOccurred:
			// 登陆失败
			panic(fmt.Sprintf("WxWeb Login error: %+v", item.Err))
		}
	}
	// 创建同步channel
	syncChannel := make(chan wwdk.SyncChannelItem)
	// 将channel传入startServe方法,开始同步服务并且将新信息通过syncChannel传回
	wx.StartServe(syncChannel)
	// 处理syncChannel传回信息
	for item := range syncChannel {
		// 在子方法内执行逻辑
		switch item.Code {
		// 收到新信息
		case wwdk.SyncStatusNewMessage:
			// 根据收到的信息类型分别处理
			msg := item.Message
			switch msg.MsgType {
			case datastruct.TextMsg:
				// 处理文字信息
				processTextMessage(wx, msg)
			}
		case wwdk.SyncStatusPanic:
			// 发生致命错误,sync中断
			fmt.Printf("sync panic: %+v\n", err)
			break
		}
	}
}

func processTextMessage(app *wwdk.WechatWeb, msg *datastruct.Message) {
	from, err := app.GetContact(msg.FromUserName)
	if err != nil {
		log.Println("getContact error: " + err.Error())
		return
	}
	log.Printf("Recived a text msg from %s: %s", from.NickName, msg.Content)
}

详细example

一个详细的例子包含储存登陆信息(可用于程序停止后重新运行免登录,文件名loginInfo.txt)、通过终端显示二维码、收到消息后打印到终端、收到图片、视频、音频保存到运行目录并打印文件名到终端

代码详见:example

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Context

type Context struct {
	App *WechatWeb
	// contains filtered or unexported fields
}

Context 一次处理流程的上下文

func (*Context) Stop

func (context *Context) Stop()

Stop 终止当前处理流程

type LoginChannelItem

type LoginChannelItem struct {
	Err  error
	Code LoginStatus
	Msg  string
}

LoginChannelItem 登录时channel内返回的东西

type LoginStatus

type LoginStatus int32

LoginStatus 登录状态枚举

const (
	// LoginStatusErrorOccurred 发生异常
	LoginStatusErrorOccurred LoginStatus = -1
	// LoginStatusWaitForScan 等待扫码
	// 返回Msg: 待扫码url
	LoginStatusWaitForScan LoginStatus = 1
	// LoginStatusScanedWaitForLogin 用户已经扫码
	// 返回Msg: 用户头像的base64
	LoginStatusScanedWaitForLogin LoginStatus = 2
	// LoginStatusScanedFinish 用户已同意登陆
	LoginStatusScanedFinish LoginStatus = 3
	// LoginStatusGotCookie 已获取到Cookie
	LoginStatusGotCookie LoginStatus = 4
	// LoginStatusInitFinish 登陆初始化完成
	LoginStatusInitFinish LoginStatus = 5
	// LoginStatusGotContact 已获取到联系人
	LoginStatusGotContact LoginStatus = 6
	// LoginStatusGotBatchContact 已获取到群聊成员
	LoginStatusGotBatchContact LoginStatus = 7
)

type MediaFile

type MediaFile struct {
	// FileName 文件名
	FileName string
	// BinaryContent 文件的二进制内容
	BinaryContent []byte
}

MediaFile 媒体文件

type MediaStorer

type MediaStorer interface {
	// Storer 储存媒体文件,传入媒体文件,返回媒体文件URL与err异常
	Storer(file MediaFile) (url string, err error)
}

MediaStorer 媒体文件储存器

func NewLocalMediaStorer

func NewLocalMediaStorer(saveDir string) MediaStorer

NewLocalMediaStorer 新建本地媒体存储器

type SyncChannelItem

type SyncChannelItem struct {
	Code    SyncStatus          // 同步状态
	Contact *datastruct.Contact // 联系人(如果同步状态是有联系人变更则有
	Message *datastruct.Message // 新信息(如果同步状态是有新信息则有
	Err     error               // 错误(如有发生

}

SyncChannelItem 同步管道通信要素

type SyncStatus

type SyncStatus int32

SyncStatus 同步状态

const (
	// SyncStatusModifyContact 同步状态:有联系人变更
	SyncStatusModifyContact SyncStatus = 1
	// SyncStatusNewMessage 同步状态:有新信息
	SyncStatusNewMessage SyncStatus = 2
	// SyncStatusPanic 致命错误,sync进程退出
	SyncStatusPanic SyncStatus = -1
	// SyncStatusErrorOccurred 非致命性错误发生,具体错误请参考Msg
	SyncStatusErrorOccurred SyncStatus = -2
)

type WechatRunInfo

type WechatRunInfo struct {
	// StartAt 程序启动的时间
	StartAt time.Time
	// LoginAt 程序登陆的时间
	LoginAt time.Time
	// SyncCount 同步次数
	SyncCount uint64
	// ContactModifyCount 联系人修改计数器
	ContactModifyCount uint64
	// MessageCount 消息计数器
	MessageCount uint64
	// MessageRecivedCount 收到消息计数器
	MessageRecivedCount uint64
	// MessageSentCount 发送消息计数器
	MessageSentCount uint64
	// MessageRevokeCount 撤回消息计数器
	MessageRevokeCount uint64
	// MessageRevokeRecivedCount 收到撤回消息计数器
	MessageRevokeRecivedCount uint64
	// MessageRevokeSentCount 发送撤回消息计数器
	MessageRevokeSentCount uint64
	// PanicCount panic计数器
	PanicCount uint64
}

WechatRunInfo 微信运行信息

type WechatWeb

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

WechatWeb 微信网页版客户端实例

func NewWechatWeb

func NewWechatWeb(configs ...interface{}) (wxweb *WechatWeb, err error)

NewWechatWeb 生成微信网页版客户端实例

func (*WechatWeb) GetContact

func (wxwb *WechatWeb) GetContact(username string) (contact datastruct.Contact, err error)

GetContact 根据username获取联系人

func (*WechatWeb) GetContactByAlias

func (wxwb *WechatWeb) GetContactByAlias(alias string) (contact datastruct.Contact, err error)

GetContactByAlias 根据Alias获取联系人

func (*WechatWeb) GetContactByNickname

func (wxwb *WechatWeb) GetContactByNickname(nickname string) (contact datastruct.Contact, err error)

GetContactByNickname 根据昵称获取用户名

func (*WechatWeb) GetContactByRemarkName

func (wxwb *WechatWeb) GetContactByRemarkName(remarkName string) (contact datastruct.Contact, err error)

GetContactByRemarkName 根据备注获取用户名

func (*WechatWeb) GetContactList

func (wxwb *WechatWeb) GetContactList() (contacts []datastruct.Contact)

GetContactList 获取联系人列表

func (*WechatWeb) GetRunInfo

func (wxwb *WechatWeb) GetRunInfo() (runinfo WechatRunInfo)

GetRunInfo 获取运行计数器信息

func (*WechatWeb) Login

func (wxwb *WechatWeb) Login(loginChannel chan<- LoginChannelItem)

Login 登陆方法总成 param loginChannel 登陆状态channel,从中可以读取到登录情况

func (*WechatWeb) Logout

func (wxwb *WechatWeb) Logout() (err error)

Logout 退出登录

func (*WechatWeb) ModifyChatRoomTopic

func (wxwb *WechatWeb) ModifyChatRoomTopic(userName, newTopic string) (revokeMessageRespond *datastruct.ModifyChatRoomTopicRespond, err error)

ModifyChatRoomTopic 修改群名

func (*WechatWeb) ModifyUserRemakName

func (wxwb *WechatWeb) ModifyUserRemakName(userName, remarkName string) (revokeMessageRespond *datastruct.ModifyRemarkRespond, err error)

ModifyUserRemakName 修改用户备注

func (*WechatWeb) SaveContactImg

func (wxwb *WechatWeb) SaveContactImg(contact datastruct.Contact) (filename string, err error)

SaveContactImg 保存联系人头像

func (*WechatWeb) SaveMessageImage

func (wxwb *WechatWeb) SaveMessageImage(msg datastruct.Message) (filename string, err error)

SaveMessageImage 保存消息图片到指定位置

func (*WechatWeb) SaveMessageVideo

func (wxwb *WechatWeb) SaveMessageVideo(msg datastruct.Message) (filename string, err error)

SaveMessageVideo 保存消息视频到指定位置

func (*WechatWeb) SaveMessageVoice

func (wxwb *WechatWeb) SaveMessageVoice(msg datastruct.Message) (filename string, err error)

SaveMessageVoice 保存消息声音到指定位置

func (*WechatWeb) SendRevokeMessage

func (wxwb *WechatWeb) SendRevokeMessage(svrMsgID, clientMsgID, toUserName string) (revokeMessageRespond *datastruct.RevokeMessageRespond, err error)

SendRevokeMessage 撤回消息

func (*WechatWeb) SendTextMessage

func (wxwb *WechatWeb) SendTextMessage(toUserName, content string) (sendMessageRespond *datastruct.SendMessageRespond, err error)

SendTextMessage 发送消息

func (*WechatWeb) StartServe

func (wxwb *WechatWeb) StartServe(syncChannel chan<- SyncChannelItem)

StartServe 启动消息同步服务

func (*WechatWeb) StatusNotify

func (wxwb *WechatWeb) StatusNotify(fromUserName, toUserName string, code int64) (err error)

StatusNotify 消息已读通知

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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