telegram bot отвечает на сообщение со второго раза
Как побороть проблему, что бот реагирует на сообщение со второго раза? Вот участок кода, в котором проблема:
def display_recs(message):
mycursor.execute('SELECT * FROM opros_100;')
df1 = pd.DataFrame(mycursor.fetchall())
df1.columns = [x[0] for x in mycursor.description]
print(df1)
data1 = Dataset.load_from_df(df1[['userId', 'movieId', 'rating']], reader2)
trainset__ = data1.build_full_trainset()
testset__ = trainset__.build_anti_testset()
pred_list = algo.test(testset__)
top_n = get_top_n_movies(message.from_user.id, pred_list, 5, df_100)
bot.send_message(message.chat.id, "Рекомендация для тебя")
bot.send_message(message.chat.id,
f'{top_n["title"][:5]}')
msg = bot.send_message(message.chat.id, 'Выбери действие', reply_markup=main_kb)
bot.register_next_step_handler(msg, main_buttons)
def display_rated(message):
mycursor.execute('SELECT title, rating FROM opros_100 WHERE userId=%s', (message.from_user.id,))
result = mycursor.fetchall()
temp = []
for i in range(len(result)):
temp.append(f'{result[i][0]} -- {result[i][1]}')
rated = '\n'.join(temp)
bot.send_message(message.chat.id, f'Оцененные фильмы:\n{rated}')
message = bot.send_message(message.chat.id, 'Выбери действие', reply_markup=main_kb)
bot.register_next_step_handler(message, main_buttons)
def main_buttons(message):
if message.text == 'Получить рекомендации':
bot.register_next_step_handler(message, display_recs)
if message.text == 'Посмотреть оцененные фильмы':
bot.register_next_step_handler(message, display_rated)
Подозреваю, что проблема в функции main_buttons, так как при отправке первого сообщения, вроде бы, идет заход в условие с проверкой текста сообщения, а с отправкой второго сообщения идет переход на нужную функцию.
Выглядит это так:
Также есть такой момент, что при отправке первым сообщением команды на вывод рекомендаций, а вторым просмотр оценённых фильмов, то срабатывает все равно первая команда:
Видимо проблема с register_next_step_handler(), но не могу придумать, как исправить, чтобы все было корректно
Ответы (1 шт):
Это происходит из-за неразберихи в части :
if message.text == 'Получить рекомендации':
bot.register_next_step_handler(message, display_recs)
if message.text == 'Посмотреть оцененные фильмы':
bot.register_next_step_handler(message, display_rated)
Попробую объяснить понятнее. Сам метод register_next_step_handler() ждет сообщения пользователя, чтобы после этого перейти к следующей части. А у Вас сначала функция If проверяет сообщение и запускает bot.register_next_step_handler, после чего этот метод ожидает еще одного сообщения, чтобы перейти ко второй части (def)
Решение проблемы я вижу в переходе сразу к функции def display_rated / recs, отставив register_next_step_handler
Если возникли вопросы, задавайте их смело в комментариях.

