From 2c59049efa0365c105bd161860a4a5327007396f Mon Sep 17 00:00:00 2001 From: Ettore Dreucci Date: Tue, 12 Jun 2018 02:25:09 +0200 Subject: [PATCH] Initial rewriting Signed-off-by: Ettore Dreucci --- barandaBot.go | 25 +++++++++++++++++++++++++ flags.go_old | 44 ++++++++++++++++++++++++++++++++++++++++++++ redisAPI.go | 20 ++++++++++++++++++++ sys.go | 34 ++++++++++++++++++++++++++++++++++ telegramAPI.go | 29 +++++++++++++++++++++++++++++ 5 files changed, 152 insertions(+) create mode 100644 barandaBot.go create mode 100644 flags.go_old create mode 100644 redisAPI.go create mode 100644 sys.go create mode 100644 telegramAPI.go diff --git a/barandaBot.go b/barandaBot.go new file mode 100644 index 0000000..f545843 --- /dev/null +++ b/barandaBot.go @@ -0,0 +1,25 @@ +package main + +import "log" + +func main() { + + cmdFlags, err := getFlags() + if err != nil { + log.Fatal("Error in parsing command line flags. Abort!") + } + + redisClient, err := redisInit(cmdFlags.redisAddr, cmdFlags.redisPwd, cmdFlags.redisDB) + defer redisClient.Close() + + bots, errors := botInit() + for _, bot := range bots { + bot.Stop() + } + + /*b.Handle("/hello", func(m *tb.Message) { + b.Send(m.Sender, "hello world") + }) + + b.Start()*/ +} diff --git a/flags.go_old b/flags.go_old new file mode 100644 index 0000000..31cf7d8 --- /dev/null +++ b/flags.go_old @@ -0,0 +1,44 @@ +package main + +import ( + "flag" + "fmt" + "strconv" +) + +type intSlice []int +type stringSlice []string + +func (i *intSlice) String() string { + return fmt.Sprintf("%d", *i) +} + +func (i *stringSlice) String() string { + return fmt.Sprint(*i) +} + +func (i *intSlice) Set(value string) error { + tmp, err := strconv.Atoi(value) + if err != nil { + *i = append(*i, -1) + } else { + *i = append(*i, tmp) + } + return nil +} + +func (i *stringSlice) Set(value string) error { + *i = append(*i, value) + return nil +} + +func initFlags() (stringSlice, intSlice) { + var tokens stringSlice + var timeouts intSlice + + flag.Var(&tokens, "t", "Bot token") + flag.Var(&timeouts, "timeout", "Poller timeout in seconds") + flag.Parse() + + return tokens, timeouts +} diff --git a/redisAPI.go b/redisAPI.go new file mode 100644 index 0000000..a8fc8dc --- /dev/null +++ b/redisAPI.go @@ -0,0 +1,20 @@ +package main + +import ( + "log" + + "github.com/go-redis/redis" +) + +func redisInit(addr string, pwd string, db int) (*redis.Client, error) { + redisClient := redis.NewClient(&redis.Options{ + Addr: addr, + Password: pwd, + DB: db, + }) + err := redisClient.Ping().Err() + if err != nil { + log.Panicf("Error in connecting to redis instance: %v", err) + } + return redisClient, nil +} diff --git a/sys.go b/sys.go new file mode 100644 index 0000000..5b1f111 --- /dev/null +++ b/sys.go @@ -0,0 +1,34 @@ +package main + +import "flag" + +type flags struct { + redisAddr string + redisPwd string + redisDB int +} + +func getFlags() (flags, error) { + + var cmdFlags flags + + const ( + defaultAddr = "127.0.0.1:6379" + addrUsage = "The address of the redis instance" + defaultPwd = "" + pwdUsage = "The password of the redis instance" + defaultDB = 0 + dbUsage = "The database to be selected after connecting to redis instance" + ) + + flag.StringVar(&(cmdFlags.redisAddr), "redisAddr", defaultAddr, addrUsage) + flag.StringVar(&(cmdFlags.redisAddr), "a", defaultAddr, addrUsage+("shorthand")) + flag.StringVar(&(cmdFlags.redisPwd), "redisPwd", defaultPwd, pwdUsage) + flag.StringVar(&(cmdFlags.redisPwd), "p", defaultPwd, pwdUsage+("shorthand")) + flag.IntVar(&(cmdFlags.redisDB), "redisDB", defaultDB, dbUsage) + flag.IntVar(&(cmdFlags.redisDB), "d", defaultDB, dbUsage+("shorthand")) + + flag.Parse() + + return cmdFlags, nil +} diff --git a/telegramAPI.go b/telegramAPI.go new file mode 100644 index 0000000..3ce93f6 --- /dev/null +++ b/telegramAPI.go @@ -0,0 +1,29 @@ +package main + +import ( + "time" + + tb "gopkg.in/tucnak/telebot.v2" +) + +func botInit() ([]*tb.Bot, []error) { + var bots []*tb.Bot + var errors []error + for i, token := range tokens { + var timeout int + if i < len(timeouts) { + timeout = timeouts[i] + } else { + timeout = 10 + } + tmpBot, tmpErr := tb.NewBot(tb.Settings{ + Token: token, + Poller: &tb.LongPoller{Timeout: time.Duration(timeout) * time.Second}, + }) + + bots = append(bots, tmpBot) + errors = append(errors, tmpErr) + } + + return bots, errors +}