GoBlog/telegram.go

64 lines
1.5 KiB
Go
Raw Normal View History

2020-11-09 18:54:06 +00:00
package main
import (
"bytes"
"errors"
2021-02-08 17:51:07 +00:00
"fmt"
"log"
2020-11-09 18:54:06 +00:00
"net/http"
"net/url"
)
const telegramBaseURL = "https://api.telegram.org/bot"
2020-11-17 21:10:13 +00:00
func initTelegram() {
enable := false
for _, b := range appConfig.Blogs {
if tg := b.Telegram; tg != nil && tg.Enabled && tg.BotToken != "" && tg.ChatID != "" {
enable = true
}
}
if enable {
postHooks[postPostHook] = append(postHooks[postPostHook], func(p *post) {
if p.isPublishedSectionPost() {
p.tgPost()
}
})
}
}
2020-11-09 18:54:06 +00:00
func (p *post) tgPost() {
2020-11-17 21:10:13 +00:00
tg := appConfig.Blogs[p.Blog].Telegram
if tg == nil || !tg.Enabled || tg.BotToken == "" || tg.ChatID == "" {
2020-11-09 18:54:06 +00:00
return
}
var message bytes.Buffer
if title := p.title(); title != "" {
message.WriteString(title)
message.WriteString("\n\n")
}
2020-12-22 21:15:29 +00:00
message.WriteString(p.shortURL())
2021-02-08 17:51:07 +00:00
if err := sendTelegramMessage(message.String(), tg.BotToken, tg.ChatID); err != nil {
log.Println(err.Error())
}
2020-11-09 18:54:06 +00:00
}
func sendTelegramMessage(text, bottoken, chatID string) error {
params := url.Values{}
params.Add("chat_id", chatID)
params.Add("text", text)
tgURL, err := url.Parse(telegramBaseURL + bottoken + "/sendMessage")
if err != nil {
return errors.New("failed to create Telegram request")
}
tgURL.RawQuery = params.Encode()
req, _ := http.NewRequest(http.MethodPost, tgURL.String(), nil)
resp, err := http.DefaultClient.Do(req)
2021-02-08 17:51:07 +00:00
if err != nil {
return err
} else if resp.StatusCode != http.StatusOK {
return fmt.Errorf("failed to send Telegram message, status code %d", resp.StatusCode)
2020-11-09 18:54:06 +00:00
}
return nil
}