diff --git a/bot.go b/bot.go index 6dacf16..bed3d62 100644 --- a/bot.go +++ b/bot.go @@ -52,6 +52,7 @@ func (b *Bot) BotHandlers() { b.bot.Handle("/pause", botPause) b.bot.Handle("/unpause", botUnpause) b.bot.Handle("/register", botRegister) + b.bot.Handle("/deregister", botDeregister) b.bot.Handle("/delete", botDelete) b.bot.Handle("/companies", botCompanies) b.bot.Handle("/clients", botClients) @@ -170,6 +171,35 @@ func botPlayers(m *tb.Message) { bot.SendChat(m.Chat.ID, str) } +func botDeregister(m *tb.Message) { + cc, ok := cfg.Clients[m.Sender.ID] + if !ok { + cc = &ClientConfig{ + UserID: m.Sender.ID, + Username: m.Sender.Username, + CompanyID: 255, + TimeLeft: 0, + } + cfg.Clients[m.Sender.ID] = cc + bot.SendChat(m.Chat.ID, "User isn't registered.") + return + } + if cc.CompanyID != 255 { + for coID, co := range srv.Status.Companies { + if coID == cc.CompanyID { + cc.CompanyID = 255 + bot.SendChat(m.Chat.ID, fmt.Sprintf("Deregistered from %s. %s playable left.", co.Name, cc.TimeLeft)) + return + } + } + logInfoAlert("botRegister : %s : no such CompanyID : %d", cc.Username, cc.CompanyID) + cc.CompanyID = 255 + bot.SendChat(m.Chat.ID, fmt.Sprintf("Registered company didn't exist anymore. %s playable left.", cc.TimeLeft)) + return + } + return +} + func botRegister(m *tb.Message) { cc, ok := cfg.Clients[m.Sender.ID] if !ok { @@ -177,9 +207,22 @@ func botRegister(m *tb.Message) { UserID: m.Sender.ID, Username: m.Sender.Username, CompanyID: 255, + TimeLeft: 0, } cfg.Clients[m.Sender.ID] = cc + } else { + if cc.CompanyID != 255 { + for coID, co := range srv.Status.Companies { + if coID == cc.CompanyID { + bot.SendChat(m.Chat.ID, fmt.Sprintf("Already registered %s. Please /deregister first.", co.Name)) + return + } + } + logInfoAlert("botRegister : %s : no such CompanyID : %d", cc.Username, cc.CompanyID) + cc.CompanyID = 255 + } } + coList := make(map[uint8]struct{}) for coID, _ := range srv.Status.Companies { coList[coID] = struct{}{} @@ -195,15 +238,44 @@ func botRegister(m *tb.Message) { } } + if len(coList) == 0 { bot.SendChat(m.Chat.ID, "No company to register") return } + + r := regexp.MustCompile("^\\/register( )+(?P[a-zA-Z\\.\\-0-9 ]+)$") + if r.MatchString(m.Text) { + // we have a parameter + coName := r.ReplaceAllString(m.Text, "${Company}") + for coID, co := range srv.Status.Companies { + if co.Name == coName { + for _, c := range cfg.Clients { + if c.CompanyID == coID { + bot.SendChat(m.Chat.ID, fmt.Sprintf("Company %s is already registered to @%s", coName, c.Username)) + return + } + } + cc.CompanyID = coID + if cc.TimeLeft == 0 { + days := int(time.Now().Sub(cfg.Game.StartDate).Hours() / 24) + cc.TimeLeft = cfg.Game.StartingAllotment + cfg.Game.DailyAllotment*time.Duration(days) + } + bot.SendChat(m.Chat.ID, fmt.Sprintf("@%s registered %s (with %s playable)", cc.Username, srv.Status.Companies[cc.CompanyID].Name, cc.TimeLeft)) + return + } + } + bot.SendChat(m.Chat.ID, fmt.Sprintf("Can't find company %s", coName)) + return + } + if len(coList) == 1 { for id, _ := range coList { cc.CompanyID = id - days := int(time.Now().Sub(cfg.Game.StartDate).Hours() / 24) - cc.TimeLeft = cfg.Game.StartingAllotment + cfg.Game.DailyAllotment*time.Duration(days) + if cc.TimeLeft == 0 { + days := int(time.Now().Sub(cfg.Game.StartDate).Hours() / 24) + cc.TimeLeft = cfg.Game.StartingAllotment + cfg.Game.DailyAllotment*time.Duration(days) + } bot.SendChat(m.Chat.ID, fmt.Sprintf("@%s registered %s (with %s playable)", cc.Username, srv.Status.Companies[cc.CompanyID].Name, cc.TimeLeft)) return } diff --git a/version.go b/version.go index 8b8988c..9d8a435 100644 --- a/version.go +++ b/version.go @@ -1,6 +1,6 @@ // Code generated by version.sh (@generated) DO NOT EDIT. package main -var githash = "38a1d8a" -var buildstamp = "2021-11-08_14:54:17" -var commits = "174" -var version = "38a1d8a-b174 - 2021-11-08_14:54:17" +var githash = "93de432" +var buildstamp = "2021-11-09_05:24:29" +var commits = "175" +var version = "93de432-b175 - 2021-11-09_05:24:29"