Archived
1

Visual fixes in broadcast messages, some fixes in squader

He protec, but he also attac!
This commit is contained in:
Vladimir Hodakov 2017-12-20 21:45:32 +04:00
parent 49fd750df9
commit 413bf22f16
6 changed files with 105 additions and 107 deletions

View File

@ -43,7 +43,7 @@ func (b *Broadcaster) AdminBroadcastMessageSend(update *tgbotapi.Update, playerR
for i := range privateChats { for i := range privateChats {
chat := privateChats[i] chat := privateChats[i]
broadcastingMessage := "*Привет, " + chat.Name + "!*\n\n" broadcastingMessage := "*Привет, " + chat.Name + "!*\n\n"
broadcastingMessage += "*Важное сообщение от администратора " + update.Message.From.FirstName + " " + update.Message.From.LastName + "* (@" + update.Message.From.UserName + ")\n\n" broadcastingMessage += "*Важное сообщение от администратора " + c.Users.GetPrettyName(update.Message.From) + "\n\n"
broadcastingMessage += broadcastingMessageBody broadcastingMessage += broadcastingMessageBody
msg := tgbotapi.NewMessage(int64(chat.TelegramID), broadcastingMessage) msg := tgbotapi.NewMessage(int64(chat.TelegramID), broadcastingMessage)

49
lib/squader/restricter.go Normal file
View File

@ -0,0 +1,49 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package squader
import (
"github.com/go-telegram-bot-api/telegram-bot-api"
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
"strconv"
)
func (s *Squader) kickUserFromSquadChat(user *tgbotapi.User, chatRaw *dbmapping.Chat) {
chatUserConfig := tgbotapi.ChatMemberConfig{
ChatID: chatRaw.TelegramID,
UserID: user.ID,
}
kickConfig := tgbotapi.KickChatMemberConfig{
ChatMemberConfig: chatUserConfig,
UntilDate: 1893456000,
}
_, err := c.Bot.KickChatMember(kickConfig)
if err != nil {
c.Log.Error(err.Error())
}
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.GetPrettyName(user) + " попытался зайти в чат _" + chatRaw.Name + "_ и был изгнан ботом, так как не имеет права посещать этот чат."
msg := tgbotapi.NewMessage(int64(commanders[i].TelegramID), message)
msg.ParseMode = "Markdown"
c.Bot.Send(msg)
}
}
} else {
message := "Некто " + c.Users.GetPrettyName(user) + " попытался зайти в чат _Бастион Инстинкта_ и был изгнан ботом, так как не имеет права посещать этот чат."
msg := tgbotapi.NewMessage(hqChatID, message)
msg.ParseMode = "Markdown"
c.Bot.Send(msg)
}
}

View File

@ -210,55 +210,6 @@ func (s *Squader) getCommandersForSquadViaChat(chatRaw *dbmapping.Chat) ([]dbmap
return commanders, true return commanders, true
} }
func (s *Squader) kickUserFromSquadChat(user *tgbotapi.User, chatRaw *dbmapping.Chat) {
chatUserConfig := tgbotapi.ChatMemberConfig{
ChatID: chatRaw.TelegramID,
UserID: user.ID,
}
kickConfig := tgbotapi.KickChatMemberConfig{
ChatMemberConfig: chatUserConfig,
UntilDate: 1893456000,
}
_, err := c.Bot.KickChatMember(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) squadCreationDuplicate(update *tgbotapi.Update) string { func (s *Squader) squadCreationDuplicate(update *tgbotapi.Update) string {
message := "*Отряд уже существует*\n" message := "*Отряд уже существует*\n"
message += "Проверьте, правильно ли вы ввели команду, и повторите попытку." message += "Проверьте, правильно ли вы ввели команду, и повторите попытку."
@ -452,39 +403,32 @@ func (s *Squader) ProcessMessage(update *tgbotapi.Update, chatRaw *dbmapping.Cha
newUsers := *update.Message.NewChatMembers newUsers := *update.Message.NewChatMembers
if len(newUsers) > 0 { if len(newUsers) > 0 {
for i := range newUsers { for i := range newUsers {
playerRaw, ok := c.Users.GetOrCreatePlayer(newUsers[i].ID) switch strings.ToLower(newUsers[i].UserName) {
if !ok { case "gantz_yaka":
s.kickUserFromSquadChat(&newUsers[i], chatRaw)
messageProcessed = true messageProcessed = true
} case "agentpb":
availableChats, ok := s.GetAvailableSquadChatsForUser(&playerRaw)
if !ok {
s.kickUserFromSquadChat(&newUsers[i], chatRaw)
messageProcessed = true messageProcessed = true
} case "pbhelp":
messageProcessed = true
isChatValid := false default:
for i := range availableChats { playerRaw, ok := c.Users.GetOrCreatePlayer(newUsers[i].ID)
if availableChats[i] == *chatRaw { if !ok {
isChatValid = true s.kickUserFromSquadChat(&newUsers[i], chatRaw)
messageProcessed = true
} }
}
// Dirty hack availableChats, ok := s.GetAvailableSquadChatsForUser(&playerRaw)
if update.Message.Chat.ID == -1001396321727 || update.Message.Chat.ID == -1001310954317 { if !ok {
isChatValid = true s.kickUserFromSquadChat(&newUsers[i], chatRaw)
}
if !isChatValid {
switch strings.ToLower(newUsers[i].UserName) {
case "gantz_yaka":
messageProcessed = true messageProcessed = true
case "agentpb": }
messageProcessed = true isChatValid := false
case "pbhelp": for i := range availableChats {
messageProcessed = true if *chatRaw == availableChats[i] {
default: isChatValid = true
}
}
if !isChatValid {
s.kickUserFromSquadChat(&newUsers[i], chatRaw) s.kickUserFromSquadChat(&newUsers[i], chatRaw)
messageProcessed = true messageProcessed = true
} }
@ -518,15 +462,6 @@ func (s *Squader) ProcessMessage(update *tgbotapi.Update, chatRaw *dbmapping.Cha
// ProtectBastion avoids spies and no-profile players to join Bastion // ProtectBastion avoids spies and no-profile players to join Bastion
func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User) string { func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User) string {
defaultChatID, _ := strconv.ParseInt(c.Cfg.SpecialChats.DefaultID, 10, 64) 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) chatRaw, ok := c.Chatter.GetOrCreateChat(update)
if !ok { if !ok {
@ -535,12 +470,12 @@ func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User
playerRaw, ok := c.Users.GetOrCreatePlayer(newUser.ID) playerRaw, ok := c.Users.GetOrCreatePlayer(newUser.ID)
if !ok { if !ok {
switch newUser.UserName { switch strings.ToLower(newUser.UserName) {
case "gantz_yaka": case "gantz_yaka":
// do nothing // do nothing
case "@agentpb": case "agentpb":
// do nothing // do nothing
case "@pbhelp": case "pbhelp":
// do nothing // do nothing
default: default:
s.kickUserFromSquadChat(newUser, &chatRaw) s.kickUserFromSquadChat(newUser, &chatRaw)
@ -558,7 +493,7 @@ func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User
msg.ParseMode = "Markdown" msg.ParseMode = "Markdown"
c.Bot.Send(msg) c.Bot.Send(msg)
case "@agentpb": case "agentpb":
message := "Здравствуй, " + newUser.UserName + "!\n" message := "Здравствуй, " + newUser.UserName + "!\n"
message += "Инстинкт рад приветствовать одного из богов мира ПокемемБро! Проходите, располагайтесь, чувствуйте себя, как дома.\n" message += "Инстинкт рад приветствовать одного из богов мира ПокемемБро! Проходите, располагайтесь, чувствуйте себя, как дома.\n"
@ -566,7 +501,7 @@ func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User
msg.ParseMode = "Markdown" msg.ParseMode = "Markdown"
c.Bot.Send(msg) c.Bot.Send(msg)
case "@pbhelp": case "pbhelp":
message := "Здравствуй, " + newUser.UserName + "!\n" message := "Здравствуй, " + newUser.UserName + "!\n"
message += "Инстинкт рад приветствовать одного из богов мира ПокемемБро! Проходите, располагайтесь, чувствуйте себя, как дома.\n" message += "Инстинкт рад приветствовать одного из богов мира ПокемемБро! Проходите, располагайтесь, чувствуйте себя, как дома.\n"
@ -578,14 +513,14 @@ func (s *Squader) ProtectBastion(update *tgbotapi.Update, newUser *tgbotapi.User
// Check for profile // Check for profile
_, profileOK := c.Users.GetProfile(playerRaw.ID) _, profileOK := c.Users.GetProfile(playerRaw.ID)
if !profileOK { if !profileOK {
message := "Привет, " + c.Users.FormatUsername(userName) + "! Напиши мне и скинь профиль для доступа в чаты Лиги!" message := "Привет, " + c.Users.GetPrettyName(newUser) + "! Напиши мне и скинь профиль для доступа в чаты Лиги!"
msg := tgbotapi.NewMessage(defaultChatID, message) msg := tgbotapi.NewMessage(defaultChatID, message)
msg.ParseMode = "Markdown" msg.ParseMode = "Markdown"
c.Bot.Send(msg) c.Bot.Send(msg)
} else { } else {
message := "Привет, " + c.Users.FormatUsername(userName) + "! Там переход между лигами не завезли случайно? Переходи в нашу Лигу, будем рады тебя видеть... а пока — вход в наши чаты закрыт!" message := "Привет, " + c.Users.GetPrettyName(newUser) + "! Там переход между лигами не завезли случайно? Переходи в нашу Лигу, будем рады тебя видеть... а пока — вход в наши чаты закрыт!"
msg := tgbotapi.NewMessage(defaultChatID, message) msg := tgbotapi.NewMessage(defaultChatID, message)
msg.ParseMode = "Markdown" msg.ParseMode = "Markdown"
@ -619,8 +554,17 @@ func (s *Squader) FilterBastion(update *tgbotapi.Update) string {
return "fail" return "fail"
} }
if playerRaw.LeagueID != 1 { if playerRaw.LeagueID != 1 {
s.kickUserFromSquadChat(user, &chatRaw) switch strings.ToLower(user.UserName) {
return "fail" case "gantz_yaka":
// do nothing
case "agentpb":
// do nothing
case "pbhelp":
// do nothing
default:
s.kickUserFromSquadChat(user, &chatRaw)
return "fail"
}
} }
return "ok" return "ok"

View File

@ -4,6 +4,7 @@
package users package users
import ( import (
"github.com/go-telegram-bot-api/telegram-bot-api"
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping" "lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
"time" "time"
) )
@ -59,6 +60,19 @@ func (u *Users) GetOrCreatePlayer(telegramID int) (dbmapping.Player, bool) {
return playerRaw, true return playerRaw, true
} }
// GetPrettyName returns "pretty" name of user (first_name + last name or username)
func (u *Users) GetPrettyName(user *tgbotapi.User) string {
userName := user.FirstName
if user.LastName != "" {
userName += " " + user.LastName
}
if user.UserName != "" {
userName += " (@" + user.UserName + ")"
}
return c.Users.FormatUsername(userName)
}
// PlayerBetterThan return true, if profile is more or equal powerful than // PlayerBetterThan return true, if profile is more or equal powerful than
// provided power level // provided power level
func (u *Users) PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) bool { func (u *Users) PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) bool {

View File

@ -14,6 +14,7 @@ type UsersInterface interface {
ParseProfile(update *tgbotapi.Update, playerRaw *dbmapping.Player) string ParseProfile(update *tgbotapi.Update, playerRaw *dbmapping.Player) string
GetPrettyName(user *tgbotapi.User) string
GetProfile(playerID int) (dbmapping.Profile, bool) GetProfile(playerID int) (dbmapping.Profile, bool)
GetOrCreatePlayer(telegramID int) (dbmapping.Player, bool) GetOrCreatePlayer(telegramID int) (dbmapping.Player, bool)
GetPlayerByID(playerID int) (dbmapping.Player, bool) GetPlayerByID(playerID int) (dbmapping.Player, bool)

View File

@ -16,18 +16,8 @@ func (w *Welcomer) groupWelcomeUser(update *tgbotapi.Update, newUser *tgbotapi.U
_, profileExist := c.Users.GetProfile(playerRaw.ID) _, profileExist := c.Users.GetProfile(playerRaw.ID)
userName := ""
if newUser.UserName != "" {
userName += "@" + newUser.UserName
} else {
userName += newUser.FirstName
if newUser.LastName != "" {
userName += " " + newUser.LastName
}
}
message := "*Бот Инстинкта приветствует тебя, *" message := "*Бот Инстинкта приветствует тебя, *"
message += c.Users.FormatUsername(userName) message += c.Users.GetPrettyName(newUser)
message += "*!*\n\n" message += "*!*\n\n"
if profileExist { if profileExist {