Telebot. Python. Как защитится от спама?

Суть проблемы в том, что при очень быстром нажатии на одну кнопку несколько раз, меню раздваивается, потому что хэндлер получает два сообщения вместо планированного одного.
Пишу условный код, на котором случается ошибка, тк в оригинале очень много строк.

def menu_show (message):
    # В оригинале тут работа с БД

    markup = types.ReplyKeyboardMarkup(True, one_time_keyboard = True)
    markup.row("menu")
    
    bot.send_message(message.chat.id, "*Меню*", reply_markup=markup)
    bot.register_next_step_handler(message, menu_processing)

def menu_processing(message):
    if message.text == "menu":
        menu_show(message)
    else:
        bot.send_message(message.chat.id, "Неправильный ввод, нажми на кнопку.")
        bot.register_next_step_handler(message, menu_show)
  • Вопрос задан
  • 242 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Andrey_Dolg
Не совсем вас понял. Вроде как кнопки делают холд на время обработки сами.
Но если нет, в теории в message находится свойство id вы можете глобально(через базу или ещё как) думаю хорошая работа для redis или sqlite in memory держать те id что находятся в обработке и высвобождать их, только после завершения отправки ответа как следствие условие на входе обработчика.
if message_id not in processing_ids:
    ...

Upd
Ах да для полноты картины так же желательно проверять юзера поле from_user вроде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы