diff --git a/lib/chatter/responders.go b/lib/chatter/responders.go index 36251dc..9193e3c 100644 --- a/lib/chatter/responders.go +++ b/lib/chatter/responders.go @@ -15,6 +15,10 @@ func (ct *Chatter) GroupsList(update *tgbotapi.Update) string { return "fail" } + bastionChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.BastionID, 10, 64) + defaultChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.DefaultID, 10, 64) + hqChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.HeadquartersID, 10, 64) + message := "*Бот состоит в следующих групповых чатах:*\n" for i := range groupChats { @@ -27,7 +31,17 @@ func (ct *Chatter) GroupsList(update *tgbotapi.Update) string { } else if groupChats[i].ChatRole == "flood" { message += "Является флудочатом отряда №" + strconv.Itoa(groupChats[i].Squad.ID) + "\n" } else { - message += "Не является отрядом.\n" + if groupChats[i].Chat.TelegramID == bastionChatID { + message += "Является бастионом лиги\n" + } + + if groupChats[i].Chat.TelegramID == defaultChatID { + message += "Является чатом по умолчанию лиги\n" + } + + if groupChats[i].Chat.TelegramID == hqChatID { + message += "Является чатом совета лиги\n" + } } } diff --git a/lib/squader/responders.go b/lib/squader/responders.go index 05f8c0f..3cc2970 100644 --- a/lib/squader/responders.go +++ b/lib/squader/responders.go @@ -23,6 +23,10 @@ func (s *Squader) SquadsList(update *tgbotapi.Update, playerRaw *dbmapping.Playe } message := "*Наши отряды:*\n" + message += "---\n" + message += "[#0] _Бастион Инстинкта_\n" + message += "Telegram ID: " + c.Cfg.SpecialChats.BastionID + "\n" + message += "Игроки по умолчанию оказываются здесь.\n" for i := range squads { message += "---\n" diff --git a/lib/squader/squader.go b/lib/squader/squader.go index 5661b6c..b6c97aa 100644 --- a/lib/squader/squader.go +++ b/lib/squader/squader.go @@ -236,14 +236,18 @@ func (s *Squader) kickUserFromSquadChat(user *tgbotapi.User, chatRaw *dbmapping. } } - commanders, ok := s.getCommandersForSquadViaChat(chatRaw) - if ok { - for i := range commanders { - message := "Некто " + c.Users.FormatUsername(suerName) + " попытался зайти в чат _" + chatRaw.Name + "_ и был изгнан ботом, так как не имеет на это прав." + bastionChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.BastionID, 10, 64) + if chatRaw.TelegramID != bastionChatID { + // In Bastion notifications are public in default chat + commanders, ok := s.getCommandersForSquadViaChat(chatRaw) + if ok { + for i := range commanders { + message := "Некто " + c.Users.FormatUsername(suerName) + " попытался зайти в чат _" + chatRaw.Name + "_ и был изгнан ботом, так как не имеет на это прав." - msg := tgbotapi.NewMessage(int64(commanders[i].TelegramID), message) - msg.ParseMode = "Markdown" - c.Bot.Send(msg) + msg := tgbotapi.NewMessage(int64(commanders[i].TelegramID), message) + msg.ParseMode = "Markdown" + c.Bot.Send(msg) + } } } } @@ -489,3 +493,52 @@ func (s *Squader) ProcessMessage(update *tgbotapi.Update, chatRaw *dbmapping.Cha return "ok" } + +// ProtectBastion avoids spies and no-profile players to join Bastion +func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User) string { + defaultChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.DefaultID, 10, 64) + userName := "" + if newUser.UserName != "" { + userName += "@" + newUser.UserName + } else { + userName += newUser.FirstName + if newUser.LastName != "" { + userName += " " + newUser.LastName + } + } + + chatRaw, ok := c.Chatter.GetOrCreateChat(update) + if !ok { + return "fail" + } + + playerRaw, ok := c.Users.GetOrCreatePlayer(newUser.ID) + if !ok { + s.kickUserFromSquadChat(newUser, &chatRaw) + return "fail" + } + + if playerRaw.LeagueID != 1 { + // Check for profile + _, profileOK := c.Users.GetProfile(playerRaw.ID) + if !profileOK { + message := "Привет, " + c.Users.FormatUsername(userName) + "! Напиши мне и скинь профиль для доступа в чаты Лиги!" + + msg := tgbotapi.NewMessage(defaultChatID, message) + msg.ParseMode = "Markdown" + + c.Bot.Send(msg) + } else { + message := "Привет, " + c.Users.FormatUsername(userName) + "! Там переход между лигами не завезли случайно? Переходи в нашу Лигу, будем рады тебя видеть... а пока — вход в наши чаты закрыт!" + + msg := tgbotapi.NewMessage(defaultChatID, message) + msg.ParseMode = "Markdown" + + c.Bot.Send(msg) + } + s.kickUserFromSquadChat(newUser, &chatRaw) + return "fail" + } + + return "ok" +} diff --git a/lib/squader/squaderinterface/squaderinterface.go b/lib/squader/squaderinterface/squaderinterface.go index 492f6d6..c27dec5 100644 --- a/lib/squader/squaderinterface/squaderinterface.go +++ b/lib/squader/squaderinterface/squaderinterface.go @@ -27,4 +27,5 @@ type SquaderInterface interface { SquadsList(update *tgbotapi.Update, playerRaw *dbmapping.Player) string ProcessMessage(update *tgbotapi.Update, chatRaw *dbmapping.Chat) string + ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User) string } diff --git a/lib/welcomer/responders.go b/lib/welcomer/responders.go index 43badeb..f8108f5 100644 --- a/lib/welcomer/responders.go +++ b/lib/welcomer/responders.go @@ -53,9 +53,15 @@ func (w *Welcomer) GroupWelcomeMessage(update *tgbotapi.Update) string { w.groupStartMessage(update) } else { defaultGroupID, _ := strconv.ParseInt(c.Cfg.SpecialChats.HeadquartersID, 10, 64) + bastionGroupID, _ := strconv.ParseInt(c.Cfg.SpecialChats.BastionID, 10, 64) + if update.Message.Chat.ID == defaultGroupID { w.groupWelcomeUser(update, &newUser) } + + if update.Message.Chat.ID == bastionGroupID { + c.Squader.ProtectBastion(update, &newUser) + } } }