From 1b6d25702fd86e2cec9eb4aeff1ee803a5e40547 Mon Sep 17 00:00:00 2001 From: Taras Date: Sat, 14 Dec 2019 16:47:44 +0300 Subject: [PATCH] Add Environment Variables --- .gitignore | 3 +-- server.go | 9 ++------- show.go | 2 +- store/storage.go | 9 ++++----- tbot.go | 28 +++++++++++++++++++++++++++- 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 78338cc..98e6ef6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/my.db -/telegram_token +*.db diff --git a/server.go b/server.go index 07c2df5..ba79ac5 100644 --- a/server.go +++ b/server.go @@ -4,7 +4,6 @@ import ( "fmt" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" "github.com/taras-by/tbot/store" - "io/ioutil" "log" "regexp" "strconv" @@ -33,17 +32,13 @@ var ( ) func server() (err error) { - token, err := ioutil.ReadFile(telegramTokenFile) - if err != nil { - log.Panic(err.Error()) - } - bot, err = tgbotapi.NewBotAPI(string(token)) + bot, err = tgbotapi.NewBotAPI(Opts.TelegramToken) if err != nil { log.Panic(err.Error()) } - storage, err = store.NewStorage() + storage, err = store.NewStorage(Opts.StorePath) if err != nil { log.Fatal(err) } diff --git a/show.go b/show.go index 544c095..c583f0f 100644 --- a/show.go +++ b/show.go @@ -8,7 +8,7 @@ import ( func show() (err error) { - storage, err := store.NewStorage() + storage, err := store.NewStorage(Opts.StorePath) if err != nil { log.Fatal(err) } diff --git a/store/storage.go b/store/storage.go index bde2522..282b097 100644 --- a/store/storage.go +++ b/store/storage.go @@ -12,21 +12,20 @@ import ( const ( chatsBucketName = "chats" - DBPath = "my.db" ) type Storage struct { db *bolt.DB } -func NewStorage() (*Storage, error) { +func NewStorage(storePath string) (*Storage, error) { - bdb, err := bolt.Open(DBPath, 0600, nil) + bdb, err := bolt.Open(storePath, 0600, nil) if err != nil { - return nil, errors.Wrapf(err, "failed to make boltdb for %s", DBPath) + return nil, errors.Wrapf(err, "failed to make boltdb for %s", storePath) } - log.Printf("Storage opened") + log.Printf("Storage opened in %s", storePath) bdb.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucket([]byte(chatsBucketName)) diff --git a/tbot.go b/tbot.go index d2c08ae..a265af9 100644 --- a/tbot.go +++ b/tbot.go @@ -5,16 +5,30 @@ import ( "log" "os" ) + type command struct { fs *flag.FlagSet fn func(args []string) error } +type Options struct { + TelegramToken string + StorePath string +} + +var ( + Opts = Options{} +) + +const ( + defaultStorePath = "./bolt.db" +) + func main() { commands := map[string]command{ "server": serverCmd(), - "show": showCmd(), + "show": showCmd(), } fs := flag.NewFlagSet("tbot", flag.ExitOnError) @@ -27,6 +41,10 @@ func main() { os.Exit(1) } + fs.StringVar(&Opts.TelegramToken, "telegram-token", os.Getenv("TELEGRAM_TOKEN"), "Token for Telegram") + fs.StringVar(&Opts.StorePath, "store-path", getEnv("STORE_PATH", defaultStorePath), "Path for storage") + fs.Parse(os.Args[2:]) + if cmd, ok := commands[args[0]]; !ok { log.Fatalf("Unknown command: %s", args[0]) } else if err := cmd.fn(args[1:]); err != nil { @@ -45,3 +63,11 @@ func serverCmd() command { return server() }} } + +func getEnv(key string, value string) string { + v := os.Getenv(key) + if v == "" { + return value + } + return v +}