package familyHub import ( "FamilyHub/src/config" "FamilyHub/src/utils" "context" "fmt" "io" "log" "net/http" "strconv" "strings" "time" ) func NewBotClient(config config.Config) (*HTTPClient, error) { return &HTTPClient{ config: config, client: &http.Client{ Timeout: 60 * time.Second, }, }, nil } func (c *HTTPClient) SendMessage(ctx context.Context, chatId int64, message string) error { url := c.config.TelegramApi + "/bot" + c.config.BotToken + "/sendMessage?chat_id=" + strconv.FormatInt(chatId, 10) + "&text=" + message req, err := http.NewRequestWithContext( ctx, http.MethodGet, url, nil, ) if err != nil { return err } logURL := strings.ReplaceAll(req.URL.String(), c.config.BotToken, "***") log.Printf( "external request: service=telegram_bot.send_message method=%s url=%s body=%q", http.MethodGet, logURL, utils.TruncateForLog(fmt.Sprintf("chat_id=%d&text=%s", chatId, message), utils.DefaultLogValueLimit), ) resp, err := c.client.Do(req) if err != nil { log.Printf("external response: service=telegram_bot.send_message method=%s url=%s err=%v", http.MethodGet, logURL, err) return err } defer resp.Body.Close() responseBody, readErr := io.ReadAll(resp.Body) if readErr != nil { log.Printf("external response: service=telegram_bot.send_message method=%s url=%s status=%d read_err=%v", http.MethodGet, logURL, resp.StatusCode, readErr) return readErr } log.Printf( "external response: service=telegram_bot.send_message method=%s url=%s status=%d body=%q", http.MethodGet, logURL, resp.StatusCode, utils.TruncateForLog(string(responseBody), utils.DefaultLogValueLimit), ) return nil }