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 {