Archived
1

Pokememes individual info with search buttons

This commit is contained in:
Vladimir Hodakov 2017-10-07 19:58:14 +04:00
parent 17a03bf8b2
commit 736d6b9658
17 changed files with 159 additions and 15 deletions

View File

@ -3,5 +3,5 @@
go get github.com/go-sql-driver/mysql go get github.com/go-sql-driver/mysql
go get github.com/jmoiron/sqlx go get github.com/jmoiron/sqlx
go get github.com/pressly/goose go get github.com/pressly/goose
go get gopkg.in/telegram-bot-api.v4 go get github.com/go-telegram-bot-api/telegram-bot-api
go get gopkg.in/yaml.v2 go get gopkg.in/yaml.v2

View File

@ -7,7 +7,7 @@ import (
// stdlib // stdlib
"time" "time"
// 3rd-party // 3rd-party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
// local // local
"./lib/appcontext" "./lib/appcontext"
"./lib/migrations" "./lib/migrations"

View File

@ -6,7 +6,7 @@ package appcontext
import ( import (
// 3rd-party // 3rd-party
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
// local // local
"../config" "../config"
"../connections" "../connections"

View File

@ -12,7 +12,7 @@ import (
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
) )
const VERSION = "0.1" const VERSION = "0.15"
type DatabaseConnection struct { type DatabaseConnection struct {
Host string `yaml:"host"` Host string `yaml:"host"`

View File

@ -7,7 +7,7 @@ import (
// stdlib // stdlib
"log" "log"
// 3rd-party // 3rd-party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
// local // local

View File

@ -0,0 +1,43 @@
// i2_bot Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov
package migrations
import (
// stdlib
"database/sql"
)
func UpdateLocationsUp(tx *sql.Tx) error {
_, err := tx.Exec("UPDATE `locations` SET symbol='⛪' WHERE symbol=':church:';")
if err != nil {
return err
}
_, err = tx.Exec("UPDATE `locations` SET symbol='🌲' WHERE symbol=':evergreen_tree:';")
if err != nil {
return err
}
_, err = tx.Exec("UPDATE `locations` SET symbol='🚣' WHERE symbol=':rowboat:';")
if err != nil {
return err
}
return nil
}
func UpdateLocationsDown(tx *sql.Tx) error {
_, err := tx.Exec("UPDATE `locations` SET symbol=':church:' WHERE symbol='⛪'';")
if err != nil {
return err
}
_, err = tx.Exec("UPDATE `locations` SET symbol=':evergreen_tree:' WHERE symbol='🌲';")
if err != nil {
return err
}
_, err = tx.Exec("UPDATE `locations` SET symbol=':rowboat:' WHERE symbol='🚣';")
if err != nil {
return err
}
return nil
}

View File

@ -23,6 +23,7 @@ func (m *Migrations) Init() {
goose.AddNamedMigration("6_create_elements.go", CreateElementsUp, CreateElementsDown) goose.AddNamedMigration("6_create_elements.go", CreateElementsUp, CreateElementsDown)
goose.AddNamedMigration("7_create_leagues.go", CreateLeaguesUp, CreateLeaguesDown) goose.AddNamedMigration("7_create_leagues.go", CreateLeaguesUp, CreateLeaguesDown)
goose.AddNamedMigration("8_create_relations.go", CreateRelationsUp, CreateRelationsDown) goose.AddNamedMigration("8_create_relations.go", CreateRelationsUp, CreateRelationsDown)
goose.AddNamedMigration("9_update_locations.go", UpdateLocationsUp, UpdateLocationsDown)
} }
func (m *Migrations) Migrate() error { func (m *Migrations) Migrate() error {

View File

@ -5,7 +5,7 @@ package router
import ( import (
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
) )
type RouterHandler struct {} type RouterHandler struct {}

View File

@ -11,7 +11,7 @@ import (
"strings" "strings"
"time" "time"
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
// local // local
"../dbmappings" "../dbmappings"
) )
@ -60,6 +60,7 @@ func (r *Router) RouteRequest(update tgbotapi.Update) string {
var helpMsg = regexp.MustCompile("/help\\z") var helpMsg = regexp.MustCompile("/help\\z")
var helloMsg = regexp.MustCompile("/start\\z") var helloMsg = regexp.MustCompile("/start\\z")
var pokedexMsg = regexp.MustCompile("/pokede(x|ks)\\d?\\z") var pokedexMsg = regexp.MustCompile("/pokede(x|ks)\\d?\\z")
var pokememeInfoMsg = regexp.MustCompile("/pk(\\d+)")
// Forwards // Forwards
var pokememeMsg = regexp.MustCompile("(Уровень)(.+)(Опыт)(.+)\n(Элементы:)(.+)\n(.+)(💙MP)") var pokememeMsg = regexp.MustCompile("(Уровень)(.+)(Опыт)(.+)\n(Элементы:)(.+)\n(.+)(💙MP)")
@ -115,6 +116,8 @@ func (r *Router) RouteRequest(update tgbotapi.Update) string {
} else { } else {
c.Talkers.PokememesList(update, 1) c.Talkers.PokememesList(update, 1)
} }
case pokememeInfoMsg.MatchString(text):
c.Talkers.PokememeInfo(update)
// Easter eggs // Easter eggs
case huMsg.MatchString(text): case huMsg.MatchString(text):
c.Talkers.MatMessage(update) c.Talkers.MatMessage(update)

View File

@ -5,7 +5,7 @@ package routerinterface
import ( import (
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
) )
type RouterInterface interface { type RouterInterface interface {

View File

@ -9,7 +9,7 @@ import (
"math/rand" "math/rand"
"time" "time"
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
) )
func (t *Talkers) DurakMessage(update tgbotapi.Update) { func (t *Talkers) DurakMessage(update tgbotapi.Update) {

View File

@ -5,7 +5,7 @@ package talkers
import ( import (
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
) )
func (t *Talkers) AnyMessageUnauthorized(update tgbotapi.Update) { func (t *Talkers) AnyMessageUnauthorized(update tgbotapi.Update) {

View File

@ -5,7 +5,7 @@ package talkers
import ( import (
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
// local // local
"../dbmappings" "../dbmappings"
) )

View File

@ -5,7 +5,7 @@ package talkers
import ( import (
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
// local // local
"../config" "../config"
) )
@ -14,6 +14,7 @@ func (t *Talkers) HelpMessage(update tgbotapi.Update) {
help_message := "*Бот Инстинкта Enchanched.*\n\n" help_message := "*Бот Инстинкта Enchanched.*\n\n"
help_message += "Текущая версия: *" + config.VERSION + "*\n\n" help_message += "Текущая версия: *" + config.VERSION + "*\n\n"
help_message += "Список команд:\n\n" help_message += "Список команд:\n\n"
help_message += "+ /pokedex получить список известных боту покемемов\n"
help_message += "+ /help выводит данное сообщение\n" help_message += "+ /help выводит данное сообщение\n"
help_message += "\n\n" help_message += "\n\n"
help_message += "Связаться с автором: @fat0troll\n" help_message += "Связаться с автором: @fat0troll\n"

View File

@ -6,9 +6,10 @@ package talkers
import ( import (
// stdlib // stdlib
"log" "log"
"strings"
"strconv" "strconv"
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
// local // local
"../dbmappings" "../dbmappings"
) )
@ -19,6 +20,100 @@ type PokememeFull struct {
Locations []dbmappings.Locations Locations []dbmappings.Locations
} }
func (t *Talkers) PokememeInfo(update tgbotapi.Update) string {
pokememe_number := strings.Replace(update.Message.Text, "/pk", "", 1)
// Building pokememe
pk := dbmappings.Pokememes{}
// Checking if pokememe exists in database
err := c.Db.Get(&pk, c.Db.Rebind("SELECT * FROM pokememes WHERE id='" + pokememe_number + "'"))
if err != nil {
log.Println(err)
return "fail"
}
elements := []dbmappings.Elements{}
err = c.Db.Select(&elements, "SELECT * FROM elements");
if err != nil {
log.Println(err)
}
locations := []dbmappings.Locations{}
err = c.Db.Select(&locations, "SELECT * FROM locations");
if err != nil {
log.Println(err)
}
pokememes_elements := []dbmappings.PokememesElements{}
err = c.Db.Select(&pokememes_elements, "SELECT * FROM pokememes_elements WHERE pokememe_id='" + pokememe_number + "'");
if err != nil {
log.Println(err)
}
pokememes_locations := []dbmappings.PokememesLocations{}
err = c.Db.Select(&pokememes_locations, "SELECT * FROM pokememes_locations WHERE pokememe_id='" + pokememe_number + "'");
if err != nil {
log.Println(err)
}
message := strconv.Itoa(pk.Grade) + "⃣ *" + pk.Name + "*\n"
message += pk.Description + "\n\n"
message += "Элементы:"
for i := range(pokememes_elements) {
for j := range(elements) {
if pokememes_elements[i].Element_id == elements[j].Id {
message += " " + elements[j].Symbol
}
}
}
message += "\n⚔ Атака: *" + c.Parsers.ReturnPoints(pk.Attack)
message += "*\n❤ HP: *" + c.Parsers.ReturnPoints(pk.HP)
message += "*\n💙 MP: *" + c.Parsers.ReturnPoints(pk.MP)
if (pk.Defence != pk.Attack) {
message += "*\n🛡Защита: *" + c.Parsers.ReturnPoints(pk.Defence) + "* _(сопротивляемость покемема к поимке)_"
} else {
message += "*"
}
message += "\nСтоимость: *" + c.Parsers.ReturnPoints(pk.Price)
message += "*\nКупить: *"
if pk.Purchaseable {
message += "Можно"
} else {
message += "Нельзя"
}
message += "*\nОбитает:"
for i := range(pokememes_locations) {
for j := range(locations) {
if pokememes_locations[i].Location_id == locations[j].Id {
message += " *" + locations[j].Name + "*"
if (i + 1) < len(pokememes_locations) {
message += ","
}
}
}
}
message += "\n" + pk.Image_url
msg := tgbotapi.NewMessage(update.Message.Chat.ID, message)
keyboard := tgbotapi.InlineKeyboardMarkup{}
for i := range(pokememes_locations) {
for j := range(locations) {
if pokememes_locations[i].Location_id == locations[j].Id {
var row []tgbotapi.InlineKeyboardButton
btn := tgbotapi.NewInlineKeyboardButtonSwitch(locations[j].Symbol + locations[j].Name, locations[j].Symbol + locations[j].Name)
row = append(row, btn)
keyboard.InlineKeyboard = append(keyboard.InlineKeyboard, row)
}
}
}
msg.ReplyMarkup = keyboard
msg.ParseMode = "Markdown"
c.Bot.Send(msg)
return "ok"
}
func (t *Talkers) PokememesList(update tgbotapi.Update, page int) { func (t *Talkers) PokememesList(update tgbotapi.Update, page int) {
pokememes := []dbmappings.Pokememes{} pokememes := []dbmappings.Pokememes{}
err := c.Db.Select(&pokememes, "SELECT * FROM pokememes"); err := c.Db.Select(&pokememes, "SELECT * FROM pokememes");

View File

@ -5,7 +5,7 @@ package talkers
import ( import (
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
) )
func (t *Talkers) PokememeAddSuccessMessage(update tgbotapi.Update) { func (t *Talkers) PokememeAddSuccessMessage(update tgbotapi.Update) {

View File

@ -5,7 +5,7 @@ package talkersinterface
import ( import (
// 3rd party // 3rd party
"gopkg.in/telegram-bot-api.v4" "github.com/go-telegram-bot-api/telegram-bot-api"
// local // local
"../../dbmappings" "../../dbmappings"
) )
@ -17,6 +17,7 @@ type TalkersInterface interface {
HelloMessageAuthorized(update tgbotapi.Update, player_raw dbmappings.Players) HelloMessageAuthorized(update tgbotapi.Update, player_raw dbmappings.Players)
HelpMessage(update tgbotapi.Update) HelpMessage(update tgbotapi.Update)
PokememesList(update tgbotapi.Update, page int) PokememesList(update tgbotapi.Update, page int)
PokememeInfo(update tgbotapi.Update) string
// Returns // Returns
PokememeAddSuccessMessage(update tgbotapi.Update) PokememeAddSuccessMessage(update tgbotapi.Update)