Some easter eggs. Ability to find user by name or nickname.
This commit is contained in:
		@@ -74,5 +74,10 @@ func (r *Router) routeGroupRequest(update *tgbotapi.Update, playerRaw *dbmapping
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch {
 | 
			
		||||
	case update.Message.Command() == "long":
 | 
			
		||||
		c.Talkers.LongMessage(update)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return "ok"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -134,7 +134,7 @@ func (r *Router) routePrivateRequest(update *tgbotapi.Update, playerRaw *dbmappi
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				return c.Talkers.AnyMessageUnauthorized(update)
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			case profileMsg.MatchString(text):
 | 
			
		||||
				if c.Users.PlayerBetterThan(playerRaw, "academic") {
 | 
			
		||||
					return c.Users.ForeignProfileMessage(update)
 | 
			
		||||
@@ -142,6 +142,13 @@ func (r *Router) routePrivateRequest(update *tgbotapi.Update, playerRaw *dbmappi
 | 
			
		||||
 | 
			
		||||
				return c.Talkers.AnyMessageUnauthorized(update)
 | 
			
		||||
 | 
			
		||||
			case update.Message.Command() == "find_user":
 | 
			
		||||
				if c.Users.PlayerBetterThan(playerRaw, "academic") {
 | 
			
		||||
					return c.Users.FindByName(update)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				return c.Talkers.AnyMessageUnauthorized(update)
 | 
			
		||||
 | 
			
		||||
			case update.Message.Command() == "squad_add_user":
 | 
			
		||||
				return c.Squader.AddUserToSquad(update, playerRaw)
 | 
			
		||||
			case update.Message.Command() == "squad_add_commander":
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,16 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// LongMessage is an easter egg
 | 
			
		||||
func (t *Talkers) LongMessage(update *tgbotapi.Update) {
 | 
			
		||||
	message := "Я ТЕБЕ НЕ ЗЕЛЁНЫЙ АКСОЛОТЛЬ! А ТЫ - НЕ ЦИФЕРКА!"
 | 
			
		||||
 | 
			
		||||
	msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
 | 
			
		||||
	msg.ReplyToMessageID = update.Message.MessageID
 | 
			
		||||
 | 
			
		||||
	c.Bot.Send(msg)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DurakMessage is an easter egg
 | 
			
		||||
func (t *Talkers) DurakMessage(update *tgbotapi.Update) {
 | 
			
		||||
	reactions := make([]string, 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ func (t *Talkers) HelpMessage(update *tgbotapi.Update, playerRaw *dbmapping.Play
 | 
			
		||||
	}
 | 
			
		||||
	if c.Users.PlayerBetterThan(playerRaw, "academic") {
 | 
			
		||||
		message += "+ /users —  просмотреть зарегистрированных пользователей бота\n"
 | 
			
		||||
		message += "+ /find\\_user _строка_ — найти игрока в боте по его нику или имени. Ник ищется без собачки в начале\n"
 | 
			
		||||
	}
 | 
			
		||||
	message += "+ /help – выводит данное сообщение\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ type TalkersInterface interface {
 | 
			
		||||
	AnyMessageUnauthorized(update *tgbotapi.Update) string
 | 
			
		||||
	BotError(update *tgbotapi.Update) string
 | 
			
		||||
 | 
			
		||||
	LongMessage(update *tgbotapi.Update)
 | 
			
		||||
	DurakMessage(update *tgbotapi.Update)
 | 
			
		||||
	MatMessage(update *tgbotapi.Update)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,43 @@ func (u *Users) FormatUsername(userName string) string {
 | 
			
		||||
	return strings.Replace(userName, "_", "\\_", -1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindByName finds user with such username or nickname
 | 
			
		||||
func (u *Users) FindByName(update *tgbotapi.Update) string {
 | 
			
		||||
	commandArgs := update.Message.CommandArguments()
 | 
			
		||||
	if commandArgs == "" {
 | 
			
		||||
		c.Talkers.BotError(update)
 | 
			
		||||
		return "fail"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	usersArray, ok := u.findUserByName(commandArgs)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return "fail"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	message := "*Найденные игроки:*\n"
 | 
			
		||||
 | 
			
		||||
	for i := range usersArray {
 | 
			
		||||
		message += "#" + strconv.Itoa(usersArray[i].Player.ID)
 | 
			
		||||
		message += " " + usersArray[i].League.Symbol
 | 
			
		||||
		message += " " + usersArray[i].Profile.Nickname
 | 
			
		||||
		if usersArray[i].Profile.TelegramNickname != "" {
 | 
			
		||||
			message += " (@" + u.FormatUsername(usersArray[i].Profile.TelegramNickname) + ")"
 | 
			
		||||
		}
 | 
			
		||||
		message += " /profile" + strconv.Itoa(usersArray[i].Player.ID) + "\n"
 | 
			
		||||
		message += "Telegram ID: " + strconv.Itoa(usersArray[i].Player.TelegramID) + "\n"
 | 
			
		||||
		message += "Последнее обновление: " + usersArray[i].Profile.CreatedAt.Format("02.01.2006 15:04:05") + "\n"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	c.Log.Debug(message)
 | 
			
		||||
 | 
			
		||||
	msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
 | 
			
		||||
	msg.ParseMode = "Markdown"
 | 
			
		||||
 | 
			
		||||
	c.Bot.Send(msg)
 | 
			
		||||
 | 
			
		||||
	return "ok"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ForeignProfileMessage shows profile of another user
 | 
			
		||||
func (u *Users) ForeignProfileMessage(update *tgbotapi.Update) string {
 | 
			
		||||
	userNum := strings.TrimPrefix(update.Message.Command(), "profile")
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import (
 | 
			
		||||
	"github.com/go-telegram-bot-api/telegram-bot-api"
 | 
			
		||||
	"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Internal functions for Users package
 | 
			
		||||
@@ -47,6 +48,26 @@ func (u *Users) getUsersWithProfiles() ([]dbmapping.PlayerProfile, bool) {
 | 
			
		||||
	return usersArray, true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (u *Users) findUserByName(pattern string) ([]dbmapping.PlayerProfile, bool) {
 | 
			
		||||
	allUsers, ok := u.getUsersWithProfiles()
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return allUsers, ok
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	selectedUsers := []dbmapping.PlayerProfile{}
 | 
			
		||||
 | 
			
		||||
	for i := range allUsers {
 | 
			
		||||
		user := allUsers[i]
 | 
			
		||||
		if user.HaveProfile {
 | 
			
		||||
			if strings.Contains(user.Profile.TelegramNickname, pattern) || strings.Contains(user.Profile.Nickname, pattern) {
 | 
			
		||||
				selectedUsers = append(selectedUsers, user)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return selectedUsers, true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (u *Users) profileAddSuccessMessage(update *tgbotapi.Update, leagueID int, level int) {
 | 
			
		||||
	message := "*Профиль успешно обновлен.*\n\n"
 | 
			
		||||
	message += "Функциональность бота держится на актуальности профилей. Обновляйся почаще, и да пребудет с тобой Рандом!\n"
 | 
			
		||||
@@ -54,9 +75,10 @@ func (u *Users) profileAddSuccessMessage(update *tgbotapi.Update, leagueID int,
 | 
			
		||||
	message += "/best – посмотреть лучших покемемов для поимки"
 | 
			
		||||
 | 
			
		||||
	if leagueID == 1 {
 | 
			
		||||
		message += "\nЗаходи в Бастион Инстинкта: https://t.me/joinchat/G2vME0mIX-QHjjxE\\_JBzoQ\n"
 | 
			
		||||
		if level < 5 {
 | 
			
		||||
			message += "\nАкадемия Инстинкта: все вопросы по игре, обучение и помощь новичку: https://t.me/joinchat/G2vME04jk02v2etRmumylg\n"
 | 
			
		||||
		if level < 4 {
 | 
			
		||||
			message += "\nЗаходи в Академию Инстинкта: все вопросы по игре, обучение и помощь новичку: https://t.me/joinchat/G2vME04jk02v2etRmumylg\n"
 | 
			
		||||
		} else {
 | 
			
		||||
			message += "\nЗаходи в Бастион Инстинкта: https://t.me/joinchat/G2vME0mIX-QHjjxE\\_JBzoQ\n"
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ type UsersInterface interface {
 | 
			
		||||
	GetPlayerByID(playerID int) (dbmapping.Player, bool)
 | 
			
		||||
	PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) bool
 | 
			
		||||
 | 
			
		||||
	FindByName(update *tgbotapi.Update) string
 | 
			
		||||
	ForeignProfileMessage(update *tgbotapi.Update) string
 | 
			
		||||
	FormatUsername(userName string) string
 | 
			
		||||
	ProfileMessage(update *tgbotapi.Update, playerRaw *dbmapping.Player) string
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user