65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
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
|
|
}
|