fix: split the message for Telegram if it's too long (close #79)

This commit is contained in:
JustSong
2023-05-11 19:57:16 +08:00
parent 933eaa6d3e
commit 9ebcc3a465
+28 -16
View File
@@ -9,6 +9,8 @@ import (
"net/http" "net/http"
) )
var TelegramMaxMessageLength = 4096
type telegramMessageRequest struct { type telegramMessageRequest struct {
ChatId string `json:"chat_id"` ChatId string `json:"chat_id"`
Text string `json:"text"` Text string `json:"text"`
@@ -34,22 +36,32 @@ func SendTelegramMessage(message *model.Message, user *model.User, channel_ *mod
messageRequest.Text = message.Content messageRequest.Text = message.Content
messageRequest.ParseMode = "markdown" messageRequest.ParseMode = "markdown"
} }
jsonData, err := json.Marshal(messageRequest) text := messageRequest.Text
if err != nil { idx := 0
return err for idx < len(text) {
} nextIdx := idx + TelegramMaxMessageLength
resp, err := http.Post(fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage", channel_.Secret), "application/json", if nextIdx > len(text) {
bytes.NewBuffer(jsonData)) nextIdx = len(text)
if err != nil { }
return err messageRequest.Text = text[idx:nextIdx]
} idx = nextIdx
var res telegramMessageResponse jsonData, err := json.Marshal(messageRequest)
err = json.NewDecoder(resp.Body).Decode(&res) if err != nil {
if err != nil { return err
return err }
} resp, err := http.Post(fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage", channel_.Secret), "application/json",
if !res.Ok { bytes.NewBuffer(jsonData))
return errors.New(res.Description) if err != nil {
return err
}
var res telegramMessageResponse
err = json.NewDecoder(resp.Body).Decode(&res)
if err != nil {
return err
}
if !res.Ok {
return errors.New(res.Description)
}
} }
return nil return nil
} }