feat: support render_mode now

This commit is contained in:
JustSong
2024-11-10 12:21:05 +08:00
parent 37b8562f0f
commit 939e956424
3 changed files with 23 additions and 9 deletions

View File

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

View File

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

View File

@@ -24,6 +24,7 @@ type Message struct {
Desp string `json:"desp" gorm:"-:all"` // alias for content Desp string `json:"desp" gorm:"-:all"` // alias for content
Short string `json:"short" gorm:"-:all"` // alias for description Short string `json:"short" gorm:"-:all"` // alias for description
Async bool `json:"async" gorm:"-"` // if true, will send message asynchronously 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) { func GetMessageByIds(id int, userId int) (*Message, error) {