ソースを参照

feat: support render_mode now

JustSong 1 年間 前
コミット
939e956424
3 ファイル変更23 行追加9 行削除
  1. 4 0
      README.md
  2. 18 9
      controller/message.go
  3. 1 0
      model/message.go

+ 4 - 0
README.md

@@ -222,6 +222,10 @@ proxy_send_timeout 300s;
       1. `@all`:推送给所有用户。
       2. `user1|user2|user3`:推送给多个用户,用户之间使用 `|` 分隔。
    8. `async`:选填,如果设置为 `true` 则消息推送将在后台异步进行,返回结果包含 `uuid` 字段,可用于后续[获取消息发送状态](./docs/API.md#通过消息 UUID 获取消息发送状态)。
+   9. `render_mode`:选填,
+      1. 如果设置为 `code`,则消息体会被自动嵌套在代码块中进行渲染;
+      2. 如果设置为 `raw`,则不进行 Markdown 解析;
+      3. 默认 `markdown`,即进行 Markdown 解析。
 3. `POST` 请求方式:字段与上面 `GET` 请求方式保持一致。
    + 如果发送的是 JSON,HTTP Header `Content-Type` 请务必设置为 `application/json`,否则一律按 Form 处理。
    + POST 请求方式下的 `token` 字段也可以通过 URL 查询参数进行设置。

+ 18 - 9
controller/message.go

@@ -40,6 +40,7 @@ func GetPushMessage(c *gin.Context) {
 		Short:       c.Query("short"),
 		OpenId:      c.Query("openid"),
 		Async:       c.Query("async") == "true",
+		RenderMode:  c.Query("render_mode"),
 	}
 	keepCompatible(&message)
 	pushMessageHelper(c, &message)
@@ -71,6 +72,7 @@ func PostPushMessage(c *gin.Context) {
 			Short:       c.PostForm("short"),
 			OpenId:      c.PostForm("openid"),
 			Async:       c.PostForm("async") == "true",
+			RenderMode:  c.PostForm("render_mode"),
 		}
 	}
 	if message == (model.Message{}) {
@@ -163,6 +165,11 @@ func processMessage(c *gin.Context, message *model.Message, user *model.User) {
 		})
 		return
 	}
+	if message.RenderMode == "code" {
+		if message.Content != "" {
+			message.Content = fmt.Sprintf("```\n%s\n```", message.Content)
+		}
+	}
 	err = saveAndSendMessage(user, message, channel_)
 	if err != nil {
 		c.JSON(http.StatusOK, gin.H{
@@ -259,16 +266,18 @@ func RenderMessage(c *gin.Context) {
 		c.Status(http.StatusNotFound)
 		return
 	}
-	if message.Description != "" {
-		message.Description, err = common.Markdown2HTML(message.Description)
-		if err != nil {
-			common.SysLog(err.Error())
+	if message.RenderMode != "raw" {
+		if message.Description != "" {
+			message.Description, err = common.Markdown2HTML(message.Description)
+			if err != nil {
+				common.SysLog(err.Error())
+			}
 		}
-	}
-	if message.Content != "" {
-		message.HTMLContent, err = common.Markdown2HTML(message.Content)
-		if err != nil {
-			common.SysLog(err.Error())
+		if message.Content != "" {
+			message.HTMLContent, err = common.Markdown2HTML(message.Content)
+			if err != nil {
+				common.SysLog(err.Error())
+			}
 		}
 	}
 	c.HTML(http.StatusOK, "message.html", gin.H{

+ 1 - 0
model/message.go

@@ -24,6 +24,7 @@ type Message struct {
 	Desp        string `json:"desp" gorm:"-:all"`             // alias for content
 	Short       string `json:"short" gorm:"-:all"`            // alias for description
 	Async       bool   `json:"async" gorm:"-"`                // if true, will send message asynchronously
+	RenderMode  string `json:"render_mode" gorm:"raw"`        // markdown (default), code, raw
 }
 
 func GetMessageByIds(id int, userId int) (*Message, error) {