Как сделать несколько ветвлений для телеграмм-бота?
Всем привет. Пока что я только учусь писать ботов для тг, поэтому у меня могут возникать глупые ошибки, извиняюсь за это)) Так вот, бот не работает так, как должен, по задумке, он должен после слов ИТМО или СПБГУ отправлять фотку и сообщение, но он этого не делает. Проблемная часть кода выделена. Памагити
@bot.message_handler(content_types=['text'])
def ra(message):
if message.chat.type == 'private':
mark = types.ReplyKeyboardMarkup(resize_keyboard=True)
A = types.KeyboardButton('Питер')
B = types.KeyboardButton('Москва')
C = types.KeyboardButton('Казань')
mark.row(A, B, C)
if message.text == 'Питер':
bot.send_photo(message.chat.id, 'ссылка', 'Прекрасно!')
mar = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
buttonE = types.KeyboardButton('ИТМО')
buttonF = types.KeyboardButton('СПбГУ')
mar.row(buttonE, buttonF)
bot.send_message(message.chat.id, 'Ну а теперь вузы!', reply_markup=mar)
*if message.text == 'ИТМО':
bot.send_photo(message.chat.id, 'ссылка', 'Уууу')
elif message.text == 'СПбГУ':
bot.send_photo(message.chat.id, 'ссылка', 'Ясненько')*
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Во-первых хватит делать хендлеры которые ловят в себя все, а потом извращаться с ифами внутри функции. Делайте фильтры, внутри декоратора. Это и красивее и меньше мусора.
Вот примерный код, но в зависимости от того как вы будете обрабатывать ответ, можно сделать лучше
from telebot import TeleBot, types
from telebot.types import ReplyKeyboardMarkup
import config
bot = TeleBot(config.BOT_TOKEN)
@bot.message_handler(commands=["start"])
def start(message: types.Message):
markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
markup.row("Питер", "Москва", "Казань")
bot.send_message(message.chat.id, "Выбери город", reply_markup=markup)
@bot.message_handler(chat_types=["private"], func=lambda msg: msg.text == "Питер")
def if_sp(message: types.Message):
# bot.send_photo(message.chat.id, 'ссылка', 'Прекрасно!')
markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
markup.row('ИТМО', 'СПбГУ')
bot.send_message(message.chat.id, 'Ну а теперь ВУЗ!', reply_markup=markup)
@bot.message_handler(chat_types=["private"], func=lambda msg: msg.text == "ИТМО")
def if_itmo(message: types.Message):
# bot.send_photo(message.chat.id, 'ссылка', 'Уууу')
pass
@bot.message_handler(chat_types=["private"], func=lambda msg: msg.text == "СПбГУ")
def if_spbgu(message: types.Message):
# bot.send_photo(message.chat.id, 'ссылка', 'Ясненько')
pass
bot.infinity_polling(skip_pending=True)