diff --git a/src/barandaBot.go b/src/barandaBot.go index 83a2dff..f165de2 100644 --- a/src/barandaBot.go +++ b/src/barandaBot.go @@ -25,10 +25,18 @@ func main() { if cmdFlags.interactive { mainMenuLoop() - } else if cmdFlags.token != "" { - err = setBotToken(cmdFlags.token) - if err == ErrAddToken { - log.Printf("Error in adding bot tokens: %v", err) + } else { + if cmdFlags.token != "" { + err = setBotToken(cmdFlags.token) + if err == ErrAddToken { + log.Printf("Error in adding bot tokens: %v", err) + } + } + if cmdFlags.mediaPath != "" { + err = setMediaDir(cmdFlags.mediaPath) + if err != nil { + log.Printf("Error in setting the media dir: %v", err) + } } } } diff --git a/src/manageAdmin.go b/src/manageAdmin.go index 26ca9cc..b08d03a 100644 --- a/src/manageAdmin.go +++ b/src/manageAdmin.go @@ -173,17 +173,12 @@ func addBotAdmin(newAdminID string) error { } botStatus.hasAdmin = true - err = authorizeUser(ID, true) - if err != nil { - log.Printf("Error in adding new admin ID in authorized users: %v", err) - return ErrAddAuthUser - } user, err := getUserInfo(ID) if err != nil { log.Printf("Error getting user info: %v", err) return ErrGetUser } - err = sendMsg(user, newAdminMsg) + err = sendMsgWithMenu(user, newAdminMsg, false) if err != nil { log.Printf("Error sending message to new admin: %v", err) return ErrSendMsg @@ -206,7 +201,7 @@ func removeBotAdmin(adminID int) error { log.Printf("Error getting user info: %v", err) return ErrGetUser } - err = sendMsg(user, delAdminMsg) + err = sendMsgWithMenu(user, delAdminMsg, false) if err != nil { log.Printf("Error sending message to removed admin: %v", err) return ErrSendMsg diff --git a/src/manageMedia.go b/src/manageMedia.go new file mode 100644 index 0000000..80203ba --- /dev/null +++ b/src/manageMedia.go @@ -0,0 +1,77 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" + "strings" + + tb "gopkg.in/tucnak/telebot.v2" +) + +func setMediaDir(newPath string) error { + var err error + if redisClient == nil { + return ErrNilPointer + } + if newPath == "" && cmdFlags.interactive { + fmt.Println("Add the new media path:") + reader := bufio.NewReader(os.Stdin) + newPath, err = reader.ReadString('\n') + if err != nil { + log.Printf("Error in reading new media path: %v", err) + return ErrStdRead + } + } + path := strings.TrimSpace(newPath) + valid, err := isValidPath(path) + if err != nil { + log.Printf("Error in validating path: %v", err) + } + if !valid { + return ErrInvalidPath + } + + err = redisClient.Set(mediaPath, path, 0).Err() + if err != nil { + log.Printf("Error in adding new media path: %v", err) + return ErrRedisAddSet + } + + return nil +} + +func getMediaDir() (string, error) { + if redisClient == nil { + return "", ErrNilPointer + } + mediaDirExists, err := redisClient.Exists(mediaPath).Result() + if err != nil { + log.Printf("Error checking if media path exists in db: %v", err) + return "", ErrRedisCheckSet + } + if mediaDirExists == 0 { + fmt.Println("No media path found.") + err := setMediaDir("") + if err != nil { + log.Printf("Couldn't set new media path: %v", err) + return "", ErrRedisAddSet + } + } + path, err := redisClient.Get(mediaPath).Result() + if err != nil { + log.Printf("Couldn't retrieve mediaPath: %v", err) + return "", ErrRedisRetrieveSet + } + return path, nil +} + +func sendImg(user *tb.User, img *tb.Photo) error { + _, err := bot.Send(user, img) + if err != nil { + log.Printf("Error sending img to user: %v", err) + return ErrSendMsg + } + return nil +} diff --git a/src/manageMsg.go b/src/manageMsg.go index c827d69..e0fe31b 100644 --- a/src/manageMsg.go +++ b/src/manageMsg.go @@ -8,12 +8,16 @@ import ( tb "gopkg.in/tucnak/telebot.v2" ) -func closeMsgMenu(storedMsg *tb.StoredMessage) error { - _, err := bot.EditReplyMarkup(storedMsg, &tb.ReplyMarkup{ - InlineKeyboard: nil, - }) +func modifyPrevMsg(userID int, storedMsg *tb.StoredMessage, newMsg string, newOptions *tb.SendOptions) error { + msg, err := bot.Edit(storedMsg, newMsg, newOptions) if err != nil { - log.Printf("Error modifying the message: %v", err) + log.Printf("Error modifying previous message: %v", err) + return ErrSendMsg + } + err = setLastMsgPerUser(userID, msg) + if err != nil { + log.Printf("Error setting last msg per user: %v", err) + return ErrSetLastMsg } return nil @@ -53,32 +57,13 @@ func getLastMsgPerUser(userID int) (*tb.StoredMessage, error) { return jsonMsg, nil } -func sendMsg(user *tb.User, msg string) error { - sentMsg, err := bot.Send(user, msg, &tb.SendOptions{ - ParseMode: "Markdown", - }) - if err != nil { - log.Printf("Error sending message to user: %v", err) - return ErrSendMsg - } - storedMsg, err := getLastMsgPerUser(user.ID) - if err != nil { - log.Printf("Error retriving last message per user: %v", err) - } else { - err = closeMsgMenu(storedMsg) - if err != nil { - log.Printf("Error modifying the message: %v", err) - } - } - err = setLastMsgPerUser(user.ID, sentMsg) - if err != nil { - log.Printf("Error setting last msg per user: %v", err) - return ErrSetLastMsg - } +func sendMsg(user *tb.User, msg string, new bool) error { + sendMsgWithSpecificMenu(user, msg, nil, new) + return nil } -func sendMsgWithMenu(user *tb.User, msg string) error { +func sendMsgWithMenu(user *tb.User, msg string, new bool) error { var menu [][]tb.InlineButton auth, err := isAuthrizedUser(user.ID) @@ -97,57 +82,55 @@ func sendMsgWithMenu(user *tb.User, msg string) error { } else { menu = genericInlineMenu } - sentMsg, err := bot.Send(user, msg, &tb.SendOptions{ - ReplyMarkup: &tb.ReplyMarkup{ - InlineKeyboard: menu, - }, - ParseMode: "Markdown", - }) - if err != nil { - log.Printf("Error sending message to user: %v", err) - return ErrSendMsg - } - storedMsg, err := getLastMsgPerUser(user.ID) - if err != nil { - log.Printf("Error retriving last message per user: %v", err) - } else { - err = closeMsgMenu(storedMsg) - if err != nil { - log.Printf("Error modifying the message: %v", err) - } - } - err = setLastMsgPerUser(user.ID, sentMsg) - if err != nil { - log.Printf("Error setting last msg per user: %v", err) - return ErrSetLastMsg - } + sendMsgWithSpecificMenu(user, msg, menu, new) + return nil } -func sendMsgWithSpecificMenu(user *tb.User, msg string, menu [][]tb.InlineButton) error { - sentMsg, err := bot.Send(user, msg, &tb.SendOptions{ - ReplyMarkup: &tb.ReplyMarkup{ - InlineKeyboard: menu, - }, - ParseMode: "Markdown", - }) - if err != nil { - log.Printf("Error sending message to user: %v", err) - return ErrSendMsg - } - storedMsg, err := getLastMsgPerUser(user.ID) - if err != nil { - log.Printf("Error retriving last message per user: %v", err) - } else { - err = closeMsgMenu(storedMsg) +func sendMsgWithSpecificMenu(user *tb.User, msg string, menu [][]tb.InlineButton, new bool) error { + if !new { + storedMsg, err := getLastMsgPerUser(user.ID) if err != nil { - log.Printf("Error modifying the message: %v", err) + log.Printf("Error retriving last message per user: %v", err) + sentMsg, err := bot.Send(user, msg, &tb.SendOptions{ + ReplyMarkup: &tb.ReplyMarkup{InlineKeyboard: menu}, + DisableWebPagePreview: true, + ParseMode: tb.ModeMarkdown, + }) + if err != nil { + log.Printf("Error sending message to user: %v", err) + return ErrSendMsg + } + err = setLastMsgPerUser(user.ID, sentMsg) + if err != nil { + log.Printf("Error setting last msg per user: %v", err) + return ErrSetLastMsg + } + } + err = modifyPrevMsg(user.ID, storedMsg, msg, &tb.SendOptions{ + ReplyMarkup: &tb.ReplyMarkup{InlineKeyboard: menu}, + DisableWebPagePreview: true, + ParseMode: tb.ModeMarkdown, + }) + if err != nil { + log.Printf("Error sending message to user: %v", err) + return ErrSendMsg + } + } else { + sentMsg, err := bot.Send(user, msg, &tb.SendOptions{ + ReplyMarkup: &tb.ReplyMarkup{InlineKeyboard: menu}, + DisableWebPagePreview: true, + ParseMode: tb.ModeMarkdown, + }) + if err != nil { + log.Printf("Error sending message to user: %v", err) + return ErrSendMsg + } + err = setLastMsgPerUser(user.ID, sentMsg) + if err != nil { + log.Printf("Error setting last msg per user: %v", err) + return ErrSetLastMsg } - } - err = setLastMsgPerUser(user.ID, sentMsg) - if err != nil { - log.Printf("Error setting last msg per user: %v", err) - return ErrSetLastMsg } return nil diff --git a/src/manageUser.go b/src/manageUser.go index 13071e8..bdce19a 100644 --- a/src/manageUser.go +++ b/src/manageUser.go @@ -129,18 +129,41 @@ func authorizeUser(userID int, authorized bool) error { if redisClient == nil { return ErrNilPointer } + isAuthUser, err := isAuthrizedUser(userID) + if err != nil { + log.Printf("Error checking if user is authorized: %v", err) + } + if isAuthUser { + return nil + } + + user, err := getUserInfo(userID) + if err != nil { + log.Printf("Error getting user info: %v", err) + return ErrGetUser + } if authorized { err := redisClient.SAdd(authUsers, strconv.Itoa(userID)).Err() if err != nil { log.Printf("Error adding token to set: %v", err) return ErrRedisAddSet } + err = sendMsg(user, newAuthMsg, true) + if err != nil { + log.Printf("Error sending message to new authorized user: %v", err) + return ErrSendMsg + } } else { err := redisClient.SRem(authUsers, strconv.Itoa(userID)).Err() if err != nil { log.Printf("Error removing token from set: %v", err) return ErrRedisRemSet } + err = sendMsg(user, delAuthMsg, true) + if err != nil { + log.Printf("Error sending message to removed authorized user: %v", err) + return ErrSendMsg + } } return nil } @@ -180,12 +203,14 @@ func getUserGroups(userID int) ([]userGroup, error) { var retGroups []userGroup groups := strings.Split(csvGroups, ",") for _, group := range groups { - intGroup, err := strconv.Atoi(group) - if err != nil { - log.Printf("Error converting user group: %v", err) - return nil, ErrAtoiConv + if group != "" { + intGroup, err := strconv.Atoi(group) + if err != nil { + log.Printf("Error converting user group: %v", err) + return nil, ErrAtoiConv + } + retGroups = append(retGroups, userGroup(intGroup)) } - retGroups = append(retGroups, userGroup(intGroup)) } return retGroups, nil } @@ -233,3 +258,48 @@ func convertUserGroups(groups []userGroup) []string { return stringGroups } + +func getUserDescription(u *tb.User) (string, error) { + userGroups, err := getUserGroups(u.ID) + if err != nil { + log.Printf("Error retriving user groups: %v", err) + return "", ErrRedisRetrieveHash + } + stringGroups := convertUserGroups(userGroups) + + isAdmin, err := isBotAdmin(u.ID) + if err != nil { + log.Printf("Error checking if user is admin: %v", err) + return "", ErrRedisCheckSet + } + isAuth, err := isAuthrizedUser(u.ID) + if err != nil { + log.Printf("Error checking if user is authorized: %v", err) + return "", ErrRedisCheckSet + } + + msg := "\xF0\x9F\x91\xA4 *INFORMAZIONI UTENTE*" + + "\n- *Nome*: " + u.FirstName + + "\n- *Username*: " + u.Username + + "\n- *ID*: " + strconv.Itoa(u.ID) + + "\n- *Gruppi*: " + + for i, group := range stringGroups { + msg += group + if i <= len(stringGroups)-2 { + msg += ", " + } + } + + msg += "\n- *Tipo utente*: " + + if isAdmin { + msg += "Admin" + } else if isAuth { + msg += "Autorizzato" + } else { + msg += "Utente semplice" + } + + return msg, nil +} diff --git a/src/redisAPI.go b/src/redisAPI.go index 82b286d..15be144 100644 --- a/src/redisAPI.go +++ b/src/redisAPI.go @@ -17,6 +17,7 @@ const ( authUsers = "authUsers" adminUsers = "adminUsers" lastMsgPerUser = "lastMsgPerUser" + mediaPath = "mediaPath" ) var redisClient *redis.Client diff --git a/src/sys.go b/src/sys.go index 8adaeba..75ce14c 100644 --- a/src/sys.go +++ b/src/sys.go @@ -19,6 +19,7 @@ type flags struct { redisPwd string redisDB int token string + mediaPath string } var cmdFlags flags @@ -63,7 +64,20 @@ func getFlags() error { dbUsage = "The database to be selected after connecting to redis instance" defaultToken = "" tokenUsage = "A bot token to be added to the set of tokens" + defaultMediaPath = "" + mediaPathUsage = "A path to be used as media directory" ) + /* var defaultMediaPath string + usr, err := user.Current() + if err != nil { + log.Printf("Error retriving current user home dir: %v. Using current directory", err) + os.MkdirAll("./.barandaBot/img", os.ModePerm) + defaultMediaPath = "./.barandaBot/img" + + } else { + os.MkdirAll(usr.HomeDir+"/.barandaBot/img", os.ModePerm) + defaultMediaPath = usr.HomeDir + "/.barandaBot/img" + } */ flag.BoolVar(&(cmdFlags.interactive), "interactive", defaultInteractive, interactiveUsage) flag.BoolVar(&(cmdFlags.interactive), "i", defaultInteractive, interactiveUsage+"(shorthand)") @@ -75,6 +89,8 @@ func getFlags() error { flag.IntVar(&(cmdFlags.redisDB), "d", defaultDB, dbUsage+"(shorthand)") flag.StringVar(&(cmdFlags.token), "token", defaultToken, tokenUsage) flag.StringVar(&(cmdFlags.token), "t", defaultToken, tokenUsage+"(shorthand") + flag.StringVar(&(cmdFlags.mediaPath), "mediaPath", defaultMediaPath, mediaPathUsage) + flag.StringVar(&(cmdFlags.mediaPath), "m", defaultMediaPath, mediaPathUsage+"(shorthand") flag.Parse() @@ -96,6 +112,17 @@ func exit() error { return nil } +func isValidPath(path string) (bool, error) { + _, err := os.Stat(path) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return true, err +} + func mainMenu() *wmenu.Menu { menu := wmenu.NewMenu("What do you want to do?") menu.LoopOnInvalid() @@ -106,6 +133,9 @@ func mainMenu() *wmenu.Menu { menu.Option("Set bot token", nil, false, func(opt wmenu.Opt) error { return setBotToken("") }) + menu.Option("Set media path", nil, false, func(opt wmenu.Opt) error { + return setMediaDir("") + }) } if botStatus.isStarted { menu.Option("Stop bot", nil, true, func(opt wmenu.Opt) error { diff --git a/src/telegramAPI.go b/src/telegramAPI.go index 1a134b8..484b683 100644 --- a/src/telegramAPI.go +++ b/src/telegramAPI.go @@ -17,14 +17,18 @@ const ( startMsg string = "Salve, sono Stefano, il Magister! Come posso esservi d'aiuto?" alreadyStartedMsg string = "Si, mi dica, che c'è?! Sono qui!" restartMsg string = "Eccomi, sono tornato! Ha bisogno? Mi dica pure!" - stopMsg string = "Mi assenterò per qualche istante, d'altra parte anch'io ho pur diritto alla mia vita privata. Masino mi attende!" + stopMsg string = "Mi assenterò per qualche istante, d'altra parte anch'io ho pur diritto alla mia vita privata. Masino mi attende \xF0\x9F\x90\xB1" unstoppableMsg string = "Non ci siamo... Io l'ho nominata AMMINISTRATORE, cosa crede?! Questo ruolo esige impegno! Non può certo bloccarmi!" + wrongCmdMsg string = "Non capisco, si spieghi meglio! Per cortesia, basta basta! La prego! Non so di cosa sta parlando!" + authHowToMsg string = "Per autorizzare un utente invia un messaggio con scritto \n`/authUser ID_UTENTE`\n sostituendo `ID_UTENTE` con l'ID che ti é stato comunicato dall'utente da autorizzare" + newAuthMsg string = "Benvenuto! Da ora in poi lei fa ufficialmente parte del magnifico *Coro dell'Università di Pisa*! Deve sentirsi onorato." + delAuthMsg string = "Capisco, quindi se ne sta andando... Beh un po' mi dispiace, devo ammetterlo. Se ripassa da queste parti sarà sempre il benvenuto! Arrivederci." newAdminMsg string = "Beh allora, vediamo... Ah si, la nomino amministratore! Da grandi poteri derivano grandi responsabilità. Mi raccomando, non me ne faccia pentire!" delAdminMsg string = "Ecco, che le avevo detto?! Mi sembrava di essere stato chiaro! Dovrò sollevarla dall'incarico... Mi spiace molto ma da ora in avanti non sarà più amministratore" menuMsg string = "Ecco a lei, questo è l'elenco di tutto ciò che può chiedermi. Non mi disturbi con altre richieste!" - contactMsg string = "*BarandaBot*" + + contactMsg string = "*BarandaBot*\xE2\x84\xA2" + "\nSe hai domande, suggerimenti o se vuoi segnalare bug e altri malfunzionamenti puoi contattare l'Altissimo con i seguenti mezzi di comunicazione:" + - "\n- \xF0\x9F\x90\xA6 _Piccione viaggiatore_: PlusCode - P99W+4Q Pisa, PI" + + "\n- \xF0\x9F\x90\xA6 _Piccione viaggiatore_: [Palazzo Ricci, Pisa](https://goo.gl/maps/gMUbV2eqJiL2)" + "\n- \xF0\x9F\x93\xA7 _Mail_: telebot.corounipi@gmail.com" + "\n- \xF0\x9F\x93\x82 _GitHub_: https://github.com/Noettore/barandaBot" ) @@ -48,6 +52,8 @@ var ( ErrBotConn = errors.New("telegram: cannot connect to bot") //ErrSetLastMsg is thrown when it's not possible to set last message per user in hash ErrSetLastMsg = errors.New("cannot set last message per user") + //ErrInvalidPath is thrown when a path isn't valid + ErrInvalidPath = errors.New("path is not valid") ) func botInit() error { @@ -107,15 +113,23 @@ func setBotPoller(upd *tb.Update) bool { if upd.Message == nil { return true } - if upd.Message.Sender != nil { + /* if upd.Message.Sender != nil { err := addUser(upd.Message.Sender) if err != nil { log.Printf("Error in adding user info: %v", err) } } else { log.Printf("%v", ErrIDFromMsg) + } */ + isUser, err := isUser(upd.Message.Sender.ID) + if err != nil { + log.Printf("Error checking if message come from a bot user: %v", err) } - _, isGenericCmd := genericCommands[upd.Message.Text] + if !isUser && upd.Message.Text != "/start" { + return false + } + + //_, isGenericCmd := genericCommands[upd.Message.Text] _, isAuthCmd := authCommands[upd.Message.Text] _, isAdminCmd := adminCommands[upd.Message.Text] @@ -124,6 +138,7 @@ func setBotPoller(upd *tb.Update) bool { log.Printf("Error checking if user is started: %v", err) } if !started && upd.Message.Text != "/start" { + sendMsgWithSpecificMenu(upd.Message.Sender, "ZzZzZzZzZzZ", startMenu, true) return false } @@ -135,13 +150,10 @@ func setBotPoller(upd *tb.Update) bool { if err != nil { log.Printf("Error checking if user is admin: %v", err) } - if isAdminCmd && !admin { + if isAdminCmd && admin == false { return false } - if isAuthCmd && !auth { - return false - } - if !isGenericCmd { + if isAuthCmd && auth == false { return false } return true diff --git a/src/telegramCommands.go b/src/telegramCommands.go index 4b50fcb..9c4d0e4 100644 --- a/src/telegramCommands.go +++ b/src/telegramCommands.go @@ -2,7 +2,6 @@ package main import ( "log" - "strconv" tb "gopkg.in/tucnak/telebot.v2" ) @@ -12,7 +11,9 @@ var genericCommands = map[string]bool{ "/stop": true, "/menu": true, "/userInfo": true, + "/config": true, "/botInfo": true, + "/help": true, "/prossimoEvento": true, } var authCommands = map[string]bool{ @@ -20,12 +21,13 @@ var authCommands = map[string]bool{ "/prossimaProvaInsieme": true, } var adminCommands = map[string]bool{ - "/authUser": true, - "/addAdmin": true, - "/delAdmin": true, + "/authUser": true, + "/deAuthUser": true, + "/addAdmin": true, + "/delAdmin": true, } -func startCmd(u *tb.User) { +func startCmd(u *tb.User, newMsg bool) { var msg string isUser, err := isUser(u.ID) @@ -45,13 +47,17 @@ func startCmd(u *tb.User) { if isUser { msg = restartMsg } else { + err := addUser(u) + if err != nil { + log.Printf("Error adding user: %v", err) + } msg = startMsg } } else { msg = alreadyStartedMsg } - err = sendMsgWithMenu(u, msg) + err = sendMsgWithMenu(u, msg, newMsg) if err != nil { log.Printf("Error sending message to started user: %v", err) } @@ -63,7 +69,8 @@ func stopCmd(u *tb.User) { log.Printf("Error checking if user is admin: %v", err) } if admin { - err := sendMsgWithMenu(u, unstoppableMsg) + //img := &tb.Photo{File: tb.FromDisk()} + err := sendMsgWithMenu(u, unstoppableMsg, false) if err != nil { log.Printf("Error sending message to unstoppable user: %v", err) } @@ -72,47 +79,35 @@ func stopCmd(u *tb.User) { if err != nil { log.Printf("Error starting user: %v", err) } - err := sendMsgWithSpecificMenu(u, stopMsg, startMenu) + err := sendMsgWithSpecificMenu(u, stopMsg, startMenu, false) if err != nil { log.Printf("Error sending message to stopped user: %v", err) } } } -func userInfoCmd(u *tb.User) { - userGroups, err := getUserGroups(u.ID) - if err != nil { - log.Printf("Error retriving user groups: %v", err) - } - stringGroups := convertUserGroups(userGroups) - - isAdmin, err := isBotAdmin(u.ID) - if err != nil { - log.Printf("Error checking if user is admin: %v", err) - } - isAuth, err := isAuthrizedUser(u.ID) - if err != nil { - log.Printf("Error checking if user is authorized: %v", err) - } - - msg := "\xF0\x9F\x91\xA4 *INFORMAZIONI UTENTE*" + - "\n- *Nome*: " + u.FirstName + - "\n- *Username*: " + u.Username + - "\n- *ID*: " + strconv.Itoa(u.ID) + - "\n- *Gruppi*: " - - for _, group := range stringGroups { - msg += group + ", " - } - - msg += "\n- *Tipo utente*: " - - if isAdmin { - msg += "Admin" - } else if isAuth { - msg += "Autorizzato" +func authUserCmd(u *tb.User, payload string) { + if payload == "" { + err := sendMsg(u, authHowToMsg, true) + if err != nil { + log.Printf("Error in sending message: %v", err) + } } else { - msg += "Utente semplice" + desc, err := getUserDescription(u) + if err != nil { + log.Printf("Error retriving user description: %v", err) + } + menu := authUserMenu + authUserMenu[0][0].Data = payload + authUserMenu[0][1].Data = payload + authUserMenu[1][0].Data = payload + authUserMenu[1][1].Data = payload + err = sendMsgWithSpecificMenu(u, "Stai per autorizzare il seguente utente:\n"+ + desc+ + "\nSe le informazioni sono corrette fai 'tap' sui gruppi di appartenenza dell'utente da autorizzare, altrimenti *torna al menù principale ed annulla l'autorizzazione*", + menu, true) + if err != nil { + log.Printf("Error in sending message: %v", err) + } } - err = sendMsgWithSpecificMenu(u, msg, goBackMenu) } diff --git a/src/telegramHandlers.go b/src/telegramHandlers.go index 525b2da..406ca7e 100644 --- a/src/telegramHandlers.go +++ b/src/telegramHandlers.go @@ -9,19 +9,37 @@ func setBotHandlers() error { return ErrNilPointer } bot.Handle("/start", func(m *tb.Message) { - startCmd(m.Sender) + startCmd(m.Sender, true) }) bot.Handle("/stop", func(m *tb.Message) { stopCmd(m.Sender) }) bot.Handle("/menu", func(m *tb.Message) { - sendMsgWithMenu(m.Sender, menuMsg) + sendMsgWithMenu(m.Sender, menuMsg, true) }) bot.Handle("/userInfo", func(m *tb.Message) { - userInfoCmd(m.Sender) + msg, _ := getUserDescription(m.Sender) + sendMsgWithSpecificMenu(m.Sender, msg, myInfoMenu, false) }) bot.Handle("/botInfo", func(m *tb.Message) { - sendMsgWithSpecificMenu(m.Sender, contactMsg, goBackMenu) + sendMsgWithSpecificMenu(m.Sender, contactMsg, botInfoMenu, true) + }) + bot.Handle("/help", func(m *tb.Message) { + sendMsgWithSpecificMenu(m.Sender, contactMsg, botInfoMenu, true) + }) + bot.Handle("/config", func(m *tb.Message) { + msg, _ := getUserDescription(m.Sender) + sendMsgWithSpecificMenu(m.Sender, msg, myInfoMenu, false) + }) + bot.Handle("/authUser", func(m *tb.Message) { + authUserCmd(m.Sender, m.Payload) + }) + bot.Handle("/deAuthUser", func(m *tb.Message) { + + }) + + bot.Handle(tb.OnText, func(m *tb.Message) { + sendMsgWithMenu(m.Sender, wrongCmdMsg, true) }) return nil diff --git a/src/telegramMenus.go b/src/telegramMenus.go index d0e6821..d1c1368 100644 --- a/src/telegramMenus.go +++ b/src/telegramMenus.go @@ -5,11 +5,14 @@ import ( ) var ( - adminInlineMenu [][]tb.InlineButton - authInlineMenu [][]tb.InlineButton - genericInlineMenu [][]tb.InlineButton - startMenu [][]tb.InlineButton - goBackMenu [][]tb.InlineButton + superAdminInlineMenu [][]tb.InlineButton + adminInlineMenu [][]tb.InlineButton + authInlineMenu [][]tb.InlineButton + genericInlineMenu [][]tb.InlineButton + startMenu [][]tb.InlineButton + myInfoMenu [][]tb.InlineButton + botInfoMenu [][]tb.InlineButton + authUserMenu [][]tb.InlineButton ) var ( @@ -27,24 +30,87 @@ var ( } infoBtn = tb.InlineButton{ Unique: "info_btn", - Text: "\xE2\x84\xB9 Info", + Text: "\xE2\x84\xB9 Bot info", } userBtn = tb.InlineButton{ Unique: "user_btn", Text: "\xF0\x9F\x91\xA4 My info", } + authBtn = tb.InlineButton{ + Unique: "auth_btn", + Text: "\xE2\x9C\x85 Autorizza utente", + } + deAuthBtn = tb.InlineButton{ + Unique: "de_auth_btn", + Text: "\xE2\x9D\x8C Deautorizza utente", + } + adminBtn = tb.InlineButton{ + Unique: "admin_btn", + Text: "\xF0\x9F\x91\x91 Nomina amministratore", + } + deAdminBtn = tb.InlineButton{ + Unique: "de_admin_btn", + Text: "\xF0\x9F\x92\x80 Rimuovi amministratore", + } + sendMsgBtn = tb.InlineButton{ + Unique: "send_msg_btn", + Text: "\xF0\x9F\x93\xA3 Invia messaggio alla sezione", + } + authUGSopranoBtn = tb.InlineButton{ + Unique: "auth_ugSoprano_btn", + Text: "\xF0\x9F\x91\xA7 Soprani", + } + authUGContraltoBtn = tb.InlineButton{ + Unique: "auth_ugContralto_btn", + Text: "\xF0\x9F\x91\xA9 Contralti", + } + authUGTenoreBtn = tb.InlineButton{ + Unique: "auth_ugTenore_btn", + Text: "\xF0\x9F\x91\xA6 Tenori", + } + authUGBassoBtn = tb.InlineButton{ + Unique: "auth_ugBasso_btn", + Text: "\xF0\x9F\x91\xA8 Bassi", + } + authUGCommissarioBtn = tb.InlineButton{ + Unique: "auth_ugCommissario_btn", + Text: "\xF0\x9F\x93\x9D Commissari", + } + authUGReferenteBtn = tb.InlineButton{ + Unique: "auth_ugReferente_btn", + Text: "\xF0\x9F\x93\x8B Referenti", + } + authUGPreparatoreBtn = tb.InlineButton{ + Unique: "auth_ugPreparatori_btn", + Text: "\xF0\x9F\x8E\xB9 Preparatori", + } ) func setBotMenus() error { - genericInlineMenu = append(genericInlineMenu, []tb.InlineButton{userBtn, infoBtn}, []tb.InlineButton{stopBtn}) + genericInlineMenu = append(genericInlineMenu, []tb.InlineButton{userBtn, infoBtn}) + authInlineMenu = genericInlineMenu - adminInlineMenu = genericInlineMenu - //adminInlineMenu = append(adminInlineMenu, []tb.InlineButton{stopBtn, infoBtn}) - //authInlineMenu = append(authInlineMenu, []tb.InlineButton{stopBtn, infoBtn}) + //authInlineMenu = append(authInlineMenu, []tb.InlineButton{, }) + + adminInlineMenu = authInlineMenu + adminInlineMenu = append(adminInlineMenu, + []tb.InlineButton{authBtn, deAuthBtn}, + []tb.InlineButton{sendMsgBtn}, + ) + + superAdminInlineMenu = adminInlineMenu + superAdminInlineMenu = append(superAdminInlineMenu, []tb.InlineButton{adminBtn, deAdminBtn}) startMenu = append(startMenu, []tb.InlineButton{startBtn}) - goBackMenu = append(goBackMenu, []tb.InlineButton{backBtn}) + myInfoMenu = append(myInfoMenu, []tb.InlineButton{backBtn}) + botInfoMenu = append(botInfoMenu, []tb.InlineButton{stopBtn}, []tb.InlineButton{backBtn}) + authUserMenu = append(authUserMenu, + []tb.InlineButton{authUGSopranoBtn, authUGContraltoBtn}, + []tb.InlineButton{authUGTenoreBtn, authUGBassoBtn}, + []tb.InlineButton{authUGCommissarioBtn, authUGReferenteBtn, authUGPreparatoreBtn}, + []tb.InlineButton{backBtn}, + ) return nil } @@ -56,7 +122,7 @@ func setBotCallbacks() error { bot.Handle(&startBtn, func(c *tb.Callback) { bot.Respond(c, &tb.CallbackResponse{}) - startCmd(c.Sender) + startCmd(c.Sender, false) }) bot.Handle(&stopBtn, func(c *tb.Callback) { @@ -66,15 +132,30 @@ func setBotCallbacks() error { bot.Handle(&userBtn, func(c *tb.Callback) { bot.Respond(c, &tb.CallbackResponse{}) - userInfoCmd(c.Sender) + msg, _ := getUserDescription(c.Sender) + sendMsgWithSpecificMenu(c.Sender, msg, myInfoMenu, false) }) bot.Handle(&infoBtn, func(c *tb.Callback) { bot.Respond(c, &tb.CallbackResponse{}) - sendMsgWithSpecificMenu(c.Sender, contactMsg, goBackMenu) + sendMsgWithSpecificMenu(c.Sender, contactMsg, botInfoMenu, false) }) bot.Handle(&backBtn, func(c *tb.Callback) { bot.Respond(c, &tb.CallbackResponse{}) - sendMsgWithMenu(c.Sender, menuMsg) + sendMsgWithMenu(c.Sender, menuMsg, false) + }) + + bot.Handle(&authBtn, func(c *tb.Callback) { + bot.Respond(c, &tb.CallbackResponse{}) + sendMsgWithMenu(c.Sender, authHowToMsg, false) + + }) + bot.Handle(&deAuthBtn, func(c *tb.Callback) { + bot.Respond(c, &tb.CallbackResponse{}) + + }) + bot.Handle(&sendMsgBtn, func(c *tb.Callback) { + bot.Respond(c, &tb.CallbackResponse{}) + }) return nil