ticket-pimp/telegram/telegram.go

54 lines
1.2 KiB
Go

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)
}