Add Telegram syndication

This commit is contained in:
Jan-Lukas Else 2020-11-09 19:54:06 +01:00
parent 7364cfed59
commit 78c2ad722b
4 changed files with 44 additions and 24 deletions

View File

@ -56,6 +56,7 @@ type configBlog struct {
Photos *photos `mapstructure:"photos"` Photos *photos `mapstructure:"photos"`
DefaultSection string `mapstructure:"defaultsection"` DefaultSection string `mapstructure:"defaultsection"`
CustomPages []*customPage `mapstructure:"custompages"` CustomPages []*customPage `mapstructure:"custompages"`
Telegram *configTelegram `mapstructure:"telegram"`
} }
type section struct { type section struct {

View File

@ -27,6 +27,7 @@ func (p *post) postPostHooks() {
}(p, cmdTmplString) }(p, cmdTmplString)
} }
go p.apPost() go p.apPost()
go p.tgPost()
go p.sendWebmentions() go p.sendWebmentions()
} }

View File

@ -1,37 +1,15 @@
package main package main
import ( import (
"errors"
"log" "log"
"net/http"
"net/url"
) )
func sendNotification(text string) { func sendNotification(text string) {
log.Println("Notification:", text) log.Println("Notification:", text)
if appConfig.Notifications.Telegram.Enabled { if appConfig.Notifications.Telegram.Enabled {
err := sendTelegramMessage(text) err := sendTelegramMessage(text, appConfig.Notifications.Telegram.BotToken, appConfig.Notifications.Telegram.ChatID)
if err != nil { if err != nil {
log.Println("Failed to send Telegram message:", err.Error()) log.Println("Failed to send Telegram notification:", err.Error())
} }
} }
} }
const telegramBaseURL = "https://api.telegram.org/bot"
func sendTelegramMessage(text string) error {
params := url.Values{}
params.Add("chat_id", appConfig.Notifications.Telegram.ChatID)
params.Add("text", text)
tgURL, err := url.Parse(telegramBaseURL + appConfig.Notifications.Telegram.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
}

40
telegram.go Normal file
View File

@ -0,0 +1,40 @@
package main
import (
"bytes"
"errors"
"net/http"
"net/url"
)
const telegramBaseURL = "https://api.telegram.org/bot"
func (p *post) tgPost() {
if !appConfig.Blogs[p.Blog].Telegram.Enabled {
return
}
var message bytes.Buffer
if title := p.title(); title != "" {
message.WriteString(title)
message.WriteString("\n\n")
}
message.WriteString(appConfig.Server.PublicAddress + p.Path)
sendTelegramMessage(message.String(), appConfig.Blogs[p.Blog].Telegram.BotToken, appConfig.Blogs[p.Blog].Telegram.ChatID)
}
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
}