aboutsummaryrefslogtreecommitdiffstats
path: root/telebot/telebot.go
diff options
context:
space:
mode:
Diffstat (limited to 'telebot/telebot.go')
-rw-r--r--telebot/telebot.go81
1 files changed, 81 insertions, 0 deletions
diff --git a/telebot/telebot.go b/telebot/telebot.go
new file mode 100644
index 0000000..0676ce9
--- /dev/null
+++ b/telebot/telebot.go
@@ -0,0 +1,81 @@
+package main
+
+import (
+ "context"
+ "flag"
+ "fmt"
+ "net"
+ "os"
+ "strconv"
+
+ tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
+ "github.com/rs/zerolog/log"
+ pb "github.com/terminaldweller/grpc/telebot/v1"
+ "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")
+)
+
+const (
+ TELEGRAM_BOT_TOKEN_ENV_VAR = "TELEGRAM_BOT_TOKEN"
+ SERVER_DEPLOYMENT_TYPE = "SERVER_DEPLOYMENT_TYPE"
+)
+
+type server struct {
+ pb.UnimplementedNotificationServiceServer
+}
+
+func getTGBot() *tgbotapi.BotAPI {
+ token := os.Getenv(TELEGRAM_BOT_TOKEN_ENV_VAR)
+ bot, err := tgbotapi.NewBotAPI(token[1 : len(token)-1])
+ if err != nil {
+ log.Error().Err(err)
+ }
+ return bot
+}
+
+func sendMessage(bot *tgbotapi.BotAPI, msgText string, channelID int64) error {
+ msg := tgbotapi.NewMessage(channelID, msgText)
+ bot.Send(msg)
+ return nil
+}
+
+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
+}
+
+func startServer(port uint16) {
+ listener, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port))
+ if err != nil {
+ log.Fatal().Err(err)
+ }
+
+ var opts []grpc.ServerOption
+
+ grpcServer := grpc.NewServer(opts...)
+ pb.RegisterNotificationServiceServer(grpcServer, &server{})
+ if err := grpcServer.Serve(listener); err != nil {
+ log.Fatal().Err(err)
+ }
+}
+
+func main() {
+ flag.Parse()
+ port, _ := strconv.Atoi(*flagPort)
+ startServer(uint16(port))
+}