修复图片、视频、文件消息不能撤回的bug 🐛

This commit is contained in:
unknown 2022-07-23 22:52:01 +08:00
parent 6484a80b37
commit b5832e624d
3 changed files with 57 additions and 121 deletions

View File

@ -135,43 +135,37 @@ func (m *Message) IsSendByGroup() bool {
return strings.HasPrefix(m.FromUserName, "@@")
}
// Reply 回复消息
func (m *Message) Reply(msgType MessageType, content, mediaId string) (*SentMessage, error) {
msg := NewSendMessage(msgType, content, m.Bot.self.User.UserName, m.FromUserName, mediaId)
// ReplyText 回复文本消息
func (m *Message) ReplyText(content string) (*SentMessage, error) {
msg := NewSendMessage(MsgTypeText, content, m.Bot.self.User.UserName, m.FromUserName, "")
info := m.Bot.Storage.LoginInfo
request := m.Bot.Storage.Request
sentMessage, err := m.Bot.Caller.WebWxSendMsg(msg, info, request)
if err != nil {
return nil, err
}
sentMessage.Self = m.Bot.self
return sentMessage, nil
}
// ReplyText 回复文本消息
func (m *Message) ReplyText(content string) (*SentMessage, error) {
return m.Reply(MsgTypeText, content, "")
return m.Bot.self.sendMessageWrapper(sentMessage, err)
}
// ReplyImage 回复图片消息
func (m *Message) ReplyImage(file *os.File) (*SentMessage, error) {
info := m.Bot.Storage.LoginInfo
request := m.Bot.Storage.Request
return m.Bot.Caller.WebWxSendImageMsg(file, request, info, m.Bot.self.UserName, m.FromUserName)
sentMessage, err := m.Bot.Caller.WebWxSendImageMsg(file, request, info, m.Bot.self.UserName, m.FromUserName)
return m.Bot.self.sendMessageWrapper(sentMessage, err)
}
// ReplyVideo 回复视频消息
func (m *Message) ReplyVideo(file *os.File) (*SentMessage, error) {
info := m.Bot.Storage.LoginInfo
request := m.Bot.Storage.Request
return m.Bot.Caller.WebWxSendVideoMsg(file, request, info, m.Bot.self.UserName, m.FromUserName)
sentMessage, err := m.Bot.Caller.WebWxSendVideoMsg(file, request, info, m.Bot.self.UserName, m.FromUserName)
return m.Bot.self.sendMessageWrapper(sentMessage, err)
}
// ReplyFile 回复文件消息
func (m *Message) ReplyFile(file *os.File) (*SentMessage, error) {
info := m.Bot.Storage.LoginInfo
request := m.Bot.Storage.Request
return m.Bot.Caller.WebWxSendFile(file, request, info, m.Bot.self.UserName, m.FromUserName)
sentMessage, err := m.Bot.Caller.WebWxSendFile(file, request, info, m.Bot.self.UserName, m.FromUserName)
return m.Bot.self.sendMessageWrapper(sentMessage, err)
}
func (m *Message) IsText() bool {

View File

@ -18,11 +18,6 @@ func (f *Friend) SetRemarkName(name string) error {
return f.Self.SetRemarkNameToFriend(f, name)
}
// SendMsg 发送自定义消息
func (f *Friend) SendMsg(msg *SendMessage) (*SentMessage, error) {
return f.Self.SendMessageToFriend(f, msg)
}
// SendText 发送文本消息
func (f *Friend) SendText(content string) (*SentMessage, error) {
return f.Self.SendTextToFriend(f, content)
@ -111,28 +106,6 @@ func (f Friends) Search(limit int, condFuncList ...func(friend *Friend) bool) (r
return
}
// SendMsg 向slice的好友依次发送消息
func (f Friends) SendMsg(msg *SendMessage, delay ...time.Duration) error {
total := getTotalDuration(delay...)
var (
sentMessage *SentMessage
err error
self *Self
)
for _, friend := range f {
self = friend.Self
time.Sleep(total)
if sentMessage != nil {
err = self.ForwardMessageToFriends(sentMessage, f...)
return err
}
if sentMessage, err = friend.SendMsg(msg); err != nil {
return err
}
}
return nil
}
// SendText 向slice的好友依次发送文本消息
func (f Friends) SendText(text string, delay ...time.Duration) error {
total := getTotalDuration(delay...)
@ -206,11 +179,6 @@ func (g Group) String() string {
return fmt.Sprintf("<Group:%s>", g.NickName)
}
// SendMsg 发行消息给当前的群组
func (g *Group) SendMsg(msg *SendMessage) (*SentMessage, error) {
return g.Self.SendMessageToGroup(g, msg)
}
// SendText 发行文本消息给当前的群组
func (g *Group) SendText(content string) (*SentMessage, error) {
return g.Self.SendTextToGroup(g, content)
@ -280,28 +248,6 @@ func (g Groups) Last() *Group {
return nil
}
// SendMsg 向群组依次发送消息, 支持发送延迟
func (g Groups) SendMsg(msg *SendMessage, delay ...time.Duration) error {
total := getTotalDuration(delay...)
var (
sentMessage *SentMessage
err error
self *Self
)
for _, group := range g {
self = group.Self
time.Sleep(total)
if sentMessage != nil {
err = self.ForwardMessageToGroups(sentMessage, g...)
return err
}
if sentMessage, err = group.SendMsg(msg); err != nil {
return err
}
}
return nil
}
// SendText 向群组依次发送文本消息, 支持发送延迟
func (g Groups) SendText(text string, delay ...time.Duration) error {
total := getTotalDuration(delay...)

98
user.go
View File

@ -248,50 +248,55 @@ func (s *Self) UpdateMembersDetail() error {
return members.detail(s)
}
// 抽象发送消息接口
func (s *Self) sendMessageToUser(user *User, msg *SendMessage) (*SentMessage, error) {
func (s *Self) sendTextToUser(user *User, text string) (*SentMessage, error) {
msg := NewTextSendMessage(text, s.UserName, user.UserName)
msg.FromUserName = s.UserName
msg.ToUserName = user.UserName
info := s.Bot.Storage.LoginInfo
request := s.Bot.Storage.Request
successSendMessage, err := s.Bot.Caller.WebWxSendMsg(msg, info, request)
if err != nil {
return nil, err
}
successSendMessage.Self = s
return successSendMessage, nil
sentMessage, err := s.Bot.Caller.WebWxSendMsg(msg, info, request)
return s.sendMessageWrapper(sentMessage, err)
}
// SendMessageToFriend 发送消息给好友
func (s *Self) SendMessageToFriend(friend *Friend, msg *SendMessage) (*SentMessage, error) {
return s.sendMessageToUser(friend.User, msg)
func (s *Self) sendImageToUser(user *User, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
sentMessage, err := s.Bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, user.UserName)
return s.sendMessageWrapper(sentMessage, err)
}
func (s *Self) sendVideoToUser(user *User, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
sentMessage, err := s.Bot.Caller.WebWxSendVideoMsg(file, req, info, s.UserName, user.UserName)
return s.sendMessageWrapper(sentMessage, err)
}
func (s *Self) sendFileToUser(user *User, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
sentMessage, err := s.Bot.Caller.WebWxSendFile(file, req, info, s.UserName, user.UserName)
return s.sendMessageWrapper(sentMessage, err)
}
// SendTextToFriend 发送文本消息给好友
func (s *Self) SendTextToFriend(friend *Friend, text string) (*SentMessage, error) {
msg := NewTextSendMessage(text, s.UserName, friend.UserName)
return s.SendMessageToFriend(friend, msg)
return s.sendTextToUser(friend.User, text)
}
// SendImageToFriend 发送图片消息给好友
func (s *Self) SendImageToFriend(friend *Friend, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, friend.UserName)
return s.sendImageToUser(friend.User, file)
}
// SendVideoToFriend 发送视频给好友
func (s *Self) SendVideoToFriend(friend *Friend, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendVideoMsg(file, req, info, s.UserName, friend.UserName)
return s.sendVideoToUser(friend.User, file)
}
// SendFileToFriend 发送文件给好友
func (s *Self) SendFileToFriend(friend *Friend, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendFile(file, req, info, s.UserName, friend.UserName)
return s.sendFileToUser(friend.User, file)
}
// SetRemarkNameToFriend 设置好友备注
@ -392,36 +397,24 @@ func (s *Self) RenameGroup(group *Group, newName string) error {
return s.Bot.Caller.WebWxRenameChatRoom(req, info, newName, group)
}
// SendMessageToGroup 发送消息给群组
func (s *Self) SendMessageToGroup(group *Group, msg *SendMessage) (*SentMessage, error) {
return s.sendMessageToUser(group.User, msg)
}
// SendTextToGroup 发送文本消息给群组
func (s *Self) SendTextToGroup(group *Group, text string) (*SentMessage, error) {
msg := NewTextSendMessage(text, s.UserName, group.UserName)
return s.SendMessageToGroup(group, msg)
return s.sendTextToUser(group.User, text)
}
// SendImageToGroup 发送图片消息给群组
func (s *Self) SendImageToGroup(group *Group, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, group.UserName)
return s.sendImageToUser(group.User, file)
}
// SendVideoToGroup 发送视频给群组
func (s *Self) SendVideoToGroup(group *Group, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendVideoMsg(file, req, info, s.UserName, group.UserName)
return s.sendVideoToUser(group.User, file)
}
// SendFileToGroup 发送文件给群组
func (s *Self) SendFileToGroup(group *Group, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendFile(file, req, info, s.UserName, group.UserName)
return s.sendFileToUser(group.User, file)
}
// RevokeMessage 撤回消息
@ -668,27 +661,30 @@ func NewFriendHelper(self *Self) *Friend {
return &Friend{&User{UserName: "filehelper", Self: self}}
}
// SendMessageToMp 发送消息给公众号
func (s *Self) SendMessageToMp(mp *Mp, msg *SendMessage) (*SentMessage, error) {
return s.sendMessageToUser(mp.User, msg)
}
// SendTextToMp 发送文本消息给公众号
func (s *Self) SendTextToMp(mp *Mp, text string) (*SentMessage, error) {
msg := NewTextSendMessage(text, s.UserName, mp.UserName)
return s.SendMessageToMp(mp, msg)
return s.sendTextToUser(mp.User, text)
}
// SendImageToMp 发送图片消息给公众号
func (s *Self) SendImageToMp(mp *Mp, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, mp.UserName)
return s.sendImageToUser(mp.User, file)
}
// SendFileToMp 发送文件给公众号
func (s *Self) SendFileToMp(mp *Mp, file *os.File) (*SentMessage, error) {
req := s.Bot.Storage.Request
info := s.Bot.Storage.LoginInfo
return s.Bot.Caller.WebWxSendFile(file, req, info, s.UserName, mp.UserName)
return s.sendFileToUser(mp.User, file)
}
// SendVideoToMp 发送视频消息给公众号
func (s *Self) SendVideoToMp(mp *Mp, file *os.File) (*SentMessage, error) {
return s.sendVideoToUser(mp.User, file)
}
func (s *Self) sendMessageWrapper(message *SentMessage, err error) (*SentMessage, error) {
if err != nil {
return nil, err
}
message.Self = s
return message, nil
}