Visual fixes in broadcast messages, some fixes in squader
He protec, but he also attac!
This commit is contained in:
parent
49fd750df9
commit
413bf22f16
@ -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
49
lib/squader/restricter.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
@ -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"
|
||||||
|
@ -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 {
|
||||||
|
@ -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)
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user