aboutsummaryrefslogtreecommitdiffstats
path: root/telebot/telebot.go
diff options
context:
space:
mode:
Diffstat (limited to 'telebot/telebot.go')
-rw-r--r--telebot/telebot.go83
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))
}