-
-
Save dmp40/c6ce4d0fd8cc153ea62ef5aca7ff0267 to your computer and use it in GitHub Desktop.
# версия от 14 мая 22 делаю рыбу для отработки перехода по клавиатуре бота | |
import telebot | |
import time | |
from telebot import types #для работы клавиатуры | |
from datetime import datetime | |
import gspread | |
from telebot.types import ReplyKeyboardMarkup | |
from settings import googlesheet_id, token, googlesheet_cluc | |
bot = telebot.TeleBot(token) | |
@bot.message_handler( commands = [ 'start', 'help' ]) | |
def send_welcome(message ): | |
bot.reply_to(message, 'Привет, здесь можно пройти тест на гибкость. ') | |
keyboard = types.InlineKeyboardMarkup() | |
key_yes = types.InlineKeyboardButton(text='Да', callback_data= 'yes') | |
key_no = types.InlineKeyboardButton(text='Нет', callback_data='no') | |
keyboard.add(key_yes,key_no) | |
bot.send_message(message.chat.id, 'Готовы пройти тест на гибкость?', reply_markup=keyboard) | |
@bot.callback_query_handler(func=lambda call: True) | |
def callback_worker(call): | |
if call.data == 'yes': | |
print('Вывести видео') | |
bot.send_message(call.message.chat.id, 'Здесь будет видео') | |
bot.send_message(call.message.chat.id, 'Достали до колен - 1, до щиколоток - 2, до пола - 3') | |
elif call.data == 'no': | |
print('Нажато Далее') | |
else: | |
bot.send_message(call.message.chat.id, 'https://www.youtube.com/watch?v=wDtqkdamyBM') | |
key_ball = types.ReplyKeyboardMarkup(resize_keyboard= True) | |
item_1 = types.KeyboardButton('1') | |
item_2 = types.KeyboardButton('2') | |
item_3 = types.KeyboardButton('3') | |
key_ball.add(item_1,item_2,item_3) | |
bot.send_message(call.message.chat.id, 'Выберите 1, 2 или 3', reply_markup=key_ball) | |
@bot.message_handler(content_types=['text']) | |
def bot_message(message): | |
if message.text == '1': | |
bot.send_message(message.chat.id, "Вы получили " + str(message.text)+ " баллов") | |
elif message.text == '2': | |
bot.send_message(message.chat.id, "Вы получили " + str(message.text) + " баллов") | |
elif message.text == '3': | |
bot.send_message(message.chat.id, "Вы получили " + str(message.text) + " баллов") | |
key_continue = types.ReplyKeyboardMarkup(resize_keyboard=True) | |
item = types.KeyboardButton('ДАЛЕЕ') | |
key_continue.add(item) | |
bot.send_message(message.chat.id, "Для продолжения нажмите ДАЛЕЕ ", reply_markup=key_continue) | |
@bot.message_handler(content_types=['text']) | |
def bot_message2(message): | |
if message.text == "ДАЛЕЕ": | |
print('Показать видео 2') | |
bot.polling(none_stop=True) |
Спасибо, большое за ответ!
Разобрался через дебаггер, что кнопка "Далее" handlerom text уже не обрабатывается.
А вот обработчик @bot.callback_query_handler(func=lambda call: True) ее смог обработать. Переделал кнопку на InlineKeyboardMarkup() и заработало.
Видимо теперь можно, постваить какой-то счетчик и по нему показывать соответствующее видео.
Нашел решение через метод register_next_step_handler
Принимает два обязательных аргументы первый это message, а второй это function.
Работает таким образом, он ждёт сообщение пользователя и потом вызывает указанную функцию с аргументом message
import telebot
from settings import googlesheet_id, token, googlesheet_clucbot = telebot.TeleBot(token)
@bot.message_handler(commands=['help', 'start'])
def start(message):
msg = bot.send_message(message.chat.id, 'Введите первое значение')
bot.register_next_step_handler(msg, start_2)def start_2(message):
msg = bot.send_message(message.chat.id, 'Введите второе значение')
bot.register_next_step_handler(msg, start_3, message.text)def start_3(message, value):
print(message.text, value)
Возможно это из-за того, что
@bot.callback_query_handler(func=lambda call: True)
забирает в свою обработку все кнопки, включаю кнопку "Далее", для которой нет там обработкиМожно попробовать заменить на что-то такое (что будет обрабатывать определённую кнопку/кнопки). Советую почитать подробнее информацию про лямбда функции.
Либо можно попробовать эту функцию переместить повыше. Потому что после того, как пользователь бота шлёт запрос на API Telegram, библиотека pyTelegramBotAPI, на которой написаны все функции, идёт по всем функциям по порядку. И возможно в каком-то месте есть зацикливание (где в лямбда функциях стоит True, а не какое-нибудь сравнение). Рекомендую освоить дебаггер, если пишете код в PyCharm, там можно было бы расставить точки останова на каждую функцию и посмотреть, в какую функцию летит запрос от пользователя. Хорошее объясние того, как работает дебаггер: плейлист.