Added first redis support
Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
@@ -12,9 +12,20 @@ func main() {
|
|||||||
redisClient, err := redisInit(cmdFlags.redisAddr, cmdFlags.redisPwd, cmdFlags.redisDB)
|
redisClient, err := redisInit(cmdFlags.redisAddr, cmdFlags.redisPwd, cmdFlags.redisDB)
|
||||||
defer redisClient.Close()
|
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 {
|
for _, bot := range bots {
|
||||||
bot.Stop()
|
defer bot.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*b.Handle("/hello", func(m *tb.Message) {
|
/*b.Handle("/hello", func(m *tb.Message) {
|
||||||
|
53
redisAPI.go
53
redisAPI.go
@@ -1,11 +1,20 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/go-redis/redis"
|
"github.com/go-redis/redis"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
tkSet = "botTokens"
|
||||||
|
)
|
||||||
|
|
||||||
func redisInit(addr string, pwd string, db int) (*redis.Client, error) {
|
func redisInit(addr string, pwd string, db int) (*redis.Client, error) {
|
||||||
redisClient := redis.NewClient(&redis.Options{
|
redisClient := redis.NewClient(&redis.Options{
|
||||||
Addr: addr,
|
Addr: addr,
|
||||||
@@ -18,3 +27,47 @@ func redisInit(addr string, pwd string, db int) (*redis.Client, error) {
|
|||||||
}
|
}
|
||||||
return redisClient, nil
|
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
6
sys.go
@@ -22,11 +22,11 @@ func getFlags() (flags, error) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
flag.StringVar(&(cmdFlags.redisAddr), "redisAddr", defaultAddr, addrUsage)
|
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), "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), "redisDB", defaultDB, dbUsage)
|
||||||
flag.IntVar(&(cmdFlags.redisDB), "d", defaultDB, dbUsage+("shorthand"))
|
flag.IntVar(&(cmdFlags.redisDB), "d", defaultDB, dbUsage+"(shorthand)")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
@@ -3,22 +3,23 @@ package main
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-redis/redis"
|
||||||
tb "gopkg.in/tucnak/telebot.v2"
|
tb "gopkg.in/tucnak/telebot.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func botInit() ([]*tb.Bot, []error) {
|
func botInit(redisClient *redis.Client) ([]*tb.Bot, []error) {
|
||||||
var bots []*tb.Bot
|
var bots []*tb.Bot
|
||||||
var errors []error
|
var errors []error
|
||||||
for i, token := range tokens {
|
|
||||||
var timeout int
|
tokens, err := getBotTokens(redisClient)
|
||||||
if i < len(timeouts) {
|
if err != nil {
|
||||||
timeout = timeouts[i]
|
|
||||||
} else {
|
|
||||||
timeout = 10
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, token := range tokens {
|
||||||
tmpBot, tmpErr := tb.NewBot(tb.Settings{
|
tmpBot, tmpErr := tb.NewBot(tb.Settings{
|
||||||
Token: token,
|
Token: token,
|
||||||
Poller: &tb.LongPoller{Timeout: time.Duration(timeout) * time.Second},
|
Poller: &tb.LongPoller{Timeout: 10 * time.Second},
|
||||||
})
|
})
|
||||||
|
|
||||||
bots = append(bots, tmpBot)
|
bots = append(bots, tmpBot)
|
||||||
|
Reference in New Issue
Block a user