telegram-to-discord/main.go
2026-03-05 16:20:47 +03:00

88 lines
1.7 KiB
Go

package main
import (
"context"
log "github.com/sirupsen/logrus"
"net"
"os"
"os/signal"
"syscall"
"tg-disc-bot/config"
"tg-disc-bot/discordBot"
"tg-disc-bot/dto"
"tg-disc-bot/router"
"tg-disc-bot/tgBot"
"time"
)
func main() {
c := config.NewConfig()
config.LogSetup(c.AppConf.LogLvl)
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
shutdown := make(chan os.Signal, 1)
signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM)
tgb, err := tgBot.NewTgBot(ctx, c.TgConf)
if err != nil {
log.Fatal(err)
}
dsb, err := discordBot.NewDiscordBot(ctx, c.DsConf)
if err != nil {
log.Fatal(err)
}
fromDiscord := make(chan dto.DiscordDTO, 100)
fromTelegram := make(chan dto.TelegramDTO, 100)
tgMsgs := tgb.Start(fromDiscord)
dsMsgs := dsb.Start(fromTelegram)
r := router.NewHandler(router.Deps{
Addr: net.JoinHostPort(c.HttpConf.Host, c.HttpConf.Port),
GinMode: c.HttpConf.GinMode,
})
log.Info("App is now running. Press CTRL-C to exit.")
errChan := make(chan error, 10)
go func() {
if err = r.Run(); err != nil {
errChan <- err
}
}()
for {
select {
case sig := <-shutdown:
{
shutdownCtx, shutdownCancel := context.WithTimeout(ctx, 15*time.Second)
if err = r.Shutdown(shutdownCtx); err != nil {
log.WithError(err).Error("Error shutting down router")
}
log.WithField("type", sig).Info("terminating, close app")
shutdownCancel()
os.Exit(0)
}
case <-ctx.Done():
{
log.Info("terminating, close app")
os.Exit(0)
}
case tgMsg := <-tgMsgs:
{
fromTelegram <- tgMsg
}
case dsMsg := <-dsMsgs:
{
fromDiscord <- dsMsg
}
}
}
}