Задать вопрос
  • Как сделать так чтобы бот ждал ответ?

    @twistfire92
    Python backend developer
    Во-первых нужно убрать декоратор у функции easy_game. Эта функция вызывается в register_next_step_handler, так что следующее сообщение будет как раз обрабатываться этой функцией.

    Во-вторых. В этой же функции сначала отправляется страна, затем отправляется ответ. Должно быть не так.
    Страна должна отправляться в функции easy(). Но там у тебя пользователю выводится сообщение с предложением запустить игру. Так что пропускай (пока что) предложение с запуском игры и сразу выводи название страны, потом обрабатывай ответ от пользователя в easy_game.

    В-третьих. По текущей логике, ответив "Париж" на вопрос "Россия", выдаст правильный ответ. Ты должен где-то сохранять правильный ответ на поставленый вопрос, чтобы сравнить с вводом пользователя. Для этого в функцию easy_game() можно добавить еще один аргумент right_answer, и передавать в него правильный ответ через дополнительные параметры в register_next_step_handler

    В-четвертых. Лучше использовать словарь, где ключом будет вопрос, а значением - ответ.

    В-пятых. Столица Эмиратов - Абу-Даби.

    Весь код приводить не буду, только некоторые моменты.

    countries_easy = {
    	"Россия": "Москва",
    	"Франция": "Париж",
    	"Арабские Эмираты": "Абу-Даби",
    	}
    
    ...
    
    @bot.message_handler(content_types=["text"])
    def easy(message):
    	...
    	# рандомно выбираем пару ключ-значение из словаря.
    	country, capital = random.choice(list(countries_easy.items()))
    	msg = bot.send_message(messaga.chat.id, country)
    	# Третьим параметром отправляем правильный ответ
    	bot.register_next_step_handler(msg, easy_game, capital)
    
    
    def easy_game(message, right_answer):
        if message.text == capital:
            bot.send_message(message.chat.id, "Правильный ответ!")
        else:
            bot.send_message(message.chat.id, "Неправильный ответ")


    В общем, разобравшись в работе register_next_step_handler, можно будет уже полноценную логику собирать.
    Ответ написан
    2 комментария
  • Не понимаю как указать именно значение из словаря в боте?

    Wispik
    @Wispik
    1. if message.text == countries_easy.values():
    здесь ты сравниваешь строку со списком, поэтому при сравнении тут всегда будет ложь

    2. в bot.register_next_step_handler нужно передать правильный ответ:
    bot.register_next_step_handler(msg, easy_game, country[1])


    3. и дальше уже сравнивать сообщение с правильным ответом (и желательно при сравнении строки к одному регистру приводить):
    if message.text.lower() == right_answer.lower():
    Ответ написан
    5 комментариев