diff options
Diffstat (limited to 'telebot/telebot.go')
-rw-r--r-- | telebot/telebot.go | 83 |
1 files changed, 69 insertions, 14 deletions
diff --git a/telebot/telebot.go b/telebot/telebot.go index 0676ce9..d452519 100644 --- a/telebot/telebot.go +++ b/telebot/telebot.go @@ -5,57 +5,108 @@ import ( "flag" "fmt" "net" + "net/http" "os" "strconv" + "time" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" "github.com/rs/zerolog/log" pb "github.com/terminaldweller/grpc/telebot/v1" + "golang.org/x/net/proxy" "google.golang.org/grpc" ) -var ( - flagPort = flag.String("port", "8000", "determined the port the sercice runs on") - - // FIXME-the client should provide the channel ID - botChannelID = flag.Int64("botchannelid", 146328407, "determines the channel id the telgram bot should send messages to") -) +// FIXME-the client should provide the channel ID. +var botChannelID = flag.Int64( + "botchannelid", + 146328407, //nolint: gomnd + "determines the channel id the telgram bot should send messages to") const ( - TELEGRAM_BOT_TOKEN_ENV_VAR = "TELEGRAM_BOT_TOKEN" - SERVER_DEPLOYMENT_TYPE = "SERVER_DEPLOYMENT_TYPE" + telegramBotTokenEnvVar = "TELEGRAM_BOT_TOKEN" //nolint: gosec + httpClientTimeout = 5 ) type server struct { pb.UnimplementedNotificationServiceServer } +func GetProxiedClient() (*http.Client, error) { + proxyURL := os.Getenv("ALL_PROXY") + if proxyURL == "" { + proxyURL = os.Getenv("HTTPS_PROXY") + } + + dialer, err := proxy.SOCKS5("tcp", proxyURL, nil, proxy.Direct) + if err != nil { + return nil, fmt.Errorf("[GetProxiedClient] : %w", err) + } + + dialContext := func(ctx context.Context, network, address string) (net.Conn, error) { + netConn, err := dialer.Dial(network, address) + if err == nil { + return netConn, nil + } + + return netConn, fmt.Errorf("[dialContext] : %w", err) + } + + transport := &http.Transport{ + DialContext: dialContext, + DisableKeepAlives: true, + } + client := &http.Client{ + Transport: transport, + Timeout: httpClientTimeout * time.Second, + CheckRedirect: nil, + Jar: nil, + } + + return client, nil +} + func getTGBot() *tgbotapi.BotAPI { - token := os.Getenv(TELEGRAM_BOT_TOKEN_ENV_VAR) - bot, err := tgbotapi.NewBotAPI(token[1 : len(token)-1]) + token := os.Getenv(telegramBotTokenEnvVar) + + client, err := GetProxiedClient() + if err != nil { + log.Fatal().Err(err) + } + + bot, err := tgbotapi.NewBotAPIWithClient(token[1:len(token)-1], client) if err != nil { - log.Error().Err(err) + log.Fatal().Err(err) } + return bot } func sendMessage(bot *tgbotapi.BotAPI, msgText string, channelID int64) error { msg := tgbotapi.NewMessage(channelID, msgText) - bot.Send(msg) - return nil + _, err := bot.Send(msg) + + return err } -func (s *server) Notify(ctx context.Context, NotificationRequest *pb.NotificationRequest) (*pb.NotificationResponse, error) { +func (s *server) Notify( + ctx context.Context, + NotificationRequest *pb.NotificationRequest, +) (*pb.NotificationResponse, error) { var err error + tgbotapi := getTGBot() + if NotificationRequest.ChannelId == 0 { err = sendMessage(tgbotapi, NotificationRequest.NotificationText, *botChannelID) } else { err = sendMessage(tgbotapi, NotificationRequest.NotificationText, NotificationRequest.ChannelId) } + if err != nil { return &pb.NotificationResponse{Error: err.Error(), IsOK: false}, err } + return &pb.NotificationResponse{Error: "", IsOK: true}, nil } @@ -69,13 +120,17 @@ func startServer(port uint16) { grpcServer := grpc.NewServer(opts...) pb.RegisterNotificationServiceServer(grpcServer, &server{}) + if err := grpcServer.Serve(listener); err != nil { log.Fatal().Err(err) } } func main() { + flagPort := flag.String("port", "8000", "determines the port the service runs on") flag.Parse() + port, _ := strconv.Atoi(*flagPort) + startServer(uint16(port)) } |