From b7f88138bdc3560669b2074e566e52e32b72fe03 Mon Sep 17 00:00:00 2001
From: OpenIM-Gordon <1432970085@qq.com>
Date: Fri, 28 Feb 2025 16:22:00 +0800
Subject: [PATCH] feat: add a new message type: Markdown text (#3162)

---
 go.mod                     |  2 +-
 go.sum                     |  4 ++--
 internal/api/msg.go        |  3 +++
 internal/rpc/msg/verify.go | 31 +++++++------------------------
 pkg/apistruct/msg.go       |  4 ++++
 5 files changed, 17 insertions(+), 27 deletions(-)

diff --git a/go.mod b/go.mod
index 20cf3b202..0bdf09340 100644
--- a/go.mod
+++ b/go.mod
@@ -12,7 +12,7 @@ require (
 	github.com/gorilla/websocket v1.5.1
 	github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
 	github.com/mitchellh/mapstructure v1.5.0
-	github.com/openimsdk/protocol v0.0.72-alpha.74
+	github.com/openimsdk/protocol v0.0.72-alpha.75
 	github.com/openimsdk/tools v0.0.50-alpha.74
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/prometheus/client_golang v1.18.0
diff --git a/go.sum b/go.sum
index 63dfe9236..e8f1300f4 100644
--- a/go.sum
+++ b/go.sum
@@ -347,8 +347,8 @@ github.com/onsi/gomega v1.25.0 h1:Vw7br2PCDYijJHSfBOWhov+8cAnUf8MfMaIOV323l6Y=
 github.com/onsi/gomega v1.25.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM=
 github.com/openimsdk/gomake v0.0.15-alpha.2 h1:5Q8yl8ezy2yx+q8/ucU/t4kJnDfCzNOrkXcDACCqtyM=
 github.com/openimsdk/gomake v0.0.15-alpha.2/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI=
-github.com/openimsdk/protocol v0.0.72-alpha.74 h1:cGycdzEOxjPuaeoQhIWEKKVf5zp1I+wx7ZnBemjCJJI=
-github.com/openimsdk/protocol v0.0.72-alpha.74/go.mod h1:WF7EuE55vQvpyUAzDXcqg+B+446xQyEba0X35lTINmw=
+github.com/openimsdk/protocol v0.0.72-alpha.75 h1:WlmBn8g2Fvv21g8TEFVbolmbw2rU0sN9kj6sQaDK7cA=
+github.com/openimsdk/protocol v0.0.72-alpha.75/go.mod h1:WF7EuE55vQvpyUAzDXcqg+B+446xQyEba0X35lTINmw=
 github.com/openimsdk/tools v0.0.50-alpha.74 h1:yh10SiMiivMEjicEQg+QAsH4pvaO+4noMPdlw+ew0Kc=
 github.com/openimsdk/tools v0.0.50-alpha.74/go.mod h1:n2poR3asX1e1XZce4O+MOWAp+X02QJRFvhcLCXZdzRo=
 github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
diff --git a/internal/api/msg.go b/internal/api/msg.go
index 927247cca..1316de943 100644
--- a/internal/api/msg.go
+++ b/internal/api/msg.go
@@ -21,6 +21,7 @@ import (
 	"github.com/gin-gonic/gin"
 	"github.com/go-playground/validator/v10"
 	"github.com/mitchellh/mapstructure"
+
 	"github.com/openimsdk/open-im-server/v3/pkg/apistruct"
 	"github.com/openimsdk/open-im-server/v3/pkg/authverify"
 	"github.com/openimsdk/open-im-server/v3/pkg/common/config"
@@ -175,6 +176,8 @@ func (m *MessageApi) getSendMsgReq(c *gin.Context, req apistruct.SendMsg) (sendM
 		data = apistruct.AtElem{}
 	case constant.Custom:
 		data = apistruct.CustomElem{}
+	case constant.MarkdownText:
+		data = apistruct.MarkdownTextElem{}
 	case constant.OANotification:
 		data = apistruct.OANotificationElem{}
 		req.SessionType = constant.NotificationChatType
diff --git a/internal/rpc/msg/verify.go b/internal/rpc/msg/verify.go
index f6c3147ba..a492232a4 100644
--- a/internal/rpc/msg/verify.go
+++ b/internal/rpc/msg/verify.go
@@ -16,13 +16,14 @@ package msg
 
 import (
 	"context"
+	"math/rand"
+	"strconv"
+	"time"
+
 	"github.com/openimsdk/open-im-server/v3/pkg/common/servererrs"
 	"github.com/openimsdk/tools/utils/datautil"
 	"github.com/openimsdk/tools/utils/encrypt"
 	"github.com/openimsdk/tools/utils/timeutil"
-	"math/rand"
-	"strconv"
-	"time"
 
 	"github.com/openimsdk/protocol/constant"
 	"github.com/openimsdk/protocol/msg"
@@ -137,27 +138,9 @@ func (m *msgServer) encapsulateMsgData(msg *sdkws.MsgData) {
 		msg.SendTime = timeutil.GetCurrentTimestampByMill()
 	}
 	switch msg.ContentType {
-	case constant.Text:
-		fallthrough
-	case constant.Picture:
-		fallthrough
-	case constant.Voice:
-		fallthrough
-	case constant.Video:
-		fallthrough
-	case constant.File:
-		fallthrough
-	case constant.AtText:
-		fallthrough
-	case constant.Merger:
-		fallthrough
-	case constant.Card:
-		fallthrough
-	case constant.Location:
-		fallthrough
-	case constant.Custom:
-		fallthrough
-	case constant.Quote:
+	case constant.Text, constant.Picture, constant.Voice, constant.Video,
+		constant.File, constant.AtText, constant.Merger, constant.Card,
+		constant.Location, constant.Custom, constant.Quote, constant.AdvancedText, constant.MarkdownText:
 	case constant.Revoke:
 		datautil.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false)
 		datautil.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false)
diff --git a/pkg/apistruct/msg.go b/pkg/apistruct/msg.go
index 44f157b6d..d818e769c 100644
--- a/pkg/apistruct/msg.go
+++ b/pkg/apistruct/msg.go
@@ -83,6 +83,10 @@ type TextElem struct {
 	Content string `json:"content" validate:"required"`
 }
 
+type MarkdownTextElem struct {
+	Content string `mapstructure:"content" validate:"required"`
+}
+
 type StreamMsgElem struct {
 	Type    string `mapstructure:"type" validate:"required"`
 	Content string `mapstructure:"content" validate:"required"`