94 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"os/signal"
 | 
						|
	"syscall"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"git.gensokyo.cafe/kkyy/mycurrencynet"
 | 
						|
	"go.uber.org/zap"
 | 
						|
	tele "gopkg.in/telebot.v3"
 | 
						|
 | 
						|
	"git.gensokyo.cafe/kkyy/tgbot_misaka_5882f7/utils"
 | 
						|
)
 | 
						|
 | 
						|
var logger *zap.SugaredLogger
 | 
						|
 | 
						|
func initLogger() {
 | 
						|
	l, err := zap.NewProduction()
 | 
						|
	if err != nil {
 | 
						|
		panic(err)
 | 
						|
	}
 | 
						|
 | 
						|
	logger = l.Sugar()
 | 
						|
}
 | 
						|
 | 
						|
var exchangeRates = mycurrencynet.New()
 | 
						|
 | 
						|
func initExchangeRates() {
 | 
						|
	if err := exchangeRates.Update(); err != nil {
 | 
						|
		logger.Panicw("Failed to update exchange rates", "err", err)
 | 
						|
	}
 | 
						|
	logger.Info("Exchange rates updated")
 | 
						|
 | 
						|
	go exchangeRates.UpdateEvery(
 | 
						|
		time.Hour,
 | 
						|
		func(err error) {
 | 
						|
			logger.Errorw("Failed to update exchange rates", "err", err)
 | 
						|
		},
 | 
						|
		func() {
 | 
						|
			logger.Info("Exchange rates updated")
 | 
						|
		},
 | 
						|
	)
 | 
						|
}
 | 
						|
 | 
						|
func runBot() {
 | 
						|
	logger.Info("Bot initializing...")
 | 
						|
	bot, err := initBot()
 | 
						|
	if err != nil {
 | 
						|
		logger.Fatalw("Failed to initialize bot", "err", err)
 | 
						|
	}
 | 
						|
 | 
						|
	// Announce commands
 | 
						|
	if config.TGAnnounceCommands {
 | 
						|
		logger.Info("Announcing commands...")
 | 
						|
 | 
						|
		if err = bot.SetCommands([]tele.Command{
 | 
						|
			{Text: "traffic", Description: "Show traffic usage."},
 | 
						|
			{Text: "dig", Description: "Diggy diggy dig."},
 | 
						|
			{Text: "year_progress", Description: "Time doesn't wait."},
 | 
						|
			{Text: "xr", Description: "Currency exchange rates"},
 | 
						|
		}); err != nil {
 | 
						|
			logger.Fatalw("Failed to announce commands", "err", err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	botFinCh := utils.WaitFor(bot.Start)
 | 
						|
	logger.Infow("Bot started", "username", bot.Me.Username)
 | 
						|
 | 
						|
	go initExchangeRates()
 | 
						|
 | 
						|
	// listen for shutdown signal
 | 
						|
	sigCh := make(chan os.Signal, 1)
 | 
						|
	signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
 | 
						|
 | 
						|
	select {
 | 
						|
	case sig := <-sigCh:
 | 
						|
		logger.Infow("Received signal", "signal", sig)
 | 
						|
		logger.Info("Bot shutdown...")
 | 
						|
		bot.Stop()
 | 
						|
	case <-botFinCh:
 | 
						|
		logger.Warn("Bot terminated")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	initLogger()
 | 
						|
	if err := LoadCfg(); err != nil {
 | 
						|
		logger.Fatalw("Failed to load config", "err", err)
 | 
						|
	}
 | 
						|
 | 
						|
	runBot()
 | 
						|
}
 |