diff --git a/bot.go b/bot.go index abef6c0..a9f478a 100644 --- a/bot.go +++ b/bot.go @@ -75,6 +75,7 @@ func (b *Bot) BotHandlers() { b.bot.Handle("/say", botSay) b.bot.Handle("/help", botHelp) b.bot.Handle("/transfer", botTransfer) + b.bot.Handle("/version", botVersion) b.bot.Handle(tb.OnPhoto, botPhoto) b.bot.Handle(tb.OnChannelPost, botChannelPost) @@ -133,7 +134,7 @@ func botUnpause(m *tb.Message) { func botDelete(m *tb.Message) { logInfoDebug("[%d] %s(%d) | %s(%d) : delete : %s\n", m.ID, m.Chat.Title, m.Chat.ID, m.Sender.Username, m.Sender.ID, m.Text) - r := regexp.MustCompile("/delete (?P[0-9]+)") + r := regexp.MustCompile("\\/delete (?P[0-9]+)") id := uint8(255) if r.MatchString(m.Text) { ID64, _ := strconv.ParseInt(r.ReplaceAllString(m.Text, "${CompanyID}"), 10, 64) @@ -238,7 +239,7 @@ func botGive(m *tb.Message) { return } - r := regexp.MustCompile("^/give @(?P[a-zA-Z0-9]+) (?P[a-z0-9]+)") + r := regexp.MustCompile("^\\/give @(?P[a-zA-Z0-9]+) (?P[a-z0-9]+)") if !r.MatchString(m.Text) { bot.SendChat(m.Chat.ID, "Wrong format.") @@ -270,8 +271,18 @@ func botGive(m *tb.Message) { bot.SendChat(m.Chat.ID, fmt.Sprintf("@%s now has %s left.", uStr, cc.TimeLeft.Round(time.Second))) } +func botVersion(m *tb.Message) { + bot.SendChat(m.Chat.ID, version) + return +} + func botTransfer(m *tb.Message) { - r := regexp.MustCompile("^/transfer @(?P[a-zA-Z0-9]+) (?P[a-z0-9]+)") + r := regexp.MustCompile("^\\/transfer @(?P[a-zA-Z0-9]+) (?P[a-z0-9]+)") + + if !r.MatchString(m.Text) { + bot.SendChat(m.Chat.ID, "Wrong usage.") + return + } ccFrom, ok := cfg.Clients[m.Sender.ID] if !ok { @@ -318,7 +329,7 @@ func botTake(m *tb.Message) { return } - r := regexp.MustCompile("^/take @(?P[a-zA-Z0-9]+) (?P[a-z0-9]+)") + r := regexp.MustCompile("^\\/take @(?P[a-zA-Z0-9]+) (?P[a-z0-9]+)") if !r.MatchString(m.Text) { bot.SendChat(m.Chat.ID, "Wrong format.") @@ -363,9 +374,10 @@ func botHelp(m *tb.Message) { msg = fmt.Sprintf("%s/players - list players\r\n", msg) msg = fmt.Sprintf("%s/give - give time to player\r\n", msg) msg = fmt.Sprintf("%s/take - take time from player\r\n", msg) - msg = fmt.Sprintf("%s/transfer - transfer time to player\r\n", msg) + msg = fmt.Sprintf("%s/transfer - transfer time between players\r\n", msg) msg = fmt.Sprintf("%s/passwd - change passwd\r\n", msg) msg = fmt.Sprintf("%s/say - send msg to the game\r\n", msg) + msg = fmt.Sprintf("%s/version - version\r\n", msg) msg = fmt.Sprintf("%s/help - this\r\n", msg) bot.SendChat(m.Chat.ID, msg) @@ -426,6 +438,46 @@ func botPasswd(m *tb.Message) { } func botDeregister(m *tb.Message) { + r := regexp.MustCompile("^\\/deregister @(?P[a-zA-Z0-9]+)$") + if r.MatchString(m.Text) { + if m.Sender.ID != int(cfg.Telegram.AdminID) { + bot.SendChat(m.Chat.ID, "Not admin.") + return + } + + uStr := r.ReplaceAllString(m.Text, "${Username}") + var uID int + + for ccID, cc := range cfg.Clients { + if cc.Username == uStr { + uID = ccID + } + } + + if uID == 0 { + bot.SendChat(m.Chat.ID, "No such user found.") + return + } + + cc := cfg.Clients[uID] + + 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.Round(time.Second))) + 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.Round(time.Second))) + return + } + + return + } + cc, ok := cfg.Clients[m.Sender.ID] if !ok { cc = &ClientConfig{ @@ -566,7 +618,7 @@ func botQuery(q *tb.Query) { } func botText(m *tb.Message) { - r := regexp.MustCompile("^/delete_(?P[a-f0-9]{16})$") + r := regexp.MustCompile("^\\/delete_(?P[a-f0-9]{16})$") if r.MatchString(m.Text) { ref := r.ReplaceAllString(m.Text, "${Ref}") d, ok := companyDeleteMap[ref] diff --git a/config.go b/config.go index 6d6b103..98f5ba5 100644 --- a/config.go +++ b/config.go @@ -101,6 +101,9 @@ func (c *Config) Export() ([]byte, error) { } func (c *Config) CompanyIsRegistered(id uint8) bool { + if id == 255 { + return false + } for _, cc := range c.Clients { if cc.CompanyID == id { return true diff --git a/version.go b/version.go index 3796a07..f283e6c 100644 --- a/version.go +++ b/version.go @@ -1,6 +1,6 @@ // Code generated by version.sh (@generated) DO NOT EDIT. package main -var githash = "cd98db8" -var buildstamp = "2021-11-28_13:25:25" -var commits = "209" -var version = "cd98db8-b209 - 2021-11-28_13:25:25" +var githash = "3b878e0" +var buildstamp = "2021-11-28_13:40:44" +var commits = "210" +var version = "3b878e0-b210 - 2021-11-28_13:40:44"