Browse Source

Buttons to select a card from the list

master
Mikhail Chernov 8 years ago
parent
commit
4fe9f73c25
1 changed files with 28 additions and 9 deletions
  1. 28
    9
      magic-judge-telegram-bot.py

+ 28
- 9
magic-judge-telegram-bot.py View File

import logging import logging
import json import json
from telegram.ext import Updater, CommandHandler, InlineQueryHandler
from telegram import InlineQueryResultArticle, InputTextMessageContent
from telegram.ext import Updater, CommandHandler, InlineQueryHandler, CallbackQueryHandler
from telegram import InlineQueryResultArticle, InputTextMessageContent, InlineKeyboardButton, InlineKeyboardMarkup


#logging.basicConfig(level=logging.DEBUG, #logging.basicConfig(level=logging.DEBUG,
# format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') # format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
mana, mana,
card['type']) card['type'])


def format_names(names):
return '\n'.join(sorted(names))

def start(bot, update): def start(bot, update):
commands = [ commands = [
'/o <card name or search strings> - oracle text for a card', '/o <card name or search strings> - oracle text for a card',
def search_names(words): def search_names(words):
nameCandidates = [name for name in namesToSearch if all(word in name.casefold() for word in words)] nameCandidates = [name for name in namesToSearch if all(word in name.casefold() for word in words)]


term = ' '.join(words)

if len(words) > 1: if len(words) > 1:
term = ' '.join(words)
goodCandidates = [name for name in nameCandidates if term in name]
goodCandidates = [name for name in nameCandidates if term in name.casefold()]
if goodCandidates: if goodCandidates:
return goodCandidates
nameCandidates = goodCandidates

bestCandidates = [name for name in nameCandidates if term == name.casefold()]
if bestCandidates:
return bestCandidates

return nameCandidates return nameCandidates




return return


if len(nameCandidates) > 1: if len(nameCandidates) > 1:
update.message.reply_text(format_names(nameCandidates))
reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(name, callback_data=name)] for name in nameCandidates])
update.message.reply_text('Which one?', reply_markup=reply_markup)
return return


reply = [] reply = []
) )
bot.answerInlineQuery(update.inline_query.id, results) bot.answerInlineQuery(update.inline_query.id, results)


def callback_name(bot, update):
message_id = update.callback_query.message.message_id
chat_id = update.callback_query.message.chat.id
name = update.callback_query.data
if not name in oracleData:
return

bot.editMessageText(
chat_id = chat_id,
message_id = message_id,
text = '\n'.join([format_card(oracleData[uniqueName]) for uniqueName in names[name]])
)
bot.answerCallbackQuery(update.callback_query.id)

def dispatcher_setup(dispatcher): def dispatcher_setup(dispatcher):
dispatcher.add_handler(CommandHandler('start', start)) dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CommandHandler('help', start)) dispatcher.add_handler(CommandHandler('help', start))
dispatcher.add_handler(CommandHandler('o', oracle, pass_args=True)) dispatcher.add_handler(CommandHandler('o', oracle, pass_args=True))
dispatcher.add_handler(CommandHandler('q', question, pass_args=True)) dispatcher.add_handler(CommandHandler('q', question, pass_args=True))
dispatcher.add_handler(InlineQueryHandler(inline_oracle)) dispatcher.add_handler(InlineQueryHandler(inline_oracle))
dispatcher.add_handler(CallbackQueryHandler(callback_name))


with open('token') as file: with open('token') as file:
token = file.read().strip() token = file.read().strip()

Loading…
Cancel
Save