diff --git a/barandaBot.go b/barandaBot.go index f545843..be54d7c 100644 --- a/barandaBot.go +++ b/barandaBot.go @@ -12,9 +12,20 @@ func main() { redisClient, err := redisInit(cmdFlags.redisAddr, cmdFlags.redisPwd, cmdFlags.redisDB) defer redisClient.Close() - bots, errors := botInit() + if err != nil { + log.Panicf("Error in initializing redis instance: %v", err) + } + + bots, errors := botInit(redisClient) + for i, err := range errors { + if err != nil { + log.Printf("Error in initializing bot: %v", err) + bots = append(bots[:i], bots[i+1:]...) + } + } + for _, bot := range bots { - bot.Stop() + defer bot.Stop() } /*b.Handle("/hello", func(m *tb.Message) { diff --git a/redisAPI.go b/redisAPI.go index a8fc8dc..ad22d17 100644 --- a/redisAPI.go +++ b/redisAPI.go @@ -1,11 +1,20 @@ package main import ( + "bufio" + "fmt" "log" + "os" + "regexp" + "strings" "github.com/go-redis/redis" ) +const ( + tkSet = "botTokens" +) + func redisInit(addr string, pwd string, db int) (*redis.Client, error) { redisClient := redis.NewClient(&redis.Options{ Addr: addr, @@ -18,3 +27,47 @@ func redisInit(addr string, pwd string, db int) (*redis.Client, error) { } return redisClient, nil } + +func addBotTokens(client *redis.Client) { + fmt.Println("Add the new tokens, comma-separated:") + reader := bufio.NewReader(os.Stdin) + line, err := reader.ReadString('\n') + if err != nil { + log.Panicf("Error in reading new bot tokens: %v", err) + } + newTokens := strings.Split(line, ",") + for i, newToken := range newTokens { + newToken = strings.TrimSpace(newToken) + matched, err := regexp.MatchString("^\\d+\\:([0-9]|[A-z]|\\_|\\-)+", newToken) + if err != nil { + log.Printf("Error in parsing new bot token: %v", err) + newTokens = append(newTokens[:i], newTokens[i+1:]...) + } + if !matched { + log.Printf("%s is not a valid bot token and has not been added.", newToken) + newTokens = append(newTokens[:i], newTokens[i+1:]...) + } + } + err = client.SAdd(tkSet, newTokens).Err() + if err != nil { + + } +} + +func getBotTokens(client *redis.Client) ([]string, error) { + tkNum, err := client.SCard(tkSet).Result() + if err != nil { + log.Panicf("Couldn't retrive number of bot tokens: %v", err) + } + if tkNum == 0 { + fmt.Println("No bot token found.") + addBotTokens(client) + } + + tokens, err := client.SMembers(tkSet).Result() + if err != nil { + + } + + return tokens, nil +} diff --git a/sys.go b/sys.go index 5b1f111..6e1b1fc 100644 --- a/sys.go +++ b/sys.go @@ -22,11 +22,11 @@ func getFlags() (flags, error) { ) flag.StringVar(&(cmdFlags.redisAddr), "redisAddr", defaultAddr, addrUsage) - flag.StringVar(&(cmdFlags.redisAddr), "a", defaultAddr, addrUsage+("shorthand")) + flag.StringVar(&(cmdFlags.redisAddr), "a", defaultAddr, addrUsage+"(shorthand)") flag.StringVar(&(cmdFlags.redisPwd), "redisPwd", defaultPwd, pwdUsage) - flag.StringVar(&(cmdFlags.redisPwd), "p", defaultPwd, pwdUsage+("shorthand")) + flag.StringVar(&(cmdFlags.redisPwd), "p", defaultPwd, pwdUsage+"(shorthand)") flag.IntVar(&(cmdFlags.redisDB), "redisDB", defaultDB, dbUsage) - flag.IntVar(&(cmdFlags.redisDB), "d", defaultDB, dbUsage+("shorthand")) + flag.IntVar(&(cmdFlags.redisDB), "d", defaultDB, dbUsage+"(shorthand)") flag.Parse() diff --git a/telegramAPI.go b/telegramAPI.go index 3ce93f6..f9f4fd2 100644 --- a/telegramAPI.go +++ b/telegramAPI.go @@ -3,22 +3,23 @@ package main import ( "time" + "github.com/go-redis/redis" tb "gopkg.in/tucnak/telebot.v2" ) -func botInit() ([]*tb.Bot, []error) { +func botInit(redisClient *redis.Client) ([]*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 - } + + tokens, err := getBotTokens(redisClient) + if err != nil { + + } + + for _, token := range tokens { tmpBot, tmpErr := tb.NewBot(tb.Settings{ Token: token, - Poller: &tb.LongPoller{Timeout: time.Duration(timeout) * time.Second}, + Poller: &tb.LongPoller{Timeout: 10 * time.Second}, }) bots = append(bots, tmpBot)