openwechat/source/message.md

5.6 KiB
Raw Permalink Blame History

消息

接受消息

被动接受的消息对象,由微信服务器发出

消息对象通过绑定在bot上的消息回调函数获取

bot.MessageHandler = func(msg *openwechat.Message) {
    if msg.IsText() && msg.Content == "ping" {
        msg.ReplyText("pong")
    }
}

以下简写为msg

消息内容

msg.Content  // 获取消息内容

通过访问Content属性可直接获取消息内容

由于消息分为很多种类型,它们都共用Content属性。一般当消息类型问文本类型的时候,我们才会去访问Content属性。

消息类型判断

下面的判断消息类型的方法均返回bool

文本消息
msg.IsText() 
图片消息
msg.IsPicture()
位置消息
msg.IsMap()
语音消息
msg.IsVoice()
添加好友请求
msg.IsFriendAdd()
名片消息
msg.IsCard()
视频消息
msg.IsVideo()
是否被撤回
msg.IsRecalled()
系统消息
msg.IsSystem()
收到微信转账
msg.IsTransferAccounts()
发出红包(自己发出)
msg.IsSendRedPacket()
收到红包
msg.IsReceiveRedPacket()

但是不能领取!

获取消息的发送者

sender, err := msg.Sender()

如果是群聊消息,该方法返回的是群聊对象(需要自己将User转换为Group对象)

获取消息的接受者

receiver, err := msg.Receiver()

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

sender, err := msg.SenderInGroup()

获取群聊中具体发消息的用户,前提该消息必须来自群聊。

是否由自己发送

msg.IsSendBySelf()

消息是否由好友发出

msg.IsSendByFriend()

消息是否由群聊发出

msg.IsSendByGroup()

回复文本消息

msg.ReplyText("hello")

回复图片消息

img, _ := os.Open("your file path")
defer img.Close()
msg.ReplyImage(img)

回复文件消息

file, _ := os.Open("your file path")
defer file.Close()
msg.ReplyFile(file)

获取消息里的其他信息

名片消息
card, err := msg. Card()

该方法调用的前提为msg.IsCard()返回为true

名片消息可以获取该名片中的微信号

alias := card.Alias

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"`
}
获取已撤回的消息
revokeMsg, err := msg.RevokeMsg()

该方法调用成功的前提是msg.IsRecalled()返回为true

撤回消息的结构

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"`
}

同意好友请求

msg.Agree()
// msg.Agree("我同意了")

该方法调用成功的前提是msg.IsFriendAdd()返回为true

设置为已读

msg.AsRead()

该当前消息设置为已读

设置消息的上下文

用于多个消息处理函数之间的通信,并且是协程安全的。

设置值
msg.Set("hello", "world")
获取值
value, exist := msg.Get("hello")

已发送消息

已发送消息指当前用户发送出去的消息

每次调用发送消息的函数都会返回一个SentMessage对象

sentMsg, err := msg.ReplyText("hello") // 通过回复消息获取
// sentMsg, err := friend.SendText("hello") // 向好友对象发送消息获取
// and so on

撤回消息

撤回刚刚发送的消息撤回消息的有效时间为2分钟超过了这个时间则无法撤回

sentMsg.Revoke()

判断是否可以撤回

sentMsg.CanRevoke()

转发给好友

sentMsg.ForwardToFriends(friend1, friend2)

将刚发送的消息转发给好友

转发给群聊

sentMsg.ForwardToGroups(group1, group2)

将刚发送的消息转发给群聊

Emoji表情

openwechat提供了微信全套emoji表情的支持

emoji表情全部维护在openwechat.Emoji结构体上

emoji表情可以通过发送Text类型的函数发送

firend.SendText(openwechat.Emoji.Doge)  // 发送狗头表情
msg.ReplyText(openwechat.Emoji.Awesome) // 发送666的表情