From 4aea2d0d071a03e9342ee19dd811aa8947606f92 Mon Sep 17 00:00:00 2001 From: Mark Zheleznyakov Date: Fri, 17 Jan 2025 00:50:41 +0300 Subject: [PATCH] feat: Added telegram message sending --- cmd/service/main.go | 9 +++++++++ internal/config/env.go | 10 +++++++--- internal/schedule/poll.go | 2 ++ internal/telegram/api.go | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 internal/telegram/api.go diff --git a/cmd/service/main.go b/cmd/service/main.go index d3280c5..0e62136 100644 --- a/cmd/service/main.go +++ b/cmd/service/main.go @@ -1,12 +1,21 @@ package main import ( + "log" + "git.inkling.su/mrqiz/schedule-poll/internal/config" "git.inkling.su/mrqiz/schedule-poll/internal/schedule" + "git.inkling.su/mrqiz/schedule-poll/internal/telegram" "github.com/robfig/cron/v3" ) func main() { + err := telegram.GetMe() + + if err != nil { + log.Fatalln("Unable to connect to telegram", err) + } + c := cron.New(cron.WithSeconds()) c.AddFunc(config.AppConfig.CronPattern, schedule.PollSchedule) c.Run() diff --git a/internal/config/env.go b/internal/config/env.go index 0ffa313..d4560ca 100644 --- a/internal/config/env.go +++ b/internal/config/env.go @@ -8,8 +8,11 @@ import ( ) type config struct { - TelegramBotToken string - Schedule struct { + Telegram struct { + Token string + ChatId string + } + Schedule struct { BaseUrl string FacultyId string GroupId string @@ -32,6 +35,7 @@ func init() { AppConfig.Schedule.FacultyId = os.Getenv("SCHEDULE_FACULTY_ID") AppConfig.Schedule.GroupId = os.Getenv("SCHEDULE_GROUP_ID") AppConfig.Schedule.StartDate = os.Getenv("SCHEDULE_START_DATE") - AppConfig.TelegramBotToken = os.Getenv("SCHEDULE_TELEGRAM_TOKEN") + AppConfig.Telegram.Token = os.Getenv("SCHEDULE_TELEGRAM_TOKEN") + AppConfig.Telegram.ChatId = os.Getenv("SCHEDULE_TELEGRAM_CHAT_ID") AppConfig.CronPattern = os.Getenv("SCHEDULE_CRON_PATTERN") } diff --git a/internal/schedule/poll.go b/internal/schedule/poll.go index 5828ec8..317982c 100644 --- a/internal/schedule/poll.go +++ b/internal/schedule/poll.go @@ -6,6 +6,7 @@ import ( "os" "git.inkling.su/mrqiz/schedule-poll/internal/config" + "git.inkling.su/mrqiz/schedule-poll/internal/telegram" ) func PollSchedule() { @@ -39,6 +40,7 @@ func PollSchedule() { siteUrl) os.WriteFile(flagFilePath, []byte(msg), os.FileMode(0777)) + err = telegram.SendMessage(config.AppConfig.Telegram.ChatId, msg) log.Printf("Found %d days", len(week.Days)) } } diff --git a/internal/telegram/api.go b/internal/telegram/api.go new file mode 100644 index 0000000..379e20e --- /dev/null +++ b/internal/telegram/api.go @@ -0,0 +1,36 @@ +package telegram + +import ( + "fmt" + + "git.inkling.su/mrqiz/schedule-poll/internal/config" + "github.com/go-resty/resty/v2" +) + +var client = resty.New().SetBaseURL("https://api.telegram.org") + +func GetMe() error { + _, err := client.R(). + Get(fmt.Sprintf("/bot%s/getMe", config.AppConfig.Telegram.Token)) + + if err != nil { + return err + } + + return nil +} + +func SendMessage(chatId, message string) error { + _, err := client.R(). + SetQueryParams(map[string]string{ + "chat_id": chatId, + "text": message, + }). + Get(fmt.Sprintf("/bot%s/sendMessage", config.AppConfig.Telegram.Token)) + + if err != nil { + return err + } + + return nil +}