feat: add to field to specify the receiver (close #48)

This commit is contained in:
JustSong
2023-04-16 09:55:23 +08:00
parent 69f503124a
commit 3d38260e5b
10 changed files with 55 additions and 3 deletions
+6 -1
View File
@@ -7,6 +7,7 @@ import (
"fmt"
"message-pusher/model"
"net/http"
"strings"
)
type corpMessageRequest struct {
@@ -17,6 +18,7 @@ type corpMessageRequest struct {
Markdown struct {
Content string `json:"content"`
} `json:"markdown"`
MentionedList []string `json:"mentioned_list"`
}
type corpMessageResponse struct {
@@ -25,6 +27,7 @@ type corpMessageResponse struct {
}
func SendCorpMessage(message *model.Message, user *model.User) error {
// https://developer.work.weixin.qq.com/document/path/91770
if user.CorpWebhookURL == "" {
return errors.New("未配置企业微信群机器人消息推送方式")
}
@@ -38,7 +41,9 @@ func SendCorpMessage(message *model.Message, user *model.User) error {
messageRequest.MessageType = "markdown"
messageRequest.Markdown.Content = message.Content
}
if message.To != "" {
messageRequest.MentionedList = strings.Split(message.To, "|")
}
jsonData, err := json.Marshal(messageRequest)
if err != nil {
return err
+13
View File
@@ -11,6 +11,7 @@ import (
"message-pusher/model"
"net/http"
"net/url"
"strings"
"time"
)
@@ -23,6 +24,10 @@ type dingMessageRequest struct {
Title string `json:"title"`
Text string `json:"text"`
} `json:"markdown"`
At struct {
AtUserIds []string `json:"atUserIds"`
IsAtAll bool `json:"isAtAll"`
}
}
type dingMessageResponse struct {
@@ -31,6 +36,7 @@ type dingMessageResponse struct {
}
func SendDingMessage(message *model.Message, user *model.User) error {
// https://open.dingtalk.com/document/robots/custom-robot-access#title-72m-8ag-pqw
if user.DingWebhookURL == "" {
return errors.New("未配置钉钉群机器人消息推送方式")
}
@@ -45,6 +51,13 @@ func SendDingMessage(message *model.Message, user *model.User) error {
messageRequest.Markdown.Title = message.Title
messageRequest.Markdown.Text = message.Content
}
if message.To != "" {
if message.To == "@all" {
messageRequest.At.IsAtAll = true
} else {
messageRequest.At.AtUserIds = strings.Split(message.To, "|")
}
}
timestamp := time.Now().UnixMilli()
sign, err := dingSign(user.DingWebhookSecret, timestamp)
+10
View File
@@ -6,6 +6,7 @@ import (
"errors"
"message-pusher/model"
"net/http"
"strings"
)
type discordMessageRequest struct {
@@ -27,6 +28,15 @@ func SendDiscordMessage(message *model.Message, user *model.User) error {
messageRequest := discordMessageRequest{
Content: message.Content,
}
// https://discord.com/developers/docs/reference#message-formatting
if message.To != "" {
messageRequest.Content = ""
ids := strings.Split(message.To, "|")
for _, id := range ids {
messageRequest.Content = "<@" + id + "> " + messageRequest.Content
}
messageRequest.Content = messageRequest.Content + message.Content
}
jsonData, err := json.Marshal(messageRequest)
if err != nil {
+1
View File
@@ -21,5 +21,6 @@ func SendEmailMessage(message *model.Message, user *model.User) error {
common.SysLog(err.Error())
}
}
// TODO: support message.To
return common.SendEmail(subject, user.Email, message.HTMLContent)
}
+15 -2
View File
@@ -11,6 +11,7 @@ import (
"message-pusher/model"
"net/http"
"strconv"
"strings"
"time"
)
@@ -46,15 +47,27 @@ type larkMessageResponse struct {
}
func SendLarkMessage(message *model.Message, user *model.User) error {
// https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN#e1cdee9f
if user.LarkWebhookURL == "" {
return errors.New("未配置飞书群机器人消息推送方式")
}
messageRequest := larkMessageRequest{
MessageType: "text",
}
atPrefix := ""
if message.To != "" {
if message.To == "@all" {
atPrefix = "<at user_id=\"all\">所有人</at>"
} else {
ids := strings.Split(message.To, "|")
for _, id := range ids {
atPrefix += fmt.Sprintf("<at user_id=\"%s\"> </at>", id)
}
}
}
if message.Content == "" {
messageRequest.MessageType = "text"
messageRequest.Content.Text = message.Description
messageRequest.Content.Text = atPrefix + message.Description
} else {
messageRequest.MessageType = "interactive"
messageRequest.Card.Config.WideScreenMode = true
@@ -62,7 +75,7 @@ func SendLarkMessage(message *model.Message, user *model.User) error {
messageRequest.Card.Elements = append(messageRequest.Card.Elements, larkMessageRequestCardElement{
Tag: "div",
Text: larkMessageRequestCardElementText{
Content: message.Content,
Content: atPrefix + message.Content,
Tag: "lark_md",
},
})
+1
View File
@@ -21,6 +21,7 @@ type telegramMessageResponse struct {
}
func SendTelegramMessage(message *model.Message, user *model.User) error {
// https://core.telegram.org/bots/api#sendmessage
if user.TelegramBotToken == "" || user.TelegramChatId == "" {
return errors.New("未配置 Telegram 机器人消息推送方式")
}
+3
View File
@@ -104,6 +104,9 @@ func SendWeChatCorpMessage(message *model.Message, user *model.User) error {
ToUser: user.WeChatCorpAccountUserId,
AgentId: user.WeChatCorpAccountAgentId,
}
if message.To != "" {
messageRequest.ToUser = message.To
}
if message.Content == "" {
if message.Title == "" {
messageRequest.MessageType = "text"