182 lines
5.9 KiB
Go
182 lines
5.9 KiB
Go
// i2_bot – Instinct PokememBro Bot
|
||
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
|
||
|
||
package getters
|
||
|
||
import (
|
||
// stdlib
|
||
"log"
|
||
"strconv"
|
||
// local
|
||
"../dbmapping"
|
||
)
|
||
|
||
// Internal functions
|
||
|
||
func (g *Getters) formFullPokememes(pokememes []dbmapping.Pokememe) ([]dbmapping.PokememeFull, bool) {
|
||
pokememes_full := []dbmapping.PokememeFull{}
|
||
elements := []dbmapping.Element{}
|
||
err := c.Db.Select(&elements, "SELECT * FROM elements");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememes_full, false
|
||
}
|
||
locations := []dbmapping.Location{}
|
||
err = c.Db.Select(&locations, "SELECT * FROM locations");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememes_full, false
|
||
}
|
||
pokememes_elements := []dbmapping.PokememeElement{}
|
||
err = c.Db.Select(&pokememes_elements, "SELECT * FROM pokememes_elements");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememes_full, false
|
||
}
|
||
pokememes_locations := []dbmapping.PokememeLocation{}
|
||
err = c.Db.Select(&pokememes_locations, "SELECT * FROM pokememes_locations");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememes_full, false
|
||
}
|
||
|
||
for i := range(pokememes) {
|
||
full_pokememe := dbmapping.PokememeFull{}
|
||
elements_listed := []dbmapping.Element{}
|
||
locations_listed := []dbmapping.Location{}
|
||
|
||
for j := range(pokememes_locations) {
|
||
if pokememes_locations[j].Pokememe_id == pokememes[i].Id {
|
||
for l := range(locations) {
|
||
if pokememes_locations[j].Location_id == locations[l].Id {
|
||
locations_listed = append(locations_listed, locations[l])
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
for k := range(pokememes_elements) {
|
||
if pokememes_elements[k].Pokememe_id == pokememes[i].Id {
|
||
for e := range(elements) {
|
||
if pokememes_elements[k].Element_id == elements[e].Id {
|
||
elements_listed = append(elements_listed, elements[e])
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
full_pokememe.Pokememe = pokememes[i]
|
||
full_pokememe.Elements = elements_listed
|
||
full_pokememe.Locations = locations_listed
|
||
|
||
pokememes_full = append(pokememes_full, full_pokememe)
|
||
}
|
||
|
||
return pokememes_full, true
|
||
}
|
||
|
||
// External functions
|
||
|
||
func (g *Getters) GetPokememes() ([]dbmapping.PokememeFull, bool) {
|
||
pokememes_full := []dbmapping.PokememeFull{}
|
||
pokememes := []dbmapping.Pokememe{}
|
||
err := c.Db.Select(&pokememes, "SELECT * FROM pokememes ORDER BY grade asc, name asc");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememes_full, false
|
||
}
|
||
|
||
pokememes_full, ok := g.formFullPokememes(pokememes)
|
||
return pokememes_full, ok
|
||
}
|
||
|
||
func (g *Getters) GetBestPokememes(player_id int) ([]dbmapping.PokememeFull, bool) {
|
||
pokememes_full := []dbmapping.PokememeFull{}
|
||
player_raw, ok := g.GetPlayerByID(player_id)
|
||
if !ok {
|
||
return pokememes_full, ok
|
||
}
|
||
profile_raw, ok := g.GetProfile(player_id)
|
||
if !ok {
|
||
return pokememes_full, ok
|
||
}
|
||
|
||
if player_raw.League_id == 0 {
|
||
return pokememes_full, false
|
||
}
|
||
|
||
// TODO: make it more complicated
|
||
pokememes := []dbmapping.Pokememe{}
|
||
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"), player_raw.League_id, profile_raw.Level_id + 1)
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememes_full, false
|
||
}
|
||
|
||
pokememes_full, ok = g.formFullPokememes(pokememes)
|
||
return pokememes_full, ok
|
||
}
|
||
|
||
func (g *Getters) GetPokememeByID(pokememe_id string) (dbmapping.PokememeFull, bool) {
|
||
pokememe_full := dbmapping.PokememeFull{}
|
||
pokememe := dbmapping.Pokememe{}
|
||
err := c.Db.Get(&pokememe, c.Db.Rebind("SELECT * FROM pokememes WHERE id=?"), pokememe_id)
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememe_full, false
|
||
}
|
||
elements := []dbmapping.Element{}
|
||
err = c.Db.Select(&elements, "SELECT * FROM elements");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememe_full, false
|
||
}
|
||
locations := []dbmapping.Location{}
|
||
err = c.Db.Select(&locations, "SELECT * FROM locations");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememe_full, false
|
||
}
|
||
pokememes_elements := []dbmapping.PokememeElement{}
|
||
err = c.Db.Select(&pokememes_elements, "SELECT * FROM pokememes_elements WHERE pokememe_id='" + strconv.Itoa(pokememe.Id) + "'");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememe_full, false
|
||
}
|
||
pokememes_locations := []dbmapping.PokememeLocation{}
|
||
err = c.Db.Select(&pokememes_locations, "SELECT * FROM pokememes_locations WHERE pokememe_id='" + strconv.Itoa(pokememe.Id) + "'");
|
||
if err != nil {
|
||
log.Println(err)
|
||
return pokememe_full, false
|
||
}
|
||
|
||
elements_listed := []dbmapping.Element{}
|
||
locations_listed := []dbmapping.Location{}
|
||
|
||
for j := range(pokememes_locations) {
|
||
if pokememes_locations[j].Pokememe_id == pokememe.Id {
|
||
for l := range(locations) {
|
||
if pokememes_locations[j].Location_id == locations[l].Id {
|
||
locations_listed = append(locations_listed, locations[l])
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
for k := range(pokememes_elements) {
|
||
if pokememes_elements[k].Pokememe_id == pokememe.Id {
|
||
for e := range(elements) {
|
||
if pokememes_elements[k].Element_id == elements[e].Id {
|
||
elements_listed = append(elements_listed, elements[e])
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
pokememe_full.Pokememe = pokememe
|
||
pokememe_full.Elements = elements_listed
|
||
pokememe_full.Locations = locations_listed
|
||
|
||
return pokememe_full, true
|
||
}
|