package telegram import ( "context" "log" "ticket-pimp/internal/domain" "ticket-pimp/internal/services" "ticket-pimp/telegram/handler" "github.com/mr-linch/go-tg" "github.com/mr-linch/go-tg/tgb" tickets "ticket-pimp/internal/storage/db/tickets" ) type TelegramOptions struct { TicketsRepo *tickets.Queries GitService *services.Git CloudService *services.Cloud Coda *services.Coda AppConfig *domain.Config } // runTgBot ... // ..function creates new Telegram BOT instance // ..throw env variables through bot's handlers // ..setup tg bot router; // and finally returns tgb.Poller func Run(ctx context.Context, opts TelegramOptions) error { log.Print("Start telegram bot init..") client := tg.New(opts.AppConfig.Telegram.Token) h := handler.NewHandler( opts.GitService, opts.CloudService, opts.Coda, opts.TicketsRepo, ) router := tgb.NewRouter(). Message(h.Init, tgb.Command("init")). Message(h.PingHandler, tgb.Command("ping")). Message(h.DevelopmentTaskHandler, tgb.TextHasPrefix("/new")). Message(h.NewRepoHandler, tgb.TextHasPrefix("/repo")). Message(h.NewFolderHandler, tgb.TextHasPrefix("/folder")). Message(h.FarmTaskHandler, tgb.TextHasPrefix("/task")) return tgb.NewPoller( router, client, ).Run(ctx) }