发送文件直接支持 io.Reader (#182)
This commit is contained in:
parent
721f56314e
commit
da3b267965
50
caller.go
50
caller.go
@ -260,7 +260,12 @@ func (c *Caller) UploadMedia(file *os.File, request *BaseRequest, info *LoginInf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WebWxSendImageMsg 发送图片消息接口
|
// WebWxSendImageMsg 发送图片消息接口
|
||||||
func (c *Caller) WebWxSendImageMsg(file *os.File, request *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error) {
|
func (c *Caller) WebWxSendImageMsg(reader io.Reader, request *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error) {
|
||||||
|
file, cb, err := readerToFile(reader)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer cb()
|
||||||
// 首先尝试上传图片
|
// 首先尝试上传图片
|
||||||
var mediaId string
|
var mediaId string
|
||||||
{
|
{
|
||||||
@ -282,7 +287,12 @@ func (c *Caller) WebWxSendImageMsg(file *os.File, request *BaseRequest, info *Lo
|
|||||||
return parser.SentMessage(msg)
|
return parser.SentMessage(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caller) WebWxSendFile(file *os.File, req *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error) {
|
func (c *Caller) WebWxSendFile(reader io.Reader, req *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error) {
|
||||||
|
file, cb, err := readerToFile(reader)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer cb()
|
||||||
resp, err := c.UploadMedia(file, req, info, fromUserName, toUserName)
|
resp, err := c.UploadMedia(file, req, info, fromUserName, toUserName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -298,7 +308,12 @@ func (c *Caller) WebWxSendFile(file *os.File, req *BaseRequest, info *LoginInfo,
|
|||||||
return c.WebWxSendAppMsg(msg, req)
|
return c.WebWxSendAppMsg(msg, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caller) WebWxSendVideoMsg(file *os.File, request *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error) {
|
func (c *Caller) WebWxSendVideoMsg(reader io.Reader, request *BaseRequest, info *LoginInfo, fromUserName, toUserName string) (*SentMessage, error) {
|
||||||
|
file, cb, err := readerToFile(reader)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer cb()
|
||||||
var mediaId string
|
var mediaId string
|
||||||
{
|
{
|
||||||
resp, err := c.UploadMedia(file, request, info, fromUserName, toUserName)
|
resp, err := c.UploadMedia(file, request, info, fromUserName, toUserName)
|
||||||
@ -500,3 +515,32 @@ func (p *MessageResponseParser) SentMessage(msg *SendMessage) (*SentMessage, err
|
|||||||
}
|
}
|
||||||
return &SentMessage{MsgId: msgID, SendMessage: msg}, nil
|
return &SentMessage{MsgId: msgID, SendMessage: msg}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func readerToFile(reader io.Reader) (file *os.File, cb func(), err error) {
|
||||||
|
if file, ok := reader.(*os.File); ok {
|
||||||
|
return file, func() {}, nil
|
||||||
|
}
|
||||||
|
file, err = os.CreateTemp("", "*")
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
_, err = io.Copy(file, reader)
|
||||||
|
if err != nil {
|
||||||
|
_ = file.Close()
|
||||||
|
_ = os.Remove(file.Name())
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
if err = file.Close(); err != nil {
|
||||||
|
_ = os.Remove(file.Name())
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
file, err = os.Open(file.Name())
|
||||||
|
if err != nil {
|
||||||
|
_ = os.Remove(file.Name())
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
return file, func() {
|
||||||
|
_ = file.Close()
|
||||||
|
_ = os.Remove(file.Name())
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
15
client.go
15
client.go
@ -4,6 +4,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@ -11,6 +12,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@ -310,15 +312,22 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
fileMd5 := fmt.Sprintf("%x", h.Sum(nil))
|
fileMd5 := hex.EncodeToString(h.Sum(nil))
|
||||||
|
|
||||||
sate, err := file.Stat()
|
sate, err := file.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filename := sate.Name()
|
||||||
|
|
||||||
|
if ext := filepath.Ext(filename); ext == "" {
|
||||||
|
names := strings.Split(contentType, "/")
|
||||||
|
filename = filename + "." + names[len(names)-1]
|
||||||
|
}
|
||||||
|
|
||||||
// 获取文件的类型
|
// 获取文件的类型
|
||||||
mediaType := getMessageType(sate.Name())
|
mediaType := getMessageType(filename)
|
||||||
|
|
||||||
path, _ := url.Parse(c.Domain.FileHost() + webwxuploadmedia)
|
path, _ := url.Parse(c.Domain.FileHost() + webwxuploadmedia)
|
||||||
params := url.Values{}
|
params := url.Values{}
|
||||||
@ -362,7 +371,7 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
|
|||||||
|
|
||||||
content := map[string]string{
|
content := map[string]string{
|
||||||
"id": "WU_FILE_0",
|
"id": "WU_FILE_0",
|
||||||
"name": file.Name(),
|
"name": filename,
|
||||||
"type": contentType,
|
"type": contentType,
|
||||||
"lastModifiedDate": sate.ModTime().Format(TimeFormat),
|
"lastModifiedDate": sate.ModTime().Format(TimeFormat),
|
||||||
"size": strconv.FormatInt(sate.Size(), 10),
|
"size": strconv.FormatInt(sate.Size(), 10),
|
||||||
|
@ -165,7 +165,7 @@ func (m *Message) ReplyText(content string) (*SentMessage, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplyImage 回复图片消息
|
// ReplyImage 回复图片消息
|
||||||
func (m *Message) ReplyImage(file *os.File) (*SentMessage, error) {
|
func (m *Message) ReplyImage(file io.Reader) (*SentMessage, error) {
|
||||||
info := m.bot.Storage.LoginInfo
|
info := m.bot.Storage.LoginInfo
|
||||||
request := m.bot.Storage.Request
|
request := m.bot.Storage.Request
|
||||||
sentMessage, err := 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)
|
||||||
@ -173,7 +173,7 @@ func (m *Message) ReplyImage(file *os.File) (*SentMessage, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplyVideo 回复视频消息
|
// ReplyVideo 回复视频消息
|
||||||
func (m *Message) ReplyVideo(file *os.File) (*SentMessage, error) {
|
func (m *Message) ReplyVideo(file io.Reader) (*SentMessage, error) {
|
||||||
info := m.bot.Storage.LoginInfo
|
info := m.bot.Storage.LoginInfo
|
||||||
request := m.bot.Storage.Request
|
request := m.bot.Storage.Request
|
||||||
sentMessage, err := 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)
|
||||||
@ -181,7 +181,7 @@ func (m *Message) ReplyVideo(file *os.File) (*SentMessage, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplyFile 回复文件消息
|
// ReplyFile 回复文件消息
|
||||||
func (m *Message) ReplyFile(file *os.File) (*SentMessage, error) {
|
func (m *Message) ReplyFile(file io.Reader) (*SentMessage, error) {
|
||||||
info := m.bot.Storage.LoginInfo
|
info := m.bot.Storage.LoginInfo
|
||||||
request := m.bot.Storage.Request
|
request := m.bot.Storage.Request
|
||||||
sentMessage, err := 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)
|
||||||
|
26
relations.go
26
relations.go
@ -2,7 +2,7 @@ package openwechat
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"io"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -24,17 +24,17 @@ func (f *Friend) SendText(content string) (*SentMessage, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImage 发送图片消息
|
// SendImage 发送图片消息
|
||||||
func (f *Friend) SendImage(file *os.File) (*SentMessage, error) {
|
func (f *Friend) SendImage(file io.Reader) (*SentMessage, error) {
|
||||||
return f.self.SendImageToFriend(f, file)
|
return f.self.SendImageToFriend(f, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVideo 发送视频消息
|
// SendVideo 发送视频消息
|
||||||
func (f *Friend) SendVideo(file *os.File) (*SentMessage, error) {
|
func (f *Friend) SendVideo(file io.Reader) (*SentMessage, error) {
|
||||||
return f.self.SendVideoToFriend(f, file)
|
return f.self.SendVideoToFriend(f, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFile 发送文件消息
|
// SendFile 发送文件消息
|
||||||
func (f *Friend) SendFile(file *os.File) (*SentMessage, error) {
|
func (f *Friend) SendFile(file io.Reader) (*SentMessage, error) {
|
||||||
return f.self.SendFileToFriend(f, file)
|
return f.self.SendFileToFriend(f, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ func (f Friends) SendText(text string, delays ...time.Duration) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImage 向slice的好友依次发送图片消息
|
// SendImage 向slice的好友依次发送图片消息
|
||||||
func (f Friends) SendImage(file *os.File, delays ...time.Duration) error {
|
func (f Friends) SendImage(file io.Reader, delays ...time.Duration) error {
|
||||||
if f.Count() == 0 {
|
if f.Count() == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ func (f Friends) SendImage(file *os.File, delays ...time.Duration) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendFile 群发文件
|
// SendFile 群发文件
|
||||||
func (f Friends) SendFile(file *os.File, delay ...time.Duration) error {
|
func (f Friends) SendFile(file io.Reader, delay ...time.Duration) error {
|
||||||
if f.Count() == 0 {
|
if f.Count() == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -155,17 +155,17 @@ func (g *Group) SendText(content string) (*SentMessage, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImage 发行图片消息给当前的群组
|
// SendImage 发行图片消息给当前的群组
|
||||||
func (g *Group) SendImage(file *os.File) (*SentMessage, error) {
|
func (g *Group) SendImage(file io.Reader) (*SentMessage, error) {
|
||||||
return g.self.SendImageToGroup(g, file)
|
return g.self.SendImageToGroup(g, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVideo 发行视频消息给当前的群组
|
// SendVideo 发行视频消息给当前的群组
|
||||||
func (g *Group) SendVideo(file *os.File) (*SentMessage, error) {
|
func (g *Group) SendVideo(file io.Reader) (*SentMessage, error) {
|
||||||
return g.self.SendVideoToGroup(g, file)
|
return g.self.SendVideoToGroup(g, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFile 发送文件给当前的群组
|
// SendFile 发送文件给当前的群组
|
||||||
func (g *Group) SendFile(file *os.File) (*SentMessage, error) {
|
func (g *Group) SendFile(file io.Reader) (*SentMessage, error) {
|
||||||
return g.self.SendFileToGroup(g, file)
|
return g.self.SendFileToGroup(g, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,7 +254,7 @@ func (g Groups) SendText(text string, delay ...time.Duration) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImage 向群组依次发送图片消息, 支持发送延迟
|
// SendImage 向群组依次发送图片消息, 支持发送延迟
|
||||||
func (g Groups) SendImage(file *os.File, delay ...time.Duration) error {
|
func (g Groups) SendImage(file io.Reader, delay ...time.Duration) error {
|
||||||
if g.Count() == 0 {
|
if g.Count() == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -267,7 +267,7 @@ func (g Groups) SendImage(file *os.File, delay ...time.Duration) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendFile 向群组依次发送文件消息, 支持发送延迟
|
// SendFile 向群组依次发送文件消息, 支持发送延迟
|
||||||
func (g Groups) SendFile(file *os.File, delay ...time.Duration) error {
|
func (g Groups) SendFile(file io.Reader, delay ...time.Duration) error {
|
||||||
if g.Count() == 0 {
|
if g.Count() == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -385,12 +385,12 @@ func (m *Mp) SendText(content string) (*SentMessage, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImage 发送图片消息给公众号
|
// SendImage 发送图片消息给公众号
|
||||||
func (m *Mp) SendImage(file *os.File) (*SentMessage, error) {
|
func (m *Mp) SendImage(file io.Reader) (*SentMessage, error) {
|
||||||
return m.self.SendImageToMp(m, file)
|
return m.self.SendImageToMp(m, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFile 发送文件消息给公众号
|
// SendFile 发送文件消息给公众号
|
||||||
func (m *Mp) SendFile(file *os.File) (*SentMessage, error) {
|
func (m *Mp) SendFile(file io.Reader) (*SentMessage, error) {
|
||||||
return m.self.SendFileToMp(m, file)
|
return m.self.SendFileToMp(m, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
42
user.go
42
user.go
@ -295,21 +295,21 @@ func (s *Self) sendTextToUser(user *User, text string) (*SentMessage, error) {
|
|||||||
return s.sendMessageWrapper(sentMessage, err)
|
return s.sendMessageWrapper(sentMessage, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Self) sendImageToUser(user *User, file *os.File) (*SentMessage, error) {
|
func (s *Self) sendImageToUser(user *User, file io.Reader) (*SentMessage, error) {
|
||||||
req := s.bot.Storage.Request
|
req := s.bot.Storage.Request
|
||||||
info := s.bot.Storage.LoginInfo
|
info := s.bot.Storage.LoginInfo
|
||||||
sentMessage, err := s.bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, user.UserName)
|
sentMessage, err := s.bot.Caller.WebWxSendImageMsg(file, req, info, s.UserName, user.UserName)
|
||||||
return s.sendMessageWrapper(sentMessage, err)
|
return s.sendMessageWrapper(sentMessage, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Self) sendVideoToUser(user *User, file *os.File) (*SentMessage, error) {
|
func (s *Self) sendVideoToUser(user *User, file io.Reader) (*SentMessage, error) {
|
||||||
req := s.bot.Storage.Request
|
req := s.bot.Storage.Request
|
||||||
info := s.bot.Storage.LoginInfo
|
info := s.bot.Storage.LoginInfo
|
||||||
sentMessage, err := s.bot.Caller.WebWxSendVideoMsg(file, req, info, s.UserName, user.UserName)
|
sentMessage, err := s.bot.Caller.WebWxSendVideoMsg(file, req, info, s.UserName, user.UserName)
|
||||||
return s.sendMessageWrapper(sentMessage, err)
|
return s.sendMessageWrapper(sentMessage, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Self) sendFileToUser(user *User, file *os.File) (*SentMessage, error) {
|
func (s *Self) sendFileToUser(user *User, file io.Reader) (*SentMessage, error) {
|
||||||
req := s.bot.Storage.Request
|
req := s.bot.Storage.Request
|
||||||
info := s.bot.Storage.LoginInfo
|
info := s.bot.Storage.LoginInfo
|
||||||
sentMessage, err := s.bot.Caller.WebWxSendFile(file, req, info, s.UserName, user.UserName)
|
sentMessage, err := s.bot.Caller.WebWxSendFile(file, req, info, s.UserName, user.UserName)
|
||||||
@ -322,17 +322,17 @@ func (s *Self) SendTextToFriend(friend *Friend, text string) (*SentMessage, erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImageToFriend 发送图片消息给好友
|
// SendImageToFriend 发送图片消息给好友
|
||||||
func (s *Self) SendImageToFriend(friend *Friend, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendImageToFriend(friend *Friend, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendImageToUser(friend.User, file)
|
return s.sendImageToUser(friend.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVideoToFriend 发送视频给好友
|
// SendVideoToFriend 发送视频给好友
|
||||||
func (s *Self) SendVideoToFriend(friend *Friend, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendVideoToFriend(friend *Friend, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendVideoToUser(friend.User, file)
|
return s.sendVideoToUser(friend.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFileToFriend 发送文件给好友
|
// SendFileToFriend 发送文件给好友
|
||||||
func (s *Self) SendFileToFriend(friend *Friend, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendFileToFriend(friend *Friend, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendFileToUser(friend.User, file)
|
return s.sendFileToUser(friend.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -441,17 +441,17 @@ func (s *Self) SendTextToGroup(group *Group, text string) (*SentMessage, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImageToGroup 发送图片消息给群组
|
// SendImageToGroup 发送图片消息给群组
|
||||||
func (s *Self) SendImageToGroup(group *Group, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendImageToGroup(group *Group, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendImageToUser(group.User, file)
|
return s.sendImageToUser(group.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVideoToGroup 发送视频给群组
|
// SendVideoToGroup 发送视频给群组
|
||||||
func (s *Self) SendVideoToGroup(group *Group, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendVideoToGroup(group *Group, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendVideoToUser(group.User, file)
|
return s.sendVideoToUser(group.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFileToGroup 发送文件给群组
|
// SendFileToGroup 发送文件给群组
|
||||||
func (s *Self) SendFileToGroup(group *Group, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendFileToGroup(group *Group, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendFileToUser(group.User, file)
|
return s.sendFileToUser(group.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,7 +530,7 @@ func (s *Self) sendTextToMembers(text string, delay time.Duration, members ...*U
|
|||||||
}
|
}
|
||||||
|
|
||||||
// sendImageToMembers 发送图片消息给群组或者好友
|
// sendImageToMembers 发送图片消息给群组或者好友
|
||||||
func (s *Self) sendImageToMembers(img *os.File, delay time.Duration, members ...*User) error {
|
func (s *Self) sendImageToMembers(img io.Reader, delay time.Duration, members ...*User) error {
|
||||||
if len(members) == 0 {
|
if len(members) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -544,7 +544,7 @@ func (s *Self) sendImageToMembers(img *os.File, delay time.Duration, members ...
|
|||||||
}
|
}
|
||||||
|
|
||||||
// sendVideoToMembers 发送视频消息给群组或者好友
|
// sendVideoToMembers 发送视频消息给群组或者好友
|
||||||
func (s *Self) sendVideoToMembers(video *os.File, delay time.Duration, members ...*User) error {
|
func (s *Self) sendVideoToMembers(video io.Reader, delay time.Duration, members ...*User) error {
|
||||||
if len(members) == 0 {
|
if len(members) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -557,7 +557,7 @@ func (s *Self) sendVideoToMembers(video *os.File, delay time.Duration, members .
|
|||||||
return s.forwardMessage(msg, delay, members[1:]...)
|
return s.forwardMessage(msg, delay, members[1:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Self) sendFileToMembers(file *os.File, delay time.Duration, members ...*User) error {
|
func (s *Self) sendFileToMembers(file io.Reader, delay time.Duration, members ...*User) error {
|
||||||
if len(members) == 0 {
|
if len(members) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -577,19 +577,19 @@ func (s *Self) SendTextToFriends(text string, delay time.Duration, friends ...*F
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImageToFriends 发送图片消息给好友
|
// SendImageToFriends 发送图片消息给好友
|
||||||
func (s *Self) SendImageToFriends(img *os.File, delay time.Duration, friends ...*Friend) error {
|
func (s *Self) SendImageToFriends(img io.Reader, delay time.Duration, friends ...*Friend) error {
|
||||||
members := Friends(friends).AsMembers()
|
members := Friends(friends).AsMembers()
|
||||||
return s.sendImageToMembers(img, delay, members...)
|
return s.sendImageToMembers(img, delay, members...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFileToFriends 发送文件给好友
|
// SendFileToFriends 发送文件给好友
|
||||||
func (s *Self) SendFileToFriends(file *os.File, delay time.Duration, friends ...*Friend) error {
|
func (s *Self) SendFileToFriends(file io.Reader, delay time.Duration, friends ...*Friend) error {
|
||||||
members := Friends(friends).AsMembers()
|
members := Friends(friends).AsMembers()
|
||||||
return s.sendFileToMembers(file, delay, members...)
|
return s.sendFileToMembers(file, delay, members...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVideoToFriends 发送视频给好友
|
// SendVideoToFriends 发送视频给好友
|
||||||
func (s *Self) SendVideoToFriends(video *os.File, delay time.Duration, friends ...*Friend) error {
|
func (s *Self) SendVideoToFriends(video io.Reader, delay time.Duration, friends ...*Friend) error {
|
||||||
members := Friends(friends).AsMembers()
|
members := Friends(friends).AsMembers()
|
||||||
return s.sendVideoToMembers(video, delay, members...)
|
return s.sendVideoToMembers(video, delay, members...)
|
||||||
}
|
}
|
||||||
@ -601,19 +601,19 @@ func (s *Self) SendTextToGroups(text string, delay time.Duration, groups ...*Gro
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImageToGroups 发送图片消息给群组
|
// SendImageToGroups 发送图片消息给群组
|
||||||
func (s *Self) SendImageToGroups(img *os.File, delay time.Duration, groups ...*Group) error {
|
func (s *Self) SendImageToGroups(img io.Reader, delay time.Duration, groups ...*Group) error {
|
||||||
members := Groups(groups).AsMembers()
|
members := Groups(groups).AsMembers()
|
||||||
return s.sendImageToMembers(img, delay, members...)
|
return s.sendImageToMembers(img, delay, members...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFileToGroups 发送文件给群组
|
// SendFileToGroups 发送文件给群组
|
||||||
func (s *Self) SendFileToGroups(file *os.File, delay time.Duration, groups ...*Group) error {
|
func (s *Self) SendFileToGroups(file io.Reader, delay time.Duration, groups ...*Group) error {
|
||||||
members := Groups(groups).AsMembers()
|
members := Groups(groups).AsMembers()
|
||||||
return s.sendFileToMembers(file, delay, members...)
|
return s.sendFileToMembers(file, delay, members...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVideoToGroups 发送视频给群组
|
// SendVideoToGroups 发送视频给群组
|
||||||
func (s *Self) SendVideoToGroups(video *os.File, delay time.Duration, groups ...*Group) error {
|
func (s *Self) SendVideoToGroups(video io.Reader, delay time.Duration, groups ...*Group) error {
|
||||||
members := Groups(groups).AsMembers()
|
members := Groups(groups).AsMembers()
|
||||||
return s.sendVideoToMembers(video, delay, members...)
|
return s.sendVideoToMembers(video, delay, members...)
|
||||||
}
|
}
|
||||||
@ -798,17 +798,17 @@ func (s *Self) SendTextToMp(mp *Mp, text string) (*SentMessage, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendImageToMp 发送图片消息给公众号
|
// SendImageToMp 发送图片消息给公众号
|
||||||
func (s *Self) SendImageToMp(mp *Mp, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendImageToMp(mp *Mp, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendImageToUser(mp.User, file)
|
return s.sendImageToUser(mp.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendFileToMp 发送文件给公众号
|
// SendFileToMp 发送文件给公众号
|
||||||
func (s *Self) SendFileToMp(mp *Mp, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendFileToMp(mp *Mp, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendFileToUser(mp.User, file)
|
return s.sendFileToUser(mp.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVideoToMp 发送视频消息给公众号
|
// SendVideoToMp 发送视频消息给公众号
|
||||||
func (s *Self) SendVideoToMp(mp *Mp, file *os.File) (*SentMessage, error) {
|
func (s *Self) SendVideoToMp(mp *Mp, file io.Reader) (*SentMessage, error) {
|
||||||
return s.sendVideoToUser(mp.User, file)
|
return s.sendVideoToUser(mp.User, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user