diff --git a/openapi/iface.go b/openapi/iface.go index f7a0ce7..ecc21ec 100644 --- a/openapi/iface.go +++ b/openapi/iface.go @@ -67,6 +67,7 @@ type MessageAPI interface { Message(ctx context.Context, channelID string, messageID string) (*dto.Message, error) Messages(ctx context.Context, channelID string, pager *dto.MessagesPager) ([]*dto.Message, error) PostMessage(ctx context.Context, channelID string, msg *dto.MessageToCreate) (*dto.Message, error) + PostMessageByFormData(ctx context.Context, channelID string, imgData []byte, msg map[string]string) (*dto.Message, error) PatchMessage(ctx context.Context, channelID string, messageID string, msg *dto.MessageToCreate) (*dto.Message, error) RetractMessage(ctx context.Context, channelID, msgID string, options ...RetractMessageOption) error @@ -157,6 +158,8 @@ type DirectMessageAPI interface { CreateDirectMessage(ctx context.Context, dm *dto.DirectMessageToCreate) (*dto.DirectMessage, error) // PostDirectMessage 在私信频道内发消息 PostDirectMessage(ctx context.Context, dm *dto.DirectMessage, msg *dto.MessageToCreate) (*dto.Message, error) + // PostDirectMessageByFormData 在私信频道内发图片消息 + PostDirectMessageByFormData(ctx context.Context, dm *dto.DirectMessage, imgData []byte, msg map[string]string) (*dto.Message, error) // RetractDMMessage 撤回私信频道消息 RetractDMMessage(ctx context.Context, guildID, msgID string, options ...RetractMessageOption) error // PostDMSettingGuide 发送私信设置引导, jumpGuildID为设置引导要跳转的频道ID diff --git a/openapi/v1/direct_message.go b/openapi/v1/direct_message.go index b16e867..8786957 100644 --- a/openapi/v1/direct_message.go +++ b/openapi/v1/direct_message.go @@ -1,7 +1,9 @@ package v1 import ( + "bytes" "context" + "time" "github.com/tencent-connect/botgo/dto" "github.com/tencent-connect/botgo/openapi" @@ -33,6 +35,21 @@ func (o *openAPI) PostDirectMessage(ctx context.Context, return resp.Result().(*dto.Message), nil } +// PostDirectMessage 在私信频道内发图片消息 +func (o *openAPI) PostDirectMessageByFormData(ctx context.Context, + dm *dto.DirectMessage, imgData []byte, msg map[string]string) (*dto.Message, error) { + resp, err := o.request(ctx). + SetResult(dto.Message{}). + SetPathParam("guild_id", dm.GuildID). + SetFileReader("file_image", time.Now().String(), bytes.NewReader(imgData)). + SetFormData(msg). + Post(o.getURL(dmsURI)) + if err != nil { + return nil, err + } + return resp.Result().(*dto.Message), nil +} + // RetractDMMessage 撤回私信消息 func (o *openAPI) RetractDMMessage(ctx context.Context, guildID, msgID string, options ...openapi.RetractMessageOption) error { diff --git a/openapi/v1/message.go b/openapi/v1/message.go index 76a6d96..4564568 100644 --- a/openapi/v1/message.go +++ b/openapi/v1/message.go @@ -1,14 +1,17 @@ package v1 import ( + "bytes" "context" "encoding/json" "fmt" + "time" + + "github.com/tidwall/gjson" "github.com/tencent-connect/botgo/dto" "github.com/tencent-connect/botgo/errs" "github.com/tencent-connect/botgo/openapi" - "github.com/tidwall/gjson" ) // Message 拉取单条消息 @@ -68,6 +71,21 @@ func (o *openAPI) PostMessage(ctx context.Context, channelID string, msg *dto.Me return resp.Result().(*dto.Message), nil } +// PostMessageByFormData 发图片消息 +func (o *openAPI) PostMessageByFormData(ctx context.Context, channelID string, imgData []byte, msg map[string]string) (*dto.Message, error) { + resp, err := o.request(ctx). + SetResult(dto.Message{}). + SetPathParam("channel_id", channelID). + SetFileReader("file_image", time.Now().String(), bytes.NewReader(imgData)). + SetFormData(msg). + Post(o.getURL(messagesURI)) + if err != nil { + return nil, err + } + + return resp.Result().(*dto.Message), nil +} + // PatchMessage 编辑消息 func (o *openAPI) PatchMessage(ctx context.Context, channelID string, messageID string, msg *dto.MessageToCreate) (*dto.Message, error) {