| 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() |