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/getters.go

99 lines
2.8 KiB
Go
Raw Normal View History

// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package users
import (
"github.com/go-telegram-bot-api/telegram-bot-api"
2018-01-21 23:28:53 +04:00
"git.wtfteam.pro/fat0troll/i2_bot/lib/dbmapping"
2017-11-14 03:44:21 +04:00
"time"
)
// GetProfile returns last saved profile of player
func (u *Users) GetProfile(playerID int) (dbmapping.Profile, bool) {
profileRaw := dbmapping.Profile{}
err := c.Db.Get(&profileRaw, c.Db.Rebind("SELECT * FROM profiles WHERE player_id=? ORDER BY created_at DESC LIMIT 1"), playerID)
if err != nil {
c.Log.Error(err)
return profileRaw, false
}
return profileRaw, true
}
// GetPlayerByID returns dbmapping.Player instance with given ID.
func (u *Users) GetPlayerByID(playerID int) (dbmapping.Player, bool) {
playerRaw := dbmapping.Player{}
err := c.Db.Get(&playerRaw, c.Db.Rebind("SELECT * FROM players WHERE id=?"), playerID)
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err.Error())
return playerRaw, false
2017-10-18 07:03:34 +04:00
}
2017-10-13 03:52:04 +04:00
return playerRaw, true
2017-10-13 03:52:04 +04:00
}
// GetOrCreatePlayer seeks for player in database via Telegram ID.
// In case, when there is no player with such ID, new player will be created.
func (u *Users) GetOrCreatePlayer(telegramID int) (dbmapping.Player, bool) {
playerRaw := dbmapping.Player{}
err := c.Db.Get(&playerRaw, c.Db.Rebind("SELECT * FROM players WHERE telegram_id=? ORDER BY created_at desc LIMIT 1"), telegramID)
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error("Message user not found in database.")
c.Log.Error(err.Error())
2017-10-18 07:03:34 +04:00
// Create "nobody" user
playerRaw.TelegramID = telegramID
playerRaw.LeagueID = 0
playerRaw.Status = "nobody"
playerRaw.CreatedAt = time.Now().UTC()
playerRaw.UpdatedAt = time.Now().UTC()
_, err = c.Db.NamedExec("INSERT INTO players VALUES(NULL, :telegram_id, :league_id, :status, :created_at, :updated_at)", &playerRaw)
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err.Error())
return playerRaw, false
2017-10-18 07:03:34 +04:00
}
} else {
2017-11-14 03:44:21 +04:00
c.Log.Debug("Message user found in database.")
2017-10-18 07:03:34 +04:00
}
return playerRaw, true
}
2017-10-22 14:04:14 +04:00
// 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)
}
2017-10-22 14:04:14 +04:00
// PlayerBetterThan return true, if profile is more or equal powerful than
// provided power level
func (u *Users) PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) bool {
2017-10-22 14:04:14 +04:00
var isBetter = false
switch playerRaw.Status {
case "special":
isBetter = true
2017-10-22 14:04:14 +04:00
case "owner":
isBetter = true
case "admin":
if powerLevel != "owner" {
isBetter = true
}
case "academic":
if powerLevel != "ownder" && powerLevel != "admin" {
isBetter = true
}
2017-10-22 14:04:14 +04:00
default:
isBetter = false
}
return isBetter
}