Телеграм бот на python. дублирование сообщений
Проблема заключается в том, что если выключен интернет у пользователя и он нажал команду старт несколько раз, то запускается сразу несколько одинаковых процессов в боте.
код:
import telebot
bot_token = 'токен'
bot = telebot.TeleBot(bot_token, parse_mode=None)
@bot.message_handler(commands=['start'])
def welcome(message):
msg = bot.send_message(message.chat.id, "Фамилия:")
bot.register_next_step_handler(msg, get_name)
def get_name(message):
msg = bot.send_message(message.chat.id, f'Имя:')
bot.register_next_step_handler(msg, get_patronymic)
def get_patronymic(message):
msg = bot.send_message(message.chat.id, f'Отчество:')
bot.polling(none_stop=True)
Ответы (3 шт):
Попробуйте заменить Вашу строчку @bot.message_handler(commands=['start']) на @bot.message_handler(func=lambda message: message.text == "/start").
Оберните bot.send_message в функцию. В ней должен быть словарь где ключ userid а значение текст сообщения. Вызываете функцию, передаете ей userid и текст. Функция проверяет есть ли в словаре по ключу userid значение, и если нет выполняет send_message и вносит в словарь отправленный текст по ключу userid. Если есть, сравнивает текст подлежащий отправке с текстом из словаря. Если они совпадают, то ничего не делает. Но я когда такое делал, в этом месте удалял сообщение пользователя, и таким образом у него перед глазами всегда последнее сообщение от бота. Если не совпадают, то выполняет send_message, и вносит в словарь отправленный текст по ключу userid. Если дальше нужно использовать next_step_handler, то соответственно делаете return. И это будет работать с любыми текстовыми сообщениями. А если нужно из другого места программы всё таки отправить текст аналогичный предыдущему, то перед send_message просто делаете lastmsgtext[userid]=‘’
Не знаю как быть с сообщениями, но у меня была подобная проблема при обработке колбэков: при нажатии инлайн кнопки на айфонах - сообщение приходило 3 раза в ответ, всё облазил и каким то чудом узнал об этом:
telegram_bot.answer_callback_query(call.id)
Просто сообщить телеге что мы обработали колбэк и всё, он перестаёт дублировать запросы. Возможно вам стоит поискать подобный подход.
