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