Archived
1
This repository has been archived on 2022-11-04. You can view files and clone it, but cannot push or open issues or pull requests.
i2_bot/lib/users/users.go

184 lines
7.1 KiB
Go
Raw Normal View History

2017-10-11 06:53:50 +04:00
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package users
2017-10-11 06:53:50 +04:00
import (
2018-01-21 23:28:53 +04:00
"git.wtfteam.pro/fat0troll/i2_bot/lib/dbmapping"
2018-01-23 20:13:16 +04:00
"github.com/go-telegram-bot-api/telegram-bot-api"
2017-11-24 00:16:22 +04:00
"strconv"
2017-10-11 06:53:50 +04:00
)
// Internal functions for Users package
2017-11-24 00:16:22 +04:00
func (u *Users) getUsersWithProfiles() ([]dbmapping.PlayerProfile, bool) {
usersArray := []dbmapping.PlayerProfile{}
players := []dbmapping.Player{}
err := c.Db.Select(&players, "SELECT * FROM players")
if err != nil {
c.Log.Error(err)
return usersArray, false
}
for i := range players {
playerWithProfile := dbmapping.PlayerProfile{}
profile, ok := u.GetProfile(players[i].ID)
if !ok {
playerWithProfile.HaveProfile = false
} else {
playerWithProfile.HaveProfile = true
}
playerWithProfile.Profile = profile
playerWithProfile.Player = players[i]
league := dbmapping.League{}
if players[i].LeagueID != 0 {
err = c.Db.Get(&league, c.Db.Rebind("SELECT * FROM leagues WHERE id=?"), players[i].LeagueID)
if err != nil {
c.Log.Error(err.Error())
return usersArray, false
}
}
playerWithProfile.League = league
usersArray = append(usersArray, playerWithProfile)
}
return usersArray, true
}
2018-01-23 20:13:16 +04:00
func (u *Users) findUsersByLevel(levelID int) ([]dbmapping.ProfileWithAddons, bool) {
selectedUsers := []dbmapping.ProfileWithAddons{}
err := c.Db.Select(&selectedUsers, c.Db.Rebind("SELECT p.*, l.symbol AS league_symbol, l.id AS league_id, pl.telegram_id FROM players pl, profiles p, leagues l WHERE p.created_at > NOW() - INTERVAL 72 HOUR AND p.level_id = ? GROUP BY player_id"), levelID)
if err != nil {
c.Log.Error(err.Error())
return selectedUsers, false
}
return selectedUsers, true
}
func (u *Users) findUserByName(pattern string) ([]dbmapping.ProfileWithAddons, bool) {
selectedUsers := []dbmapping.ProfileWithAddons{}
2017-12-23 21:08:57 +04:00
err := c.Db.Select(&selectedUsers, c.Db.Rebind("SELECT * FROM (SELECT p.*, l.symbol AS league_symbol, l.id AS league_id, pl.telegram_id FROM players pl, profiles p, leagues l WHERE p.player_id = pl.id AND l.id = pl.league_id AND (p.nickname LIKE ? OR p.telegram_nickname LIKE ?) ORDER BY p.id DESC LIMIT 100000) AS find_users_table GROUP BY player_id"), "%"+pattern+"%", "%"+pattern+"%")
if err != nil {
c.Log.Error(err.Error())
return selectedUsers, false
}
return selectedUsers, true
}
2018-01-23 20:13:16 +04:00
func (u *Users) foundUsersMessage(update *tgbotapi.Update, usersArray []dbmapping.ProfileWithAddons) {
message := "*Найденные игроки:*\n"
for i := range usersArray {
message += "#" + strconv.Itoa(usersArray[i].PlayerID)
message += " " + usersArray[i].LeagueSymbol
message += " " + usersArray[i].Nickname
if usersArray[i].TelegramNickname != "" {
message += " (@" + u.FormatUsername(usersArray[i].TelegramNickname) + ")"
}
message += " /profile" + strconv.Itoa(usersArray[i].PlayerID) + "\n"
message += "Telegram ID: " + strconv.Itoa(usersArray[i].TelegramID) + "\n"
message += "Последнее обновление: " + usersArray[i].CreatedAt.Format("02.01.2006 15:04:05") + "\n"
if len(message) > 2000 {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
msg.ParseMode = "Markdown"
c.Bot.Send(msg)
message = ""
}
2018-01-23 20:13:16 +04:00
}
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
msg.ParseMode = "Markdown"
c.Bot.Send(msg)
}
func (u *Users) profileAddSuccessMessage(update *tgbotapi.Update, leagueID int, level int) {
2017-10-18 07:03:34 +04:00
message := "*Профиль успешно обновлен.*\n\n"
message += "Функциональность бота держится на актуальности профилей. Обновляйся почаще, и да пребудет с тобой Рандом!\n"
2017-10-11 06:53:50 +04:00
message += "Сохраненный профиль ты можешь просмотреть командой /me.\n\n"
2017-10-18 07:03:34 +04:00
message += "/best посмотреть лучших покемемов для поимки"
2017-10-11 06:53:50 +04:00
2017-11-29 10:04:54 +04:00
if leagueID == 1 {
2017-12-02 19:50:56 +04:00
message += "\n/bastion — получить ссылку на БАСТИОН лиги\n"
if level < 5 {
message += "\n/academy — получить ссылку на АКАДЕМИЮ лиги\n"
}
2017-11-29 10:04:54 +04:00
}
2017-10-18 07:03:34 +04:00
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
msg.ParseMode = "Markdown"
2017-10-11 06:53:50 +04:00
2017-10-18 07:03:34 +04:00
c.Bot.Send(msg)
2017-10-11 06:53:50 +04:00
}
func (u *Users) profileAddFailureMessage(update *tgbotapi.Update) {
2017-10-18 07:03:34 +04:00
message := "*Неудачно получилось :(*\n\n"
message += "Случилась жуткая ошибка, и мы не смогли записать профиль в базу. Напиши @fat0troll, он разберется."
2017-10-11 06:53:50 +04:00
2017-10-18 07:03:34 +04:00
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
msg.ParseMode = "Markdown"
2017-10-11 06:53:50 +04:00
2017-10-18 07:03:34 +04:00
c.Bot.Send(msg)
2017-10-11 06:53:50 +04:00
}
2017-11-24 00:16:22 +04:00
func (u *Users) usersList(update *tgbotapi.Update, page int, usersArray []dbmapping.PlayerProfile) {
message := "*Зарегистрированные пользователи бота*\n"
message += "Список отсортирован по ID регистрации.\n"
message += "Количество зарегистрированных пользователей: " + strconv.Itoa(len(usersArray)) + "\n"
message += "Отображаем пользователей с " + strconv.Itoa(((page-1)*25)+1) + " по " + strconv.Itoa(page*25) + "\n"
if len(usersArray) > page*25 {
message += "Переход на следующую страницу: /users" + strconv.Itoa(page+1)
}
if page > 1 {
message += "\nПереход на предыдущую страницу: /users" + strconv.Itoa(page-1)
}
message += "\n\n"
for i := range usersArray {
if (i+1 > 25*(page-1)) && (i+1 < (25*page)+1) {
message += "#" + strconv.Itoa(usersArray[i].Player.ID)
if usersArray[i].HaveProfile {
message += " " + usersArray[i].League.Symbol
message += " " + usersArray[i].Profile.Nickname
if usersArray[i].Profile.TelegramNickname != "" {
message += " (@" + u.FormatUsername(usersArray[i].Profile.TelegramNickname) + ")"
2017-11-24 00:16:22 +04:00
}
message += " /profile" + strconv.Itoa(usersArray[i].Player.ID) + "\n"
2017-11-24 00:16:22 +04:00
message += "Telegram ID: " + strconv.Itoa(usersArray[i].Player.TelegramID) + "\n"
message += "Последнее обновление: " + usersArray[i].Profile.CreatedAt.Format("02.01.2006 15:04:05") + "\n"
} else {
if usersArray[i].Player.Status == "special" {
message += " _суперюзер_\n"
} else {
message += " _без профиля_\n"
}
2017-11-24 00:16:22 +04:00
message += "Telegram ID: " + strconv.Itoa(usersArray[i].Player.TelegramID) + "\n"
}
}
}
2017-11-29 14:38:58 +04:00
if len(usersArray) > page*25 {
2017-11-24 00:16:22 +04:00
message += "\n"
message += "Переход на следующую страницу: /users" + strconv.Itoa(page+1)
}
if page > 1 {
message += "\nПереход на предыдущую страницу: /users" + strconv.Itoa(page-1)
}
message += "\nЧтобы добавить пользователя в отряд, введите команду /squad\\_add\\_user _X Y_ или /squad\\_add\\_commander _X Y_, где _X_ — ID отряда (посмотреть все отряды можно командой /squads), а _Y_ — ID пользователя из списка выше."
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
msg.ParseMode = "Markdown"
c.Bot.Send(msg)
}