@Brad_baf

Как сделать так чтобы, бот не дублировал выполнение команд?

Пишу на библиотеке pyTelegramBotAPI. Есть бот у которого есть две команды. Если в начале написать название команды один раз то все будет работать как надо, но если в стартовом поле прописать два и больше раз название команды до момента когда бот начнет анализировать отправленное то команда выполниться два раза. Вот вопрос как сделать так чтобы бот воспринимал не 2 отправленных сообщения а только одно.
постараюсь описать как это выглядит в чате:
Пользователь: /start
Бот: предлагает выбрать одну из команд
Пользователь: один раз прописал эту команду
пользователь: второй раз прописал эту команду
Бот: выполняет функцию один раз
Бот: выполняет функцию второй раз
Пользователь: /start
Бот: предлагает выбрать одну из команд
Бот: второй раз предлагает выбрать одну из команд несмотря на то что пользователь прописал /start всего один раз

Если можно, пример кода. И да спасибо что уделили время на мою проблему!
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
SoreMix
@SoreMix
yellow
Декоратор лишний тут:
@bot.message_handler(content_types=['text'])
def check(message):
    x = message.text
    if x == "say_smth":
        command = say_hi_comm(message)
    else:
        command = start_comm(message)


Должно быть:
def check(message):
    x = message.text
    if x == "say_smth":
        command = say_hi_comm(message)
    else:
        command = start_comm(message)


Сообщения от пользователя обрабатываете либо через декоратор, проверяя какой текст он ввел, либо через register_next_step_handler. Но не оба способа сразу
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Hukyl
Честно, не понимаю, как у вас получалось чтобы бот вводил два раза

Вот код:
import telebot

TOKEN = "ВАШ_ТОКЕН"
bot = telebot.TeleBot(TOKEN)


@bot.message_handler(commands = ['start'])
def start_comm(message):
    bot.send_message(message.chat.id, "Выбери команду (/start, /say_hi)")


@bot.message_handler(commands = ['say_hi'])
def say_hi_comm(message):
    bot.send_message(message.chat.id, f"Привет, {message.from_user.first_name}!")


bot.polling(none_stop = True)


Если и этот код может прислать по два раза команду, то проблема не на стороне Telegram
(лично много раз проверял этот код)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Marilyn Москва
от 100 000 до 130 000 ₽
iCode Москва
от 90 000 до 200 000 ₽
SwapZilla.co Москва
от 200 000 ₽