Archived
1

Bastion protection system

This commit is contained in:
Vladimir Hodakov 2017-11-26 17:28:26 +04:00
parent ca147a99a3
commit e9a1642521
5 changed files with 86 additions and 8 deletions

View File

@ -15,6 +15,10 @@ func (ct *Chatter) GroupsList(update *tgbotapi.Update) string {
return "fail" 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" message := "*Бот состоит в следующих групповых чатах:*\n"
for i := range groupChats { for i := range groupChats {
@ -27,7 +31,17 @@ func (ct *Chatter) GroupsList(update *tgbotapi.Update) string {
} else if groupChats[i].ChatRole == "flood" { } else if groupChats[i].ChatRole == "flood" {
message += "Является флудочатом отряда №" + strconv.Itoa(groupChats[i].Squad.ID) + "\n" message += "Является флудочатом отряда №" + strconv.Itoa(groupChats[i].Squad.ID) + "\n"
} else { } 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"
}
} }
} }

View File

@ -23,6 +23,10 @@ func (s *Squader) SquadsList(update *tgbotapi.Update, playerRaw *dbmapping.Playe
} }
message := "*Наши отряды:*\n" message := "*Наши отряды:*\n"
message += "---\n"
message += "[#0] _Бастион Инстинкта_\n"
message += "Telegram ID: " + c.Cfg.SpecialChats.BastionID + "\n"
message += "Игроки по умолчанию оказываются здесь.\n"
for i := range squads { for i := range squads {
message += "---\n" message += "---\n"

View File

@ -236,14 +236,18 @@ func (s *Squader) kickUserFromSquadChat(user *tgbotapi.User, chatRaw *dbmapping.
} }
} }
commanders, ok := s.getCommandersForSquadViaChat(chatRaw) bastionChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.BastionID, 10, 64)
if ok { if chatRaw.TelegramID != bastionChatID {
for i := range commanders { // In Bastion notifications are public in default chat
message := "Некто " + c.Users.FormatUsername(suerName) + " попытался зайти в чат _" + chatRaw.Name + "_ и был изгнан ботом, так как не имеет на это прав." 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 := tgbotapi.NewMessage(int64(commanders[i].TelegramID), message)
msg.ParseMode = "Markdown" msg.ParseMode = "Markdown"
c.Bot.Send(msg) c.Bot.Send(msg)
}
} }
} }
} }
@ -489,3 +493,52 @@ func (s *Squader) ProcessMessage(update *tgbotapi.Update, chatRaw *dbmapping.Cha
return "ok" 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"
}

View File

@ -27,4 +27,5 @@ type SquaderInterface interface {
SquadsList(update *tgbotapi.Update, playerRaw *dbmapping.Player) string SquadsList(update *tgbotapi.Update, playerRaw *dbmapping.Player) string
ProcessMessage(update *tgbotapi.Update, chatRaw *dbmapping.Chat) string ProcessMessage(update *tgbotapi.Update, chatRaw *dbmapping.Chat) string
ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User) string
} }

View File

@ -53,9 +53,15 @@ func (w *Welcomer) GroupWelcomeMessage(update *tgbotapi.Update) string {
w.groupStartMessage(update) w.groupStartMessage(update)
} else { } else {
defaultGroupID, _ := strconv.ParseInt(c.Cfg.SpecialChats.HeadquartersID, 10, 64) defaultGroupID, _ := strconv.ParseInt(c.Cfg.SpecialChats.HeadquartersID, 10, 64)
bastionGroupID, _ := strconv.ParseInt(c.Cfg.SpecialChats.BastionID, 10, 64)
if update.Message.Chat.ID == defaultGroupID { if update.Message.Chat.ID == defaultGroupID {
w.groupWelcomeUser(update, &newUser) w.groupWelcomeUser(update, &newUser)
} }
if update.Message.Chat.ID == bastionGroupID {
c.Squader.ProtectBastion(update, &newUser)
}
} }
} }