From 8646b97d49fe3ee360f3cce1545d14ce5b14d703 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Wed, 22 Apr 2020 10:06:48 +0200 Subject: [PATCH] Send Telegram message on like and announce --- http.go | 20 ++++++++++++++++++++ setup.go | 13 +++++++++++++ telegram.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 telegram.go diff --git a/http.go b/http.go index aa30ee9..687d4a0 100644 --- a/http.go +++ b/http.go @@ -128,6 +128,26 @@ func Serve() { _ = actor.RemoveFollower(object) } } + case "Like": + { + likeActor, likeActorOk := activity["actor"].(string) + likeObject, likeObjectOk := activity["object"].(string) + if likeActorOk && likeObjectOk && len(likeActor) > 0 && len(likeObject) > 0 && strings.Contains(likeObject, actor.iri) { + if telegramBot != nil { + _ = telegramBot.Post(likeActor + " liked " + likeObject) + } + } + } + case "Announce": + { + announceActor, announceActorOk := activity["actor"].(string) + announceObject, announceObjectOk := activity["object"].(string) + if announceActorOk && announceObjectOk && len(announceActor) > 0 && len(announceObject) > 0 && strings.Contains(announceObject, actor.iri) { + if telegramBot != nil { + _ = telegramBot.Post(announceActor + " announced " + announceObject) + } + } + } default: // Log inbox request logInbox(actor, activity) diff --git a/setup.go b/setup.go index 40cd474..faf152d 100644 --- a/setup.go +++ b/setup.go @@ -11,6 +11,7 @@ var baseURL string var storage = "storage" var actors = make(map[string]*Actor) var defaultActor = "" +var telegramBot *Telegram const libName = "jsonpub" const version = "0.0.1" @@ -31,6 +32,18 @@ func Setup() { fmt.Println("Base URL:", baseURL) cwd, _ := os.Getwd() fmt.Println("Storage Location:", cwd+slash+storage) + // Setup Telegram + tgChat, tgChatOk := os.LookupEnv("TG_CHAT") + tgBotToken, tgBotTokenOk := os.LookupEnv("TG_BOT_TOKEN") + if tgChatOk && tgBotTokenOk { + telegramBot = &Telegram{ + chat: tgChat, + botToken: tgBotToken, + } + } + if telegramBot != nil { + fmt.Println("Telegram is active") + } } // Get actors from env vars diff --git a/telegram.go b/telegram.go new file mode 100644 index 0000000..8260947 --- /dev/null +++ b/telegram.go @@ -0,0 +1,31 @@ +package main + +import ( + "errors" + "net/http" + "net/url" +) + +type Telegram struct { + chat string + botToken string +} + +var telegramBaseUrl = "https://api.telegram.org/bot" + +func (t *Telegram) Post(message string) error { + params := url.Values{} + params.Add("chat_id", t.chat) + params.Add("text", message) + tgUrl, err := url.Parse(telegramBaseUrl + t.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 != 200 { + return errors.New("failed to send Telegram message") + } + return nil +}