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

189 lines
5.4 KiB
Go
Raw Normal View History

// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package pokedexer
import (
2017-10-26 18:17:58 +04:00
"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
2017-11-14 03:44:21 +04:00
"strconv"
)
2017-10-13 03:52:04 +04:00
// Internal functions
func (p *Pokedexer) formFullPokememes(pokememes []dbmapping.Pokememe) ([]dbmapping.PokememeFull, bool) {
pokememesArray := []dbmapping.PokememeFull{}
2017-10-18 07:03:34 +04:00
elements := []dbmapping.Element{}
err := c.Db.Select(&elements, "SELECT * FROM elements")
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
locations := []dbmapping.Location{}
err = c.Db.Select(&locations, "SELECT * FROM locations")
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
pokememesElements := []dbmapping.PokememeElement{}
err = c.Db.Select(&pokememesElements, "SELECT * FROM pokememes_elements")
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
pokememesLocations := []dbmapping.PokememeLocation{}
err = c.Db.Select(&pokememesLocations, "SELECT * FROM pokememes_locations")
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
for i := range pokememes {
fullPokememe := dbmapping.PokememeFull{}
elementsListed := []dbmapping.Element{}
locationsListed := []dbmapping.Location{}
2017-10-18 07:03:34 +04:00
for j := range pokememesLocations {
if pokememesLocations[j].PokememeID == pokememes[i].ID {
2017-10-18 07:03:34 +04:00
for l := range locations {
if pokememesLocations[j].LocationID == locations[l].ID {
locationsListed = append(locationsListed, locations[l])
2017-10-18 07:03:34 +04:00
}
}
}
}
for k := range pokememesElements {
if pokememesElements[k].PokememeID == pokememes[i].ID {
2017-10-18 07:03:34 +04:00
for e := range elements {
if pokememesElements[k].ElementID == elements[e].ID {
elementsListed = append(elementsListed, elements[e])
2017-10-18 07:03:34 +04:00
}
}
}
}
fullPokememe.Pokememe = pokememes[i]
fullPokememe.Elements = elementsListed
fullPokememe.Locations = locationsListed
2017-10-18 07:03:34 +04:00
pokememesArray = append(pokememesArray, fullPokememe)
2017-10-18 07:03:34 +04:00
}
return pokememesArray, true
}
2017-10-13 03:52:04 +04:00
// External functions
// GetPokememes returns all existing pokememes, known by bot
func (p *Pokedexer) GetPokememes() ([]dbmapping.PokememeFull, bool) {
pokememesArray := []dbmapping.PokememeFull{}
2017-10-18 07:03:34 +04:00
pokememes := []dbmapping.Pokememe{}
err := c.Db.Select(&pokememes, "SELECT * FROM pokememes ORDER BY grade asc, name asc")
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
pokememesArray, ok := p.formFullPokememes(pokememes)
return pokememesArray, ok
2017-10-13 03:52:04 +04:00
}
func (p *Pokedexer) getBestPokememes(playerID int) ([]dbmapping.PokememeFull, bool) {
pokememesArray := []dbmapping.PokememeFull{}
playerRaw, ok := c.Users.GetPlayerByID(playerID)
2017-10-18 07:03:34 +04:00
if !ok {
return pokememesArray, ok
2017-10-18 07:03:34 +04:00
}
profileRaw, ok := c.Users.GetProfile(playerID)
2017-10-18 07:03:34 +04:00
if !ok {
return pokememesArray, ok
2017-10-18 07:03:34 +04:00
}
if playerRaw.LeagueID == 0 {
return pokememesArray, false
2017-10-18 07:03:34 +04:00
}
// TODO: make it more complicated
pokememes := []dbmapping.Pokememe{}
if profileRaw.LevelID < 4 {
err := c.Db.Select(&pokememes, c.Db.Rebind("SELECT * FROM pokememes WHERE grade = ? ORDER BY attack DESC"), profileRaw.LevelID+1)
if err != nil {
c.Log.Error(err)
return pokememesArray, false
}
} else {
err := c.Db.Select(&pokememes, c.Db.Rebind("SELECT p.* FROM pokememes p, pokememes_elements pe, elements e WHERE e.league_id = ? AND p.grade = ? AND pe.element_id = e.id AND pe.pokememe_id = p.id ORDER BY p.attack DESC"), playerRaw.LeagueID, profileRaw.LevelID+1)
if err != nil {
c.Log.Error(err)
return pokememesArray, false
}
2017-10-18 07:03:34 +04:00
}
pokememesArray, ok = p.formFullPokememes(pokememes)
return pokememesArray, ok
2017-10-13 03:52:04 +04:00
}
// GetPokememeByID returns single pokememe based on internal ID in database
func (p *Pokedexer) GetPokememeByID(pokememeID string) (dbmapping.PokememeFull, bool) {
fullPokememe := dbmapping.PokememeFull{}
2017-10-18 07:03:34 +04:00
pokememe := dbmapping.Pokememe{}
err := c.Db.Get(&pokememe, c.Db.Rebind("SELECT * FROM pokememes WHERE id=?"), pokememeID)
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return fullPokememe, false
2017-10-18 07:03:34 +04:00
}
elements := []dbmapping.Element{}
err = c.Db.Select(&elements, "SELECT * FROM elements")
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return fullPokememe, false
2017-10-18 07:03:34 +04:00
}
locations := []dbmapping.Location{}
err = c.Db.Select(&locations, "SELECT * FROM locations")
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return fullPokememe, false
2017-10-18 07:03:34 +04:00
}
pokememesElements := []dbmapping.PokememeElement{}
err = c.Db.Select(&pokememesElements, "SELECT * FROM pokememes_elements WHERE pokememe_id='"+strconv.Itoa(pokememe.ID)+"'")
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return fullPokememe, false
2017-10-18 07:03:34 +04:00
}
pokememesLocations := []dbmapping.PokememeLocation{}
err = c.Db.Select(&pokememesLocations, "SELECT * FROM pokememes_locations WHERE pokememe_id='"+strconv.Itoa(pokememe.ID)+"'")
2017-10-18 07:03:34 +04:00
if err != nil {
2017-11-14 03:44:21 +04:00
c.Log.Error(err)
return fullPokememe, false
2017-10-18 07:03:34 +04:00
}
elementsListed := []dbmapping.Element{}
locationsListed := []dbmapping.Location{}
2017-10-18 07:03:34 +04:00
for j := range pokememesLocations {
if pokememesLocations[j].PokememeID == pokememe.ID {
2017-10-18 07:03:34 +04:00
for l := range locations {
if pokememesLocations[j].LocationID == locations[l].ID {
locationsListed = append(locationsListed, locations[l])
2017-10-18 07:03:34 +04:00
}
}
}
}
for k := range pokememesElements {
if pokememesElements[k].PokememeID == pokememe.ID {
2017-10-18 07:03:34 +04:00
for e := range elements {
if pokememesElements[k].ElementID == elements[e].ID {
elementsListed = append(elementsListed, elements[e])
2017-10-18 07:03:34 +04:00
}
}
}
}
fullPokememe.Pokememe = pokememe
fullPokememe.Elements = elementsListed
fullPokememe.Locations = locationsListed
2017-10-18 07:03:34 +04:00
return fullPokememe, true
}