Added first redis support

Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
2018-06-18 00:17:48 +02:00
parent 2c59049efa
commit 0c18f8094e
4 changed files with 79 additions and 14 deletions

View File

@@ -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) {

View File

@@ -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
}

6
sys.go
View File

@@ -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()

View File

@@ -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)