Когда я нажимаю на кнопку, идентификатор кнопки должен быть возвращен мне. JSON файл - PullRequest
1 голос
/ 12 апреля 2020

У меня есть словарь, в котором есть вопрос и его идентификатор. Я просматриваю все вопросы и отображаю их в виде кнопок, затем, когда я нажимаю на кнопку, я должен вернуть идентификатор этого вопроса, как это сделать ??

def start(message):
    r = requests.get("http://x.x.x.x/api/tests/list/getusertestlist", headers=headers)# I get JSON file
    markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
    for i in dp.values(r.json(), "/tests/*/value"):# value it's questions.
        itembtn = types.KeyboardButton(i)
        markup.add(itembtn)
    bot.send_message(message.chat.id,"Get test",reply_markup=markup)

Structure JSON file.
{'tests': [{'description': 'Choose your preferred answer from the suggested ones.', 'id': 85, 'value': 'test 1'}, {'description': 'Choose your preferred answer from the suggested ones.', 'id': 88, 'value': 'test 1'}]}

В конце концов я должен получить клавиатуру с 2 кнопками test 1 и test 2, когда я нажимаю на test 1, я должен получить его идентификатор

1 Ответ

1 голос
/ 20 апреля 2020

Я заблудился с твоим фрагментом. Переменные типа "dp" или "types" не были объявлены. Также у меня нет json тестового файла на inte rnet под рукой, поэтому я объявил его в том же файле (используя пример, который вы даете).

from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
import json

jsonfile='{"tests": [{"description": "Choose your preferred answer from the suggested ones.", "id": 85, "value": "test 1"}, {"description": "Choose your preferred answer from the suggested ones.", "id": 88, "value": "test 1"}]}'

def start(update, context):
    keybrd = []
    jsondic=json.loads(jsonfile)
    for item in jsondic['tests']:
        keybrd.append([InlineKeyboardButton(item['value'], callback_data=item['id'])])
    markup = InlineKeyboardMarkup(keybrd)
    context.bot.send_message(chat_id=update.effective_chat.id,text="Get test",reply_markup=markup)

def button(update, context):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="Selected option: {}".format(query.data))

def main():
    updater = Updater(tgtoken, use_context=True)
    updater.dispatcher.add_handler(CommandHandler("start", start))
    updater.dispatcher.add_handler(CallbackQueryHandler(button))

Это идея, вы должны наверное нужно переставить кнопки. Вам также нужно завершить sh функцию main с помощью start_polling () и объявить регистратор, но все эти детали можно найти в примере inlinekeyboard на github этой оболочки.

...