mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +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:
parent
d344e0f318
commit
65a3c56340
@ -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() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user