Как заменить это на конструкцию if-else
Во многих гайдах по созданию telegram-ботов на python есть такая конструкция:
@bot.message_handler(content_types = ["text"]) def...
Я бы хотел сделать это через if-else, но в документации по pyTelegramBotApi никакого message_handler не нашёл, и других альтернатив определения типа содержимого сообщения тоже не нашёл, да и, вообще, методы в документации какие-то странные: не совпадают с тем, что приходится использовать. Например, в документации sendMessage, но компилятор говорит, что его не существует, работает только send_message, который в документации не присутствует. У меня, конечно, есть свои догадки по этому поводу, но хотелось бы знать точно). Пожалуйста, объясните мне момент с if-else и расскажите, что не так я понимаю в документации.
Ответы (2 шт):
@bot.message_handler - это декоратор (функция, которая обертывает другую функцию)
Ниже после этого декоратора можно добавить функцию, которая будет содержать дополнительные условия. Например:
@bot.message_handler(content_types=["text"])
def text_handler(message):
if message.text == "Привет!":
bot.send_message(message.chat.id, "Добрый день!")
else:
bot.send_message(message.chat.id, "Я вас не понимаю...")
Вот способ обработки сообщений без использования декораторов:
import telebot
bot = telebot.TeleBot(token)
upd = bot.get_updates()
last_upd = upd[-1]
print(last_upd)
last_msg = last_upd.message
print(last_msg)
if last_msg.text == "Hi":
bot.send_message(last_msg.chat.id, "Hello, how are you?")
bot.polling()
Здесь используется метод .get_updates(), с помощью него можно узнать последние обновления (last_upd). Из последнего обновления получаем сообщение от пользователя last_upd.message (там содержится информация о пользователе, дата отправки, сам текст сообщения и тд.) Далее информацию из объекта last_msg (last_upd.message) можно использовать, как в примере выше. (единственная проблема, ответ на сообщение отправляется один раз, видимо, бот отключается и его надо каждый раз обновлять)