From 7ecc73cbc3f80055a641f7dceda8f58972864bc1 Mon Sep 17 00:00:00 2001 From: Vladimir Hodakov Date: Wed, 29 Nov 2017 11:50:14 +0400 Subject: [PATCH] Ban and kick for Bastion separated, and added notifications --- lib/squader/squader.go | 66 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/lib/squader/squader.go b/lib/squader/squader.go index fc301bc..37be823 100644 --- a/lib/squader/squader.go +++ b/lib/squader/squader.go @@ -216,6 +216,60 @@ func (s *Squader) kickUserFromSquadChat(user *tgbotapi.User, chatRaw *dbmapping. UserID: user.ID, } + allNo := false + kickConfig := tgbotapi.RestrictChatMemberConfig{ + ChatMemberConfig: chatUserConfig, + UntilDate: 1893456000, + CanSendMessages: &allNo, + CanSendMediaMessages: &allNo, + CanAddWebPagePreviews: &allNo, + CanSendOtherMessages: &allNo, + } + + _, err := c.Bot.RestrictChatMember(kickConfig) + if err != nil { + c.Log.Error(err.Error()) + } + + suerName := "" + if user.UserName != "" { + suerName = "@" + user.UserName + } else { + suerName = user.FirstName + if user.LastName != "" { + suerName += " " + user.LastName + } + } + + bastionChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.BastionID, 10, 64) + hqChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.HeadquartersID, 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) + } + } + } else { + message := "Некто " + c.Users.FormatUsername(suerName) + " без профиля попытался зайти в чат _Бастион Инстинкта_ и был изгнан ботом, так как не имеет на это прав." + + msg := tgbotapi.NewMessage(hqChatID, message) + msg.ParseMode = "Markdown" + c.Bot.Send(msg) + } +} + +func (s *Squader) banUserFromSquadChat(user *tgbotapi.User, chatRaw *dbmapping.Chat) { + chatUserConfig := tgbotapi.ChatMemberConfig{ + ChatID: chatRaw.TelegramID, + UserID: user.ID, + } + kickConfig := tgbotapi.KickChatMemberConfig{ ChatMemberConfig: chatUserConfig, UntilDate: 1893456000, @@ -237,18 +291,25 @@ func (s *Squader) kickUserFromSquadChat(user *tgbotapi.User, chatRaw *dbmapping. } bastionChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.BastionID, 10, 64) + hqChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.HeadquartersID, 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 + "_ и был изгнан ботом, так как не имеет на это прав." + message := "Некто " + c.Users.FormatUsername(suerName) + " попытался зайти в чат _" + chatRaw.Name + "_ и был изгнан ботом, так как является шпионом." msg := tgbotapi.NewMessage(int64(commanders[i].TelegramID), message) msg.ParseMode = "Markdown" c.Bot.Send(msg) } } + } else { + message := "Некто " + c.Users.FormatUsername(suerName) + " попытался зайти в чат _Бастион Инстинкта_ и был изгнан ботом, так как является шпионом." + + msg := tgbotapi.NewMessage(hqChatID, message) + msg.ParseMode = "Markdown" + c.Bot.Send(msg) } } @@ -572,6 +633,7 @@ func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User msg.ParseMode = "Markdown" c.Bot.Send(msg) + s.kickUserFromSquadChat(newUser, &chatRaw) } else { message := "Привет, " + c.Users.FormatUsername(userName) + "! Там переход между лигами не завезли случайно? Переходи в нашу Лигу, будем рады тебя видеть... а пока — вход в наши чаты закрыт!" @@ -579,8 +641,8 @@ func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User msg.ParseMode = "Markdown" c.Bot.Send(msg) + s.banUserFromSquadChat(newUser, &chatRaw) } - s.kickUserFromSquadChat(newUser, &chatRaw) return "fail" } }