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"
|
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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
@ -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"
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user