被动接受的消息对象,由微信服务器发出
消息对象通过绑定在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.IsLocation()
msg.IsVoice()
msg.IsFriendAdd()
msg.IsCard()
msg.IsVideo()
msg.IsRecalled()
msg.IsSystem()
msg.IsTransferAccounts()
msg.IsSendRedPacket()
msg.IsReceiveRedPacket()
但是不能领取!
msg.IsIsPaiYiPai() // 拍一拍消息
msg.IsTickled()
msg.IsTickledMe()
msg.IsJoinGroup()
sender, err := msg.Sender()
如果是群聊消息,该方法返回的是群聊对象(需要自己将User
转换为Group
对象)
receiver, err := msg.Receiver()
sender, err := msg.SenderInGroup()
获取群聊中具体发消息的用户,前提该消息必须来自群聊。
msg.IsSendBySelf()
msg.IsTickled()
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"`
}
friend, err := msg.Agree()
// msg.Agree("我同意了")
返回的friend即刚添加的好友对象
该方法调用成功的前提是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)
将刚发送的消息转发给群聊
openwechat提供了微信全套emoji
表情的支持
emoji
表情全部维护在openwechat.Emoji
结构体上
emoji表情可以通过发送Text
类型的函数发送
如
firend.SendText(openwechat.Emoji.Doge) // 发送狗头表情
msg.ReplyText(openwechat.Emoji.Awesome) // 发送666的表情