From 735d8940164f786b9b3b10cde1a2785389bc6c72 Mon Sep 17 00:00:00 2001 From: celishere Date: Fri, 29 Sep 2023 23:47:36 +0300 Subject: [PATCH 1/2] added telegram support --- README.md | 2 +- pkg/chat/chat_factory.go | 2 + pkg/chat/tg.go | 109 +++++++++++++++++++++++++++++++++++++++ pkg/chat/vk.go | 4 +- 4 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 pkg/chat/tg.go diff --git a/README.md b/README.md index 369ffc2..3a0d0f0 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ data | дополнительные данные Также могут быть **дополнительные** данные (пишутся в поле "data") в зависимости от используемого метода. -Для метода **vk**: +Для метода **vk** и **tg**: Поле | Описание ------------ | ------------- diff --git a/pkg/chat/chat_factory.go b/pkg/chat/chat_factory.go index 3e8ab51..7a50e9f 100644 --- a/pkg/chat/chat_factory.go +++ b/pkg/chat/chat_factory.go @@ -12,6 +12,8 @@ func NewChat(config *config.ChatConfig) (Chat, error) { switch method { case "vk": cht = &Vk{} + case "tg": + cht = &Tg{} default: return nil, errUnknownMethod(method) } diff --git a/pkg/chat/tg.go b/pkg/chat/tg.go new file mode 100644 index 0000000..a8dcdce --- /dev/null +++ b/pkg/chat/tg.go @@ -0,0 +1,109 @@ +package chat + +import ( + "fmt" + "github.com/NolikTop/watcher/pkg/server" + "io/ioutil" + "net/http" + "strconv" +) + +type Tg struct { + name string + + client *http.Client + + chatId int + accessToken string +} + +func (v *Tg) Init(name string, data map[string]interface{}) error { + v.name = name + + if chatId, ok := data["chat_id"]; ok { + v.chatId = int(chatId.(float64)) // сразу в int не дает кастить =((( + } else { + return errNoFieldInData("chat_id") + } + + if accessToken, ok := data["access_token"]; ok { + v.accessToken = accessToken.(string) + } else { + return errNoFieldInData("access_token") + } + + v.client = &http.Client{} + + return nil +} + +func (v *Tg) GetName() string { + return v.name +} + +func (v *Tg) NotifyServerWentDown(server server.Server, err error) error { + message := fmt.Sprintf( + `Сервер %s упал. +Причина: %s +Призываю %s`, + server.GetFormattedName(), err.Error(), server.GetMentionsText(), + ) + + return v.sendMessage(message) +} + +func (v *Tg) NotifyServerStillIsDown(server server.Server) error { + message := fmt.Sprintf( + `Сервер %s все еще лежит. Прошло уже %d сек. +Призываю %s`, + server.GetFormattedName(), server.GetOffTime(), server.GetMentionsText(), + ) + + return v.sendMessage(message) +} + +func (v *Tg) NotifyServerIsUp(server server.Server) error { + message := fmt.Sprintf( + `Сервер %s встал. +Призываю %s`, + server.GetFormattedName(), server.GetMentionsText(), + ) + + return v.sendMessage(message) +} + +func (v *Tg) sendMessage(message string) error { + request, err := http.NewRequest("POST", fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage", v.accessToken), nil) + if err != nil { + return err + } + + query := request.URL.Query() + query.Add("chat_id", strconv.Itoa(v.chatId)) + query.Add("text", message) + request.URL.RawQuery = query.Encode() + + response, err := v.client.Do(request) + if err != nil { + return err + } + + defer response.Body.Close() + + body, err := ioutil.ReadAll(response.Body) + if err != nil { + return err + } + + err = v.getErrorFromResponse(body) + if err != nil { + return err + } + + return nil +} + +func (v *Tg) getErrorFromResponse(responseBody []byte) error { + //todo + return nil +} diff --git a/pkg/chat/vk.go b/pkg/chat/vk.go index 396a64e..79c069b 100644 --- a/pkg/chat/vk.go +++ b/pkg/chat/vk.go @@ -98,7 +98,7 @@ func (v *Vk) sendMessage(message string) error { return err } - err = getErrorFromResponse(body) + err = v.getErrorFromResponse(body) if err != nil { return err } @@ -106,7 +106,7 @@ func (v *Vk) sendMessage(message string) error { return nil } -func getErrorFromResponse(responseBody []byte) error { +func (v *Vk) getErrorFromResponse(responseBody []byte) error { //todo return nil } From 879607efbe6572ae96e72325c21c149e44ad3626 Mon Sep 17 00:00:00 2001 From: celishere Date: Fri, 29 Sep 2023 23:48:54 +0300 Subject: [PATCH 2/2] ioutil is now deprecated --- pkg/chat/tg.go | 4 ++-- pkg/chat/vk.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/chat/tg.go b/pkg/chat/tg.go index a8dcdce..044b857 100644 --- a/pkg/chat/tg.go +++ b/pkg/chat/tg.go @@ -3,7 +3,7 @@ package chat import ( "fmt" "github.com/NolikTop/watcher/pkg/server" - "io/ioutil" + "io" "net/http" "strconv" ) @@ -90,7 +90,7 @@ func (v *Tg) sendMessage(message string) error { defer response.Body.Close() - body, err := ioutil.ReadAll(response.Body) + body, err := io.ReadAll(response.Body) if err != nil { return err } diff --git a/pkg/chat/vk.go b/pkg/chat/vk.go index 79c069b..fc53a89 100644 --- a/pkg/chat/vk.go +++ b/pkg/chat/vk.go @@ -3,7 +3,7 @@ package chat import ( "fmt" "github.com/NolikTop/watcher/pkg/server" - "io/ioutil" + "io" "net/http" "strconv" ) @@ -93,7 +93,7 @@ func (v *Vk) sendMessage(message string) error { defer response.Body.Close() - body, err := ioutil.ReadAll(response.Body) + body, err := io.ReadAll(response.Body) if err != nil { return err }