From 939e9564249bf4ce24f29f2081f37c9ae3dba7b3 Mon Sep 17 00:00:00 2001 From: JustSong Date: Sun, 10 Nov 2024 12:21:05 +0800 Subject: [PATCH] feat: support render_mode now --- README.md | 4 ++++ controller/message.go | 27 ++++++++++++++++++--------- model/message.go | 1 + 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1170895..f3d5564 100644 --- a/README.md +++ b/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 查询参数进行设置。 diff --git a/controller/message.go b/controller/message.go index d762a18..082422e 100644 --- a/controller/message.go +++ b/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{ diff --git a/model/message.go b/model/message.go index e61630d..98f62de 100644 --- a/model/message.go +++ b/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) {