2020-11-09 18:54:06 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"errors"
|
|
|
|
"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-11-16 17:34:29 +00:00
|
|
|
message.WriteString(p.fullURL())
|
2020-11-17 21:10:13 +00:00
|
|
|
sendTelegramMessage(message.String(), tg.BotToken, tg.ChatID)
|
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)
|
|
|
|
if err != nil || resp.StatusCode != http.StatusOK {
|
|
|
|
return errors.New("failed to send Telegram message")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|