From 6f21d8100f9d859bfdb87cb5f89b3f50d2f20891 Mon Sep 17 00:00:00 2001 From: lz1998 <875543533@qq.com> Date: Thu, 25 Mar 2021 22:43:53 +0800 Subject: [PATCH] flashImg showImg --- pkg/clz/clz.go | 4 +++- service/bot/api_handler.go | 18 ++++++++++++++---- service/bot/mirai2raw.go | 2 ++ service/bot/proto2mirai.go | 14 ++++++++++++-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/pkg/clz/clz.go b/pkg/clz/clz.go index 2a19753..b010ca9 100644 --- a/pkg/clz/clz.go +++ b/pkg/clz/clz.go @@ -17,7 +17,9 @@ type MyVideoElement struct { type LocalImageElement struct { message.ImageElement - Stream io.ReadSeeker + Stream io.ReadSeeker + Tp string // 类型 flash/show + EffectId int32 // show的特效id,范围40000-40005 } type GiftElement struct { diff --git a/service/bot/api_handler.go b/service/bot/api_handler.go index a648a29..8b9a18f 100644 --- a/service/bot/api_handler.go +++ b/service/bot/api_handler.go @@ -42,12 +42,16 @@ func preProcessPrivateSendingMessage(cli *client.QQClient, target int64, m *mess newElements := make([]message.IMessageElement, 0, len(m.Elements)) for _, element := range m.Elements { if i, ok := element.(*clz.LocalImageElement); ok { - gm, err := cli.UploadPrivateImage(target, i.Stream) + img, err := cli.UploadPrivateImage(target, i.Stream) if err != nil { log.Errorf("failed to upload private image, %+v", err) continue } - newElements = append(newElements, gm) + if i.Tp == "flash" { + newElements = append(newElements, &message.FriendFlashPicElement{FriendImageElement: *img}) + } else { + newElements = append(newElements, img) + } continue } if i, ok := element.(*message.VoiceElement); ok { @@ -77,12 +81,18 @@ func preProcessGroupSendingMessage(cli *client.QQClient, groupCode int64, m *mes continue } if i, ok := element.(*clz.LocalImageElement); ok { - gm, err := cli.UploadGroupImage(groupCode, i.Stream) + img, err := cli.UploadGroupImage(groupCode, i.Stream) if err != nil { log.Errorf("failed to upload group image, %+v", err) continue } - newElements = append(newElements, gm) + if i.Tp == "flash" { + newElements = append(newElements, &message.GroupFlashPicElement{GroupImageElement: *img}) + } else if i.Tp == "show" { + newElements = append(newElements, &message.GroupShowPicElement{GroupImageElement: *img, EffectId: i.EffectId}) + } else { + newElements = append(newElements, img) + } continue } if i, ok := element.(*message.VoiceElement); ok { diff --git a/service/bot/mirai2raw.go b/service/bot/mirai2raw.go index 7a4a167..69d928b 100644 --- a/service/bot/mirai2raw.go +++ b/service/bot/mirai2raw.go @@ -18,6 +18,8 @@ func MiraiMsgToRawMsg(messageChain []message.IMessageElement) string { result += fmt.Sprintf(``, elem.Target) case *message.ImageElement: result += fmt.Sprintf(``, html.EscapeString(elem.Url)) + case *clz.LocalImageElement: + result += fmt.Sprintf(``) case *message.FaceElement: result += fmt.Sprintf(``, elem.Index, html.EscapeString(elem.Name)) case *message.VoiceElement: diff --git a/service/bot/proto2mirai.go b/service/bot/proto2mirai.go index 33fd5d1..b04f06f 100644 --- a/service/bot/proto2mirai.go +++ b/service/bot/proto2mirai.go @@ -104,7 +104,6 @@ func ProtoImageToMiraiImage(data map[string]string) message.IMessageElement { return EmptyText() } elem.Stream = bytes.NewReader(b) - return elem } else { imageFile, err := os.Open(url) if err != nil { @@ -112,8 +111,19 @@ func ProtoImageToMiraiImage(data map[string]string) message.IMessageElement { return EmptyText() } elem.Stream = imageFile - return elem } + + elem.Tp = data["type"] // show或flash + if elem.Tp == "show" { + effectIdStr := data["effect_id"] + effectId, err := strconv.Atoi(effectIdStr) + if err != nil || effectId < 40000 || effectId > 40005 { + effectId = 40000 + } + elem.EffectId = int32(effectId) + } + + return elem } func ProtoVoiceToMiraiVoice(data map[string]string) message.IMessageElement {