mirror of
https://github.com/fumiama/NanoBot.git
synced 2026-06-05 10:40:24 +08:00
feat: new message media api
This commit is contained in:
48
context.go
48
context.go
@@ -134,6 +134,14 @@ func (ctx *Ctx) Send(messages Messages) (m []*Message, err error) {
|
||||
} else if OnlyQQPrivate(ctx) {
|
||||
reply, err = ctx.PostFileToQQUser(ctx.Message.Author.ID, fp)
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
reply, err = ctx.Post(isnextreply, &MessagePost{
|
||||
Type: MessageTypeMedia,
|
||||
Content: " ",
|
||||
Media: &MessageMedia{FileInfo: reply.FileInfo},
|
||||
})
|
||||
m = append(m, reply)
|
||||
if err != nil {
|
||||
return
|
||||
@@ -203,6 +211,10 @@ func (ctx *Ctx) SendPlainMessage(replytosender bool, printable ...any) (*Message
|
||||
|
||||
// SendImage 发送带图片消息到对方
|
||||
func (ctx *Ctx) SendImage(file string, replytosender bool, caption ...any) (reply *Message, err error) {
|
||||
post := &MessagePost{
|
||||
Content: HideURL(fmt.Sprint(caption...)),
|
||||
}
|
||||
|
||||
if OnlyQQ(ctx) {
|
||||
if strings.HasPrefix(file, "file:///") {
|
||||
data, err := os.ReadFile(file[8:])
|
||||
@@ -229,25 +241,27 @@ func (ctx *Ctx) SendImage(file string, replytosender bool, caption ...any) (repl
|
||||
Type: FileTypeImage,
|
||||
URL: file,
|
||||
}
|
||||
if len(caption) > 0 {
|
||||
/*if len(caption) > 0 {
|
||||
_, _ = ctx.SendPlainMessage(replytosender, caption...)
|
||||
}*/
|
||||
if post.Content == "" {
|
||||
post.Content = " "
|
||||
}
|
||||
if OnlyQQGroup(ctx) {
|
||||
reply, err = ctx.PostFileToQQGroup(ctx.Message.ChannelID, fp)
|
||||
} else if OnlyQQPrivate(ctx) {
|
||||
reply, err = ctx.PostFileToQQUser(ctx.Message.Author.ID, fp)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
post := &MessagePost{
|
||||
Content: HideURL(fmt.Sprint(caption...)),
|
||||
}
|
||||
|
||||
if strings.HasPrefix(file, "http") {
|
||||
post.Image = file
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
post.Media = &MessageMedia{FileInfo: reply.FileInfo}
|
||||
} else {
|
||||
post.ImageFile = file
|
||||
if strings.HasPrefix(file, "http") {
|
||||
post.Image = file
|
||||
} else {
|
||||
post.ImageFile = file
|
||||
}
|
||||
}
|
||||
|
||||
return ctx.Post(replytosender, post)
|
||||
@@ -260,17 +274,7 @@ func (ctx *Ctx) SendImageBytes(data []byte, replytosender bool, caption ...any)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
fp := &FilePost{
|
||||
Type: FileTypeImage,
|
||||
URL: file,
|
||||
}
|
||||
if len(caption) > 0 {
|
||||
_, _ = ctx.SendPlainMessage(replytosender, caption...)
|
||||
}
|
||||
if OnlyQQGroup(ctx) {
|
||||
return ctx.PostFileToQQGroup(ctx.Message.ChannelID, fp)
|
||||
}
|
||||
return ctx.PostFileToQQUser(ctx.Message.Author.ID, fp)
|
||||
return ctx.SendImage(file, replytosender, caption...)
|
||||
}
|
||||
|
||||
post := &MessagePost{
|
||||
|
||||
@@ -23,9 +23,12 @@ type Message struct {
|
||||
ChannelID string `json:"channel_id"`
|
||||
GuildID string `json:"guild_id"`
|
||||
GroupOpenID string `json:"group_openid"`
|
||||
FileUUID string `json:"file_uuid"`
|
||||
FileInfo string `json:"file_info"`
|
||||
Content string `json:"content"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
EditedTimestamp time.Time `json:"edited_timestamp"`
|
||||
FileInfoTTL int `json:"ttl"`
|
||||
MentionEveryone bool `json:"mention_everyone"`
|
||||
Author *User `json:"author"`
|
||||
Attachments []MessageAttachment `json:"attachments"`
|
||||
@@ -239,6 +242,7 @@ type MessagePost struct {
|
||||
ReplyEventID string `json:"event_id,omitempty"`
|
||||
Markdown *MessageMarkdown `json:"markdown,omitempty"`
|
||||
KeyBoard *MessageKeyboard `json:"keyboard,omitempty"`
|
||||
Media *MessageMedia `json:"media,omitempty"`
|
||||
}
|
||||
|
||||
func (mp *MessagePost) String() string {
|
||||
@@ -303,6 +307,10 @@ func (mp *MessagePost) String() string {
|
||||
sb.WriteString(", KB模版: ")
|
||||
sb.WriteString(mp.KeyBoard.ID)
|
||||
}
|
||||
if mp.Media != nil {
|
||||
sb.WriteString(", 富媒体: ")
|
||||
sb.WriteString(mp.Media.FileInfo)
|
||||
}
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
|
||||
@@ -36,9 +36,9 @@ func (ft FileType) String() string {
|
||||
//
|
||||
// https://bot.q.qq.com/wiki/develop/api-231017/server-inter/message/send-receive/rich-text-media.html
|
||||
type FilePost struct {
|
||||
Type FileType `json:"file_type"`
|
||||
URL string `json:"url"`
|
||||
MotherFuckingAlwaysTrue bool `json:"srv_send_msg"`
|
||||
Type FileType `json:"file_type"`
|
||||
URL string `json:"url"`
|
||||
IsPositive bool `json:"srv_send_msg"` // IsPositive
|
||||
// file_data 否 【暂未支持】
|
||||
}
|
||||
|
||||
@@ -61,7 +61,6 @@ func (fp *FilePost) String() string {
|
||||
// https://bot.q.qq.com/wiki/develop/api-231017/server-inter/message/send-receive/rich-text-media.html#%E5%8F%91%E9%80%81%E5%88%B0%E5%8D%95%E8%81%8A
|
||||
func (bot *Bot) PostFileToQQUser(id string, content *FilePost) (*Message, error) {
|
||||
logrus.Infoln(getLogHeader(), "<= [Q]单:", id+",", content)
|
||||
content.MotherFuckingAlwaysTrue = true
|
||||
return bot.postOpenAPIofMessage("/v2/users/"+id+"/files", "", WriteBodyFromJSON(content))
|
||||
}
|
||||
|
||||
@@ -70,6 +69,10 @@ func (bot *Bot) PostFileToQQUser(id string, content *FilePost) (*Message, error)
|
||||
// https://bot.q.qq.com/wiki/develop/api-231017/server-inter/message/send-receive/rich-text-media.html#%E5%8F%91%E9%80%81%E5%88%B0%E7%BE%A4%E8%81%8A
|
||||
func (bot *Bot) PostFileToQQGroup(id string, content *FilePost) (*Message, error) {
|
||||
logrus.Infoln(getLogHeader(), "<= [Q]群:", id+",", content)
|
||||
content.MotherFuckingAlwaysTrue = true
|
||||
return bot.postOpenAPIofMessage("/v2/groups/"+id+"/files", "", WriteBodyFromJSON(content))
|
||||
}
|
||||
|
||||
// MessageMedia used in MessagePost
|
||||
type MessageMedia struct {
|
||||
FileInfo string `json:"file_info"`
|
||||
}
|
||||
|
||||
@@ -14,6 +14,9 @@ const (
|
||||
MessageTypeMarkdown
|
||||
MessageTypeArk
|
||||
MessageTypeEmbed
|
||||
MessageTypeUnk1
|
||||
MessageTypeUnk2
|
||||
MessageTypeMedia
|
||||
)
|
||||
|
||||
func (mt2 MessageType) String() string {
|
||||
|
||||
Reference in New Issue
Block a user