Gestione token bot
Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
@@ -2,26 +2,27 @@ package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/go-redis/redis"
|
||||
)
|
||||
|
||||
var (
|
||||
redisClient *redis.Client
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
cmdFlags, err := getFlags()
|
||||
err := getFlags()
|
||||
if err != nil {
|
||||
log.Fatalln("Error in parsing command line flags. Abort!")
|
||||
}
|
||||
|
||||
redisClient, err = redisInit(cmdFlags.redisAddr, cmdFlags.redisPwd, cmdFlags.redisDB)
|
||||
err = redisInit(cmdFlags.redisAddr, cmdFlags.redisPwd, cmdFlags.redisDB)
|
||||
defer redisClient.Close()
|
||||
if err != nil {
|
||||
log.Fatalf("Error in initializing redis instance: %v", err)
|
||||
}
|
||||
|
||||
mainMenu()
|
||||
if cmdFlags.interactive {
|
||||
mainMenu()
|
||||
} else if cmdFlags.tokens != nil {
|
||||
err = addBotTokens(redisClient, cmdFlags.tokens)
|
||||
if err == ErrAddToken {
|
||||
log.Printf("Error in adding bot tokens: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -15,6 +15,11 @@ import (
|
||||
|
||||
const (
|
||||
tkSet = "botTokens"
|
||||
botHash = "botInfos"
|
||||
)
|
||||
|
||||
var (
|
||||
redisClient *redis.Client
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -34,8 +39,8 @@ var (
|
||||
ErrRemoveToken = errors.New("couldn't remove one or more tokens")
|
||||
)
|
||||
|
||||
func redisInit(addr string, pwd string, db int) (*redis.Client, error) {
|
||||
redisClient := redis.NewClient(&redis.Options{
|
||||
func redisInit(addr string, pwd string, db int) error {
|
||||
redisClient = redis.NewClient(&redis.Options{
|
||||
Addr: addr,
|
||||
Password: pwd,
|
||||
DB: db,
|
||||
@@ -43,9 +48,9 @@ func redisInit(addr string, pwd string, db int) (*redis.Client, error) {
|
||||
err := redisClient.Ping().Err()
|
||||
if err != nil {
|
||||
log.Printf("Error in connecting to redis instance: %v", err)
|
||||
return nil, ErrRedisConnection
|
||||
return ErrRedisConnection
|
||||
}
|
||||
return redisClient, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func addBotToken(newToken string, client *redis.Client) error {
|
||||
@@ -64,12 +69,13 @@ func addBotToken(newToken string, client *redis.Client) error {
|
||||
log.Printf("Error in adding new bot token: %v", err)
|
||||
return ErrRedisAddSet
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func addBotTokens(client *redis.Client, newTokens []string) error {
|
||||
errNum := 0
|
||||
if newTokens == nil {
|
||||
if newTokens == nil && cmdFlags.interactive {
|
||||
fmt.Println("Add the new tokens, comma-separated:")
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
line, err := reader.ReadString('\n')
|
||||
@@ -77,7 +83,7 @@ func addBotTokens(client *redis.Client, newTokens []string) error {
|
||||
log.Printf("Error in reading new bot tokens: %v", err)
|
||||
return ErrStdRead
|
||||
}
|
||||
newTokens := strings.Split(line, ",")
|
||||
newTokens = strings.Split(line, ",")
|
||||
}
|
||||
for _, newToken := range newTokens {
|
||||
err := addBotToken(newToken, client)
|
||||
|
61
src/sys.go
61
src/sys.go
@@ -5,6 +5,7 @@ import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/dixonwille/wmenu"
|
||||
)
|
||||
@@ -12,37 +13,49 @@ import (
|
||||
type stringSlice []string
|
||||
|
||||
type flags struct {
|
||||
redisAddr string
|
||||
redisPwd string
|
||||
redisDB int
|
||||
tokens stringSlice
|
||||
interactive bool
|
||||
redisAddr string
|
||||
redisPwd string
|
||||
redisDB int
|
||||
tokens stringSlice
|
||||
}
|
||||
|
||||
var cmdFlags flags
|
||||
|
||||
var (
|
||||
//ErrStdRead it thrown when it's not possible to read from the standard input
|
||||
ErrStdRead = errors.New("couldn't read string from stdin")
|
||||
//ErrStdRead is thrown when it's not possible to read from the standard input
|
||||
ErrStdRead = errors.New("stdin: couldn't read string from stdin")
|
||||
//ErrMainMenu is thrown when a menu couldn't be started
|
||||
ErrMainMenu = errors.New("menu: couldn't start menu")
|
||||
)
|
||||
|
||||
func (i *stringSlice) Set(value string) error {
|
||||
func (i *stringSlice) String() string {
|
||||
return fmt.Sprint(*i)
|
||||
}
|
||||
|
||||
*i = append(*i, value)
|
||||
func (i *stringSlice) Set(values string) error {
|
||||
splittedValues := strings.Split(values, ",")
|
||||
for _, value := range splittedValues {
|
||||
*i = append(*i, value)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getFlags() (flags, error) {
|
||||
|
||||
var cmdFlags flags
|
||||
|
||||
func getFlags() error {
|
||||
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"
|
||||
tokenUsage = "A bot token to be added to the set of tokens"
|
||||
defaultInteractive = true
|
||||
interactiveUsage = "False if the bot isn't executed on a tty"
|
||||
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"
|
||||
tokenUsage = "A bot token to be added to the set of tokens"
|
||||
)
|
||||
|
||||
flag.BoolVar(&(cmdFlags.interactive), "interactive", defaultInteractive, interactiveUsage)
|
||||
flag.BoolVar(&(cmdFlags.interactive), "i", defaultInteractive, interactiveUsage+"(shorthand)")
|
||||
flag.StringVar(&(cmdFlags.redisAddr), "redisAddr", defaultAddr, addrUsage)
|
||||
flag.StringVar(&(cmdFlags.redisAddr), "a", defaultAddr, addrUsage+"(shorthand)")
|
||||
flag.StringVar(&(cmdFlags.redisPwd), "redisPwd", defaultPwd, pwdUsage)
|
||||
@@ -54,14 +67,16 @@ func getFlags() (flags, error) {
|
||||
|
||||
flag.Parse()
|
||||
|
||||
return cmdFlags, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func mainMenu() {
|
||||
func mainMenu() error {
|
||||
fmt.Println("Welcome in barandaBot! Here you can control the bot(s) options and configurations.")
|
||||
menu := wmenu.NewMenu("What do you want to do?")
|
||||
menu.LoopOnInvalid()
|
||||
menu.Option("Start Bot(s)", nil, true, nil)
|
||||
menu.Option("Start Bot(s)", nil, true, func(opt wmenu.Opt) error {
|
||||
return botsStart()
|
||||
})
|
||||
menu.Option("Add bot token(s)", nil, false, func(opt wmenu.Opt) error {
|
||||
return addBotTokens(redisClient, nil)
|
||||
})
|
||||
@@ -72,5 +87,7 @@ func mainMenu() {
|
||||
err := menu.Run()
|
||||
if err != nil {
|
||||
log.Printf("Error in main menu: %v", err)
|
||||
return ErrMainMenu
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
tb "gopkg.in/tucnak/telebot.v2"
|
||||
@@ -11,7 +12,7 @@ var (
|
||||
bots []*tb.Bot
|
||||
)
|
||||
|
||||
func botInit() error {
|
||||
func botsInit() error {
|
||||
tokens, err := getBotTokens(redisClient)
|
||||
if err != nil {
|
||||
log.Printf("Error in retriving bot tokens: %v. Cannot start telebot without tokens.", err)
|
||||
@@ -33,8 +34,8 @@ func botInit() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func botStart() {
|
||||
err := botInit()
|
||||
func botsStart() error {
|
||||
err := botsInit()
|
||||
if err != nil {
|
||||
log.Fatalf("Error in initializing bots: %v", err)
|
||||
}
|
||||
@@ -43,9 +44,22 @@ func botStart() {
|
||||
defer bot.Stop()
|
||||
}
|
||||
|
||||
/*b.Handle("/hello", func(m *tb.Message) {
|
||||
b.Send(m.Sender, "hello world")
|
||||
var wg sync.WaitGroup
|
||||
for i := range bots {
|
||||
defer wg.Done()
|
||||
botStart(bots[i])
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func botStart(bot *tb.Bot) error {
|
||||
log.Printf("Started bot %s", bot.Me.Username)
|
||||
bot.Handle("/hello", func(m *tb.Message) {
|
||||
bot.Send(m.Sender, "hello world")
|
||||
})
|
||||
|
||||
b.Start()*/
|
||||
bot.Start()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user