Bastion protection system
This commit is contained in:
parent
ca147a99a3
commit
e9a1642521
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user