1
0
mirror of https://github.com/ManyakRus/telegram_loki.git synced 2025-12-01 11:16:30 +02:00
Files
telegram_loki/internal/telegram/telegram.go

158 lines
3.9 KiB
Go
Raw Normal View History

2024-11-13 16:45:10 +03:00
package telegram
import (
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/log"
2024-11-15 11:27:57 +03:00
"github.com/ManyakRus/starter/micro"
2024-11-13 16:45:10 +03:00
"github.com/ManyakRus/starter/stopapp"
"github.com/ManyakRus/starter/telegram_bot"
"github.com/ManyakRus/telegram_loki/internal/config"
2024-11-15 11:27:57 +03:00
"github.com/ManyakRus/telegram_loki/internal/constants"
2024-11-13 16:45:10 +03:00
"github.com/ManyakRus/telegram_loki/internal/load_json"
"github.com/ManyakRus/telegram_loki/internal/types"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
2024-11-21 11:19:29 +03:00
"html"
2024-11-13 16:45:10 +03:00
"strings"
)
// SendMessage - отправляет сообщения в Telegram, в общий чат, многим разрабочикам
// ChatName - в формате "@Имя1,@Имя2"
2024-11-15 11:27:57 +03:00
func SendMessage(Message1 types.Message) error {
2024-11-13 16:45:10 +03:00
var err error
//проверка отмены контекста
err1 := contextmain.GetContext().Err()
if err1 != nil {
return err1
}
2024-11-14 14:56:59 +03:00
//
2024-11-15 11:27:57 +03:00
ChatName := strings.TrimSpace(Message1.DeveloperName)
//TextDate := Message1.Date.String()
TextDate := Message1.Date.Format(constants.Layout)
TextDate2 := micro.SubstringLeft(TextDate, 10)
if strings.Contains(Message1.Text, TextDate2) == true {
TextDate = ""
} else {
TextDate = "\n" + TextDate
}
if Message1.Date.IsZero() == true {
TextDate = ""
}
DeveloperName := Message1.DeveloperName
2024-11-21 11:19:29 +03:00
//экранируем запрещённые символы
2024-11-15 11:27:57 +03:00
Text := Message1.Text
2024-11-21 11:19:29 +03:00
Text = html.EscapeString(Text)
2024-11-15 11:27:57 +03:00
2024-11-21 11:19:29 +03:00
//
2024-11-15 11:27:57 +03:00
TextServiceName := Message1.ServiceName
if Message1.LokiURL != "" {
TextServiceName = `<a href="` + Message1.LokiURL + `">` + Message1.ServiceName + "</a>"
}
2024-11-15 12:04:47 +03:00
//
if Message1.IsSameLastText == true {
DeveloperName = ""
}
2024-11-15 11:27:57 +03:00
Text = TextServiceName + " " + DeveloperName + " " + TextDate + "\n" + Text
Text = micro.SubstringLeft(Text, 4096)
2024-11-14 14:56:59 +03:00
2024-11-13 16:45:10 +03:00
//отправка в общую группу
if config.Settings.TELEGRAM_CHAT_NAME != "" {
_, err = telegram_bot.SendMessage(config.Settings.TELEGRAM_CHAT_NAME, Text)
if err != nil {
log.Error("SendMessage() error: ", err)
return err
}
}
//отправка каждому программисту
if ChatName == "" {
return err
}
if ChatName == config.Settings.TELEGRAM_CHAT_NAME {
return err
}
2024-11-21 11:19:29 +03:00
//экранируем запрещённые символы
2024-11-15 11:27:57 +03:00
Text = Message1.Text
2024-11-21 11:19:29 +03:00
Text = html.EscapeString(Text)
//
2024-11-15 11:27:57 +03:00
if TextServiceName != "" {
Text = TextServiceName + "\n" + Text
}
2024-11-13 16:45:10 +03:00
//
MassChatNames := strings.Split(ChatName, ",")
for _, ChatName1 := range MassChatNames {
//проверка отмены контекста
err1 := contextmain.GetContext().Err()
if err1 != nil {
return err1
}
2024-11-14 14:56:59 +03:00
ChatName1 = strings.TrimSpace(ChatName1)
2024-11-13 16:45:10 +03:00
//найдём ИД по имени в телеграм
ID, ok := types.MapTelegramUsers[ChatName1]
if ok == false {
continue
}
//отправка
_, err = telegram_bot.SendMessageChatID(ID, Text)
if err != nil {
2024-11-22 09:04:22 +03:00
log.Warn("SendMessage() warning: ", err)
2024-11-13 16:45:10 +03:00
continue
//return err
}
}
return err
}
// StartReadMessages - запускает чтение сообщений из Телеграм
func StartReadMessages() {
stopapp.GetWaitGroup_Main().Add(1)
go StartReadMessages_go()
}
// StartReadMessages_go - запускает чтение сообщений из Телеграм, внутри горутины
func StartReadMessages_go() {
defer stopapp.GetWaitGroup_Main().Done()
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates := telegram_bot.Client.GetUpdatesChan(u)
for update1 := range updates {
if update1.Message == nil { // If we got a message
continue
}
//
ChatID := update1.Message.Chat.ID
Name := update1.Message.Chat.UserName
//
AddMapTelegramUsers(Name, ChatID)
}
}
// AddMapTelegramUsers - добавляет пользователя в map
func AddMapTelegramUsers(Name string, ChatID int64) {
_, ok := types.MapTelegramUsers[Name]
if ok == false {
//добавим в карту
types.MapTelegramUsers["@"+Name] = ChatID
//
load_json.SaveMapTelegramUsers()
}
}