feat: save messages to database (close #37)

This commit is contained in:
JustSong
2022-12-22 17:59:12 +08:00
parent f13ce0d53b
commit d26e578762
19 changed files with 682 additions and 34 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ type barkMessageResponse struct {
Message string `json:"message"`
}
func SendBarkMessage(message *Message, user *model.User) error {
func SendBarkMessage(message *model.Message, user *model.User) error {
if user.BarkServer == "" || user.BarkSecret == "" {
return errors.New("未配置 Bark 消息推送方式")
}
+6 -6
View File
@@ -19,7 +19,7 @@ const (
type webSocketClient struct {
userId int
conn *websocket.Conn
message chan *Message
message chan *model.Message
pong chan bool
stop chan bool
timestamp int64
@@ -98,7 +98,7 @@ func (c *webSocketClient) handleDataWriting() {
}
}
func (c *webSocketClient) sendMessage(message *Message) {
func (c *webSocketClient) sendMessage(message *model.Message) {
c.message <- message
}
@@ -122,21 +122,21 @@ func RegisterClient(userId int, conn *websocket.Conn) {
oldClient, existed := clientMap[userId]
clientConnMapMutex.Unlock()
if existed {
byeMessage := &Message{
byeMessage := &model.Message{
Title: common.SystemName,
Description: "其他客户端已连接服务器,本客户端已被挤下线!",
}
oldClient.sendMessage(byeMessage)
oldClient.close()
}
helloMessage := &Message{
helloMessage := &model.Message{
Title: common.SystemName,
Description: "客户端连接成功!",
}
newClient := &webSocketClient{
userId: userId,
conn: conn,
message: make(chan *Message),
message: make(chan *model.Message),
pong: make(chan bool),
stop: make(chan bool),
timestamp: time.Now().UnixMilli(),
@@ -149,7 +149,7 @@ func RegisterClient(userId int, conn *websocket.Conn) {
clientConnMapMutex.Unlock()
}
func SendClientMessage(message *Message, user *model.User) error {
func SendClientMessage(message *model.Message, user *model.User) error {
if user.ClientSecret == "" {
return errors.New("未配置 WebSocket 客户端消息推送方式")
}
+1 -1
View File
@@ -24,7 +24,7 @@ type corpMessageResponse struct {
Message string `json:"errmsg"`
}
func SendCorpMessage(message *Message, user *model.User) error {
func SendCorpMessage(message *model.Message, user *model.User) error {
if user.CorpWebhookURL == "" {
return errors.New("未配置企业微信群机器人消息推送方式")
}
+1 -1
View File
@@ -30,7 +30,7 @@ type dingMessageResponse struct {
Message string `json:"errmsg"`
}
func SendDingMessage(message *Message, user *model.User) error {
func SendDingMessage(message *model.Message, user *model.User) error {
if user.DingWebhookURL == "" {
return errors.New("未配置钉钉群机器人消息推送方式")
}
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"message-pusher/model"
)
func SendEmailMessage(message *Message, user *model.User) error {
func SendEmailMessage(message *model.Message, user *model.User) error {
if user.Email == "" {
return errors.New("未配置邮箱地址")
}
+1 -1
View File
@@ -45,7 +45,7 @@ type larkMessageResponse struct {
Message string `json:"msg"`
}
func SendLarkMessage(message *Message, user *model.User) error {
func SendLarkMessage(message *model.Message, user *model.User) error {
if user.LarkWebhookURL == "" {
return errors.New("未配置飞书群机器人消息推送方式")
}
+4 -12
View File
@@ -15,20 +15,10 @@ const (
TypeTelegram = "telegram"
TypeBark = "bark"
TypeClient = "client"
TypeNone = "none"
)
type Message struct {
Title string `json:"title"`
Description string `json:"description"`
Desp string `json:"desp"` // alias for description
Content string `json:"content"`
URL string `json:"url"`
Channel string `json:"channel"`
Token string `json:"token"`
HTMLContent string `json:"html_content"`
}
func (message *Message) Send(user *model.User) error {
func SendMessage(message *model.Message, user *model.User) error {
switch message.Channel {
case TypeEmail:
return SendEmailMessage(message, user)
@@ -48,6 +38,8 @@ func (message *Message) Send(user *model.User) error {
return SendClientMessage(message, user)
case TypeTelegram:
return SendTelegramMessage(message, user)
case TypeNone:
return nil
default:
return errors.New("不支持的消息通道:" + message.Channel)
}
+1 -1
View File
@@ -20,7 +20,7 @@ type telegramMessageResponse struct {
Description string `json:"description"`
}
func SendTelegramMessage(message *Message, user *model.User) error {
func SendTelegramMessage(message *model.Message, user *model.User) error {
if user.TelegramBotToken == "" || user.TelegramChatId == "" {
return errors.New("未配置 Telegram 机器人消息推送方式")
}
+2 -3
View File
@@ -95,7 +95,7 @@ type wechatCorpMessageResponse struct {
ErrorMessage string `json:"errmsg"`
}
func SendWeChatCorpMessage(message *Message, user *model.User) error {
func SendWeChatCorpMessage(message *model.Message, user *model.User) error {
if user.WeChatCorpAccountId == "" {
return errors.New("未配置微信企业号消息推送方式")
}
@@ -119,8 +119,7 @@ func SendWeChatCorpMessage(message *Message, user *model.User) error {
messageRequest.MessageType = "textcard"
messageRequest.TextCard.Title = message.Title
messageRequest.TextCard.Description = message.Description
// TODO: render content and set URL
messageRequest.TextCard.URL = common.ServerAddress
messageRequest.TextCard.URL = message.URL
} else {
messageRequest.MessageType = "markdown"
messageRequest.Markdown.Content = message.Content
+2 -2
View File
@@ -88,7 +88,7 @@ type wechatTestMessageResponse struct {
ErrorMessage string `json:"errmsg"`
}
func SendWeChatTestMessage(message *Message, user *model.User) error {
func SendWeChatTestMessage(message *model.Message, user *model.User) error {
if user.WeChatTestAccountId == "" {
return errors.New("未配置微信测试号消息推送方式")
}
@@ -97,8 +97,8 @@ func SendWeChatTestMessage(message *Message, user *model.User) error {
TemplateId: user.WeChatTestAccountTemplateId,
URL: "",
}
// TODO: render content and set URL
values.Data.Text.Value = message.Description
values.URL = message.URL
jsonData, err := json.Marshal(values)
if err != nil {
return err