first commit
This commit is contained in:
120
context.go
Normal file
120
context.go
Normal file
@ -0,0 +1,120 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/sirupsen/logrus"
|
||||
"os"
|
||||
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
|
||||
)
|
||||
|
||||
type contextKey uint8
|
||||
|
||||
const (
|
||||
_ contextKey = iota
|
||||
ctxKeyLogger
|
||||
ctxKeyBotApi
|
||||
ctxKeyConfig
|
||||
ctxKeyCommandHandler
|
||||
ctxKeyMessageCleaner
|
||||
ctxKeyDataBase
|
||||
ctxKeyPlayersBoard
|
||||
)
|
||||
|
||||
func createLogger(debug bool) *logrus.Logger {
|
||||
logLevel := logrus.InfoLevel
|
||||
if debug {
|
||||
logLevel = logrus.DebugLevel
|
||||
}
|
||||
|
||||
return &logrus.Logger{
|
||||
Out: os.Stderr,
|
||||
Formatter: &logrus.TextFormatter{
|
||||
FullTimestamp: true,
|
||||
TimestampFormat: "02 Jan 06 15:04",
|
||||
//PadLevelText: true,
|
||||
QuoteEmptyFields: true,
|
||||
},
|
||||
Hooks: make(logrus.LevelHooks),
|
||||
Level: logLevel,
|
||||
ExitFunc: os.Exit,
|
||||
ReportCaller: false,
|
||||
}
|
||||
}
|
||||
|
||||
func createContext(config *Config, bot *tgbotapi.BotAPI, mc *messageCleaner, ch *commandHandler, db *dbLayer, pb *playersBoard) (context.Context, func()) {
|
||||
ctx, cancelFunc := context.WithCancel(context.Background())
|
||||
|
||||
ctx = context.WithValue(ctx, ctxKeyLogger, createLogger(true))
|
||||
ctx = context.WithValue(ctx, ctxKeyBotApi, bot)
|
||||
ctx = context.WithValue(ctx, ctxKeyConfig, config)
|
||||
ctx = context.WithValue(ctx, ctxKeyMessageCleaner, mc)
|
||||
ctx = context.WithValue(ctx, ctxKeyCommandHandler, ch)
|
||||
ctx = context.WithValue(ctx, ctxKeyDataBase, db)
|
||||
ctx = context.WithValue(ctx, ctxKeyPlayersBoard, pb)
|
||||
|
||||
return ctx, cancelFunc
|
||||
}
|
||||
|
||||
func getLogger(ctx context.Context) *logrus.Logger {
|
||||
v := ctx.Value(ctxKeyLogger)
|
||||
if logger, ok := v.(*logrus.Logger); ok {
|
||||
return logger
|
||||
}
|
||||
|
||||
panic("Failed to get logger from ctx")
|
||||
}
|
||||
|
||||
func getBotApi(ctx context.Context) *tgbotapi.BotAPI {
|
||||
v := ctx.Value(ctxKeyBotApi)
|
||||
if botApi, ok := v.(*tgbotapi.BotAPI); ok {
|
||||
return botApi
|
||||
}
|
||||
|
||||
panic("Failed to get bot api from ctx")
|
||||
}
|
||||
|
||||
func getConfig(ctx context.Context) *Config {
|
||||
v := ctx.Value(ctxKeyConfig)
|
||||
if config, ok := v.(*Config); ok {
|
||||
return config
|
||||
}
|
||||
|
||||
panic("Failed to get config from ctx")
|
||||
}
|
||||
|
||||
func getMessageCleaner(ctx context.Context) *messageCleaner {
|
||||
v := ctx.Value(ctxKeyMessageCleaner)
|
||||
if mc, ok := v.(*messageCleaner); ok {
|
||||
return mc
|
||||
}
|
||||
|
||||
panic("Failed to get message cleaner from ctx")
|
||||
}
|
||||
|
||||
func getCommandHandler(ctx context.Context) *commandHandler {
|
||||
v := ctx.Value(ctxKeyCommandHandler)
|
||||
if ch, ok := v.(*commandHandler); ok {
|
||||
return ch
|
||||
}
|
||||
|
||||
panic("Failed to get command handler from ctx")
|
||||
}
|
||||
|
||||
func getDB(ctx context.Context) *dbLayer {
|
||||
v := ctx.Value(ctxKeyDataBase)
|
||||
if db, ok := v.(*dbLayer); ok {
|
||||
return db
|
||||
}
|
||||
|
||||
panic("Failed to get db from ctx")
|
||||
}
|
||||
|
||||
func getDPlayersBoard(ctx context.Context) *playersBoard {
|
||||
v := ctx.Value(ctxKeyPlayersBoard)
|
||||
if pb, ok := v.(*playersBoard); ok {
|
||||
return pb
|
||||
}
|
||||
|
||||
panic("Failed to get players board from ctx")
|
||||
}
|
||||
Reference in New Issue
Block a user