Menus and cmd flags for tokens
Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
@@ -1,6 +1,14 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "log"
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/go-redis/redis"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
redisClient *redis.Client
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
@@ -9,26 +17,11 @@ func main() {
|
|||||||
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)
|
redisClient, 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
startMenu()
|
mainMenu()
|
||||||
|
|
||||||
bots, err := botInit(redisClient)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error in initializing bots: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, bot := range bots {
|
|
||||||
defer bot.Stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
/*b.Handle("/hello", func(m *tb.Message) {
|
|
||||||
b.Send(m.Sender, "hello world")
|
|
||||||
})
|
|
||||||
|
|
||||||
b.Start()*/
|
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/dixonwille/wmenu"
|
||||||
"github.com/go-redis/redis"
|
"github.com/go-redis/redis"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -28,7 +29,9 @@ var (
|
|||||||
//ErrTokenInvalid is thrown when the string parsed isn't a valid telegram bot token
|
//ErrTokenInvalid is thrown when the string parsed isn't a valid telegram bot token
|
||||||
ErrTokenInvalid = errors.New("botToken: string isn't a valid telegram bot token")
|
ErrTokenInvalid = errors.New("botToken: string isn't a valid telegram bot token")
|
||||||
//ErrAddToken is thrown when one or more bot token hasn't been added
|
//ErrAddToken is thrown when one or more bot token hasn't been added
|
||||||
ErrAddToken = errors.New("couldn't add one or more token")
|
ErrAddToken = errors.New("couldn't add one or more tokens")
|
||||||
|
//ErrRemoveToken is thrown when one or more bot tokens hasn't been removed
|
||||||
|
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) (*redis.Client, error) {
|
||||||
@@ -64,7 +67,9 @@ func addBotToken(newToken string, client *redis.Client) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func addBotTokens(client *redis.Client) error {
|
func addBotTokens(client *redis.Client, newTokens []string) error {
|
||||||
|
errNum := 0
|
||||||
|
if newTokens == nil {
|
||||||
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')
|
||||||
@@ -73,12 +78,47 @@ func addBotTokens(client *redis.Client) error {
|
|||||||
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)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errNum++
|
||||||
log.Printf("Error in adding new bot token %s: %v", newToken, err)
|
log.Printf("Error in adding new bot token %s: %v", newToken, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if errNum == len(newTokens) {
|
||||||
|
return ErrAddToken
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeBotToken(token string, client *redis.Client) error {
|
||||||
|
err := client.SRem(tkSet, token).Err()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error in removing bot token %s: %v", token, err)
|
||||||
|
return ErrRemoveToken
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeBotTokens(client *redis.Client) error {
|
||||||
|
tokens, err := client.SMembers(tkSet).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Couldn't retrive bot tokens: %v", err)
|
||||||
|
return ErrRedisRetriveSet
|
||||||
|
}
|
||||||
|
menu := wmenu.NewMenu("Select the token(s) you want to remove:")
|
||||||
|
menu.AllowMultiple()
|
||||||
|
menu.LoopOnInvalid()
|
||||||
|
menu.Action(func(opts []wmenu.Opt) error { return removeBotToken(opts[0].Text, client) })
|
||||||
|
for _, token := range tokens {
|
||||||
|
menu.Option(token, nil, false, nil)
|
||||||
|
}
|
||||||
|
err = menu.Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error in removeToken menu: %v", err)
|
||||||
|
return ErrRemoveToken
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +130,7 @@ func getBotTokens(client *redis.Client) ([]string, error) {
|
|||||||
}
|
}
|
||||||
if tkNum == 0 {
|
if tkNum == 0 {
|
||||||
fmt.Println("No bot token found.")
|
fmt.Println("No bot token found.")
|
||||||
err := addBotTokens(client)
|
err := addBotTokens(client, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Couldn't add new bot tokens: %v", err)
|
log.Printf("Couldn't add new bot tokens: %v", err)
|
||||||
return nil, ErrAddToken
|
return nil, ErrAddToken
|
||||||
|
29
src/sys.go
29
src/sys.go
@@ -4,14 +4,18 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
"github.com/dixonwille/wmenu"
|
"github.com/dixonwille/wmenu"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type stringSlice []string
|
||||||
|
|
||||||
type flags struct {
|
type flags struct {
|
||||||
redisAddr string
|
redisAddr string
|
||||||
redisPwd string
|
redisPwd string
|
||||||
redisDB int
|
redisDB int
|
||||||
|
tokens stringSlice
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -19,6 +23,12 @@ var (
|
|||||||
ErrStdRead = errors.New("couldn't read string from stdin")
|
ErrStdRead = errors.New("couldn't read string from stdin")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (i *stringSlice) Set(value string) error {
|
||||||
|
|
||||||
|
*i = append(*i, value)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func getFlags() (flags, error) {
|
func getFlags() (flags, error) {
|
||||||
|
|
||||||
var cmdFlags flags
|
var cmdFlags flags
|
||||||
@@ -30,6 +40,7 @@ func getFlags() (flags, error) {
|
|||||||
pwdUsage = "The password of the redis instance"
|
pwdUsage = "The password of the redis instance"
|
||||||
defaultDB = 0
|
defaultDB = 0
|
||||||
dbUsage = "The database to be selected after connecting to redis instance"
|
dbUsage = "The database to be selected after connecting to redis instance"
|
||||||
|
tokenUsage = "A bot token to be added to the set of tokens"
|
||||||
)
|
)
|
||||||
|
|
||||||
flag.StringVar(&(cmdFlags.redisAddr), "redisAddr", defaultAddr, addrUsage)
|
flag.StringVar(&(cmdFlags.redisAddr), "redisAddr", defaultAddr, addrUsage)
|
||||||
@@ -38,14 +49,28 @@ func getFlags() (flags, error) {
|
|||||||
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.Var(&(cmdFlags.tokens), "token", tokenUsage)
|
||||||
|
flag.Var(&(cmdFlags.tokens), "t", tokenUsage+"(shorthand")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
return cmdFlags, nil
|
return cmdFlags, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func startMenu() {
|
func mainMenu() {
|
||||||
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.Action(func)
|
menu.LoopOnInvalid()
|
||||||
|
menu.Option("Start Bot(s)", nil, true, nil)
|
||||||
|
menu.Option("Add bot token(s)", nil, false, func(opt wmenu.Opt) error {
|
||||||
|
return addBotTokens(redisClient, nil)
|
||||||
|
})
|
||||||
|
menu.Option("Remove bot token(s)", nil, false, func(opt wmenu.Opt) error {
|
||||||
|
return removeBotTokens(redisClient)
|
||||||
|
})
|
||||||
|
|
||||||
|
err := menu.Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error in main menu: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,17 +4,18 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-redis/redis"
|
|
||||||
tb "gopkg.in/tucnak/telebot.v2"
|
tb "gopkg.in/tucnak/telebot.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func botInit(redisClient *redis.Client) ([]*tb.Bot, error) {
|
var (
|
||||||
var bots []*tb.Bot
|
bots []*tb.Bot
|
||||||
|
)
|
||||||
|
|
||||||
|
func botInit() 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)
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, token := range tokens {
|
for _, token := range tokens {
|
||||||
@@ -29,5 +30,22 @@ func botInit(redisClient *redis.Client) ([]*tb.Bot, error) {
|
|||||||
bots = append(bots, bot)
|
bots = append(bots, bot)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bots, nil
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func botStart() {
|
||||||
|
err := botInit()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error in initializing bots: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, bot := range bots {
|
||||||
|
defer bot.Stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*b.Handle("/hello", func(m *tb.Message) {
|
||||||
|
b.Send(m.Sender, "hello world")
|
||||||
|
})
|
||||||
|
|
||||||
|
b.Start()*/
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user