1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

feat: 添加IMesssage接口并实现 (#335)

* -- 添加接口并实现:
 - 添加消息类型接口:IMessage,设定方法:获取消息元素列表,获取聊天id,获取消息文本;以privateMessage,groupMessage,TempMessage实现该接口
-- 目的:
 - 对群聊/私聊/临时消息做出回应有相同的处理逻辑时不用根据消息类型不同定义不同方法

* -- add
 - sync upstream change

* -- ci
 - sync upstream change

* Delete sync.yml

---------

Co-authored-by: GH Action - Upstream Sync <action@github.com>
Co-authored-by: 源文雨 <41315874+fumiama@users.noreply.github.com>
This commit is contained in:
Lex.Margin 2023-08-01 09:33:55 +08:00 committed by GitHub
parent d344e0f318
commit 65a3c56340
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,6 +13,13 @@ import (
"github.com/Mrs4s/MiraiGo/utils" "github.com/Mrs4s/MiraiGo/utils"
) )
type IMessage interface {
GetElements() []IMessageElement
Chat() int64
ToString() string
Texts() []string
}
type ( type (
PrivateMessage struct { PrivateMessage struct {
Id int32 Id int32
@ -107,7 +114,7 @@ func NewSendingMessage() *SendingMessage {
} }
func (msg *PrivateMessage) ToString() (res string) { func (msg *PrivateMessage) ToString() (res string) {
for _, elem := range msg.Elements { for _, elem := range msg.GetElements() {
switch e := elem.(type) { switch e := elem.(type) {
case *TextElement: case *TextElement:
res += e.Content res += e.Content
@ -120,42 +127,104 @@ func (msg *PrivateMessage) ToString() (res string) {
return return
} }
func (msg *PrivateMessage) Chat() int64 {
return msg.Sender.Uin
}
func (msg *PrivateMessage) GetElements() []IMessageElement {
return msg.Elements
}
func (msg *PrivateMessage) Texts() []string {
return parseTexts(msg.GetElements())
}
func (msg *GroupMessage) Chat() int64 {
return msg.GroupCode
}
func (msg *GroupMessage) GetElements() []IMessageElement {
return msg.Elements
}
func (msg *TempMessage) Chat() int64 {
return msg.GroupCode
}
func (msg *TempMessage) GetElements() []IMessageElement {
return msg.Elements
}
func (msg *TempMessage) Texts() []string {
return parseTexts(msg.GetElements())
}
func (msg *TempMessage) ToString() (res string) { func (msg *TempMessage) ToString() (res string) {
var strBuilder strings.Builder
for _, elem := range msg.Elements { for _, elem := range msg.Elements {
switch e := elem.(type) { switch e := elem.(type) {
case *TextElement: case *TextElement:
res += e.Content strBuilder.WriteString(e.Content)
case *FaceElement: case *FaceElement:
res += "[" + e.Name + "]" strBuilder.WriteString("[")
strBuilder.WriteString(e.Name)
strBuilder.WriteString("]")
case *AtElement: case *AtElement:
res += e.Display strBuilder.WriteString(e.Display)
} }
} }
res = strBuilder.String()
return return
} }
func (msg *GroupMessage) ToString() (res string) { func (msg *GroupMessage) ToString() (res string) {
for _, elem := range msg.Elements { var strBuilder strings.Builder
for _, elem := range msg.GetElements() {
switch e := elem.(type) { switch e := elem.(type) {
case *TextElement: case *TextElement:
res += e.Content strBuilder.WriteString(e.Content)
case *FaceElement: case *FaceElement:
res += "[" + e.Name + "]" strBuilder.WriteString("[")
strBuilder.WriteString(e.Name)
strBuilder.WriteString("]")
case *MarketFaceElement: case *MarketFaceElement:
res += "[" + e.Name + "]" strBuilder.WriteString("[")
strBuilder.WriteString(e.Name)
strBuilder.WriteString("]")
case *GroupImageElement: case *GroupImageElement:
res += "[Image: " + e.ImageId + "]" strBuilder.WriteString("Image: ")
strBuilder.WriteString(e.ImageId)
strBuilder.WriteString("]")
case *AtElement: case *AtElement:
res += e.Display strBuilder.WriteString(e.Display)
case *RedBagElement: case *RedBagElement:
res += "[RedBag:" + e.Title + "]" strBuilder.WriteString("[RedBag: ")
strBuilder.WriteString(e.Title)
strBuilder.WriteString("]")
case *ReplyElement: case *ReplyElement:
res += "[Reply:" + strconv.FormatInt(int64(e.ReplySeq), 10) + "]" strBuilder.WriteString("[Reply: ")
strBuilder.WriteString(strconv.FormatInt(int64(e.ReplySeq), 10))
strBuilder.WriteString("]")
} }
} }
res = strBuilder.String()
return return
} }
func (msg *GroupMessage) Texts() []string {
return parseTexts(msg.GetElements())
}
func parseTexts(elements []IMessageElement) []string {
texts := make([]string, 0, 4)
for _, elem := range elements {
if elem.Type() == Text {
texts = append(texts, elem.(*TextElement).Content)
}
}
return texts
}
func (msg *SendingMessage) Append(e IMessageElement) *SendingMessage { func (msg *SendingMessage) Append(e IMessageElement) *SendingMessage {
v := reflect.ValueOf(e) v := reflect.ValueOf(e)
if v.Kind() == reflect.Ptr && !v.IsNil() { if v.Kind() == reflect.Ptr && !v.IsNil() {