Форум сайта python.su
0
Короче не могу понять как правильно разделить 2 и 3 функцию чтоб работала можете пожалуйста помочь
import telebot from telebot import types from configure import token bot = telebot.TeleBot(token) class food(): def __init__(self, name, price, description): self.name = name self.price = price self.des = description sa1 = food('Цезарь с куриной грудкой', '560', '') sa2 = food('Цезарь с креветками', '635', '') sa3 = food('Салат с тунцом и грейпфрутом', '645', 'Освежающий салат с кусочками свежего тунца, дольками грейпфрута, черри, оливками и салатным миксом под цитрусовой заправкой') so1 = food('Семейный очаг', '499', 'Сытный мясной суп с говядиной, курицей, свининой и овощами. Заботливо согревает и обволакивает') so2 = food('Суп с чечевицей и овощами', '329', 'Зелёный свет! Суп с чечевицей, брокколи, цветной капустой и грибами ') so3 = food('Сырный суп в хлебе', '579', 'Ароматный сырный крем-суп с орегано и картофельными чипсами. Подаём в хлебе') p1 = food('Маргарита 28|40 см', '399|569', 'Фирменный томатный соус, сливочная моцарелла и базилик. Классика, к которой иногда так хочется вернуться') p2 = food('Пепперони 28|40 см', '535|769', 'Пицца, которая умеет подстроиться под любую ситуацию. Пепперони, моцарелла, фирменный томатный соус и петрушка') p3 = food('Ветчина и грибы 28|40 см', '699|989', 'Шампиньоны, моцарелла, фирменный томатный соус, орегано и ветчина. Ничего лишнего, только любимое') d1 = food('Эспрессо 30|60 мл', '139|199', '') d2 = food('Американо 180|300 мл', '199|329', '') d3 = food('Латте 250|430 мл', '229|329', '') c1 = food('Лимонад маракуйя 120|620 мл', '319|749', 'Уже при первом знакомстве маракуйя, цветочный сироп, лимон и содовая без капли стеснения подхватывают вас и кружат словно в вальсе. Глоток, ещё один – и всё вокруг уже заиграло новыми красками') c2 = food('Ягодный лимонад 280|700 мл', '319|749', 'Сочетание летних ягод малины и черники с добавлением черносмородинового сиропа, вишнёвого и клюквенного сока, газированной воды и сауэр микс') c3 = food('Тархун 290|820 мл', '299|699', 'Пряный тархун в сочетании с лимонным и яблочным соками и газированной водой ') a1 = food('Каппитан морган кола', '345', 'Ром Капитан Морган Пряный Золотой, Кока–Кола') a2 = food('Дюарс хайбол', '355', 'Дюарс Уайт Лэйбл, сауэр микс, ванильный сироп, содовая, лайм') a3 = food('Джек с колой', '355', 'Джек Дэниел’с Олд №7, Кока-Кола') @bot.message_handler(commands = ['start']) def first_part(message): main_markup = types.InlineKeyboardMarkup() basket = types.InlineKeyboardButton(text = 'Корзина', callback_data = 'basket') salad = types.InlineKeyboardButton(text = 'Салаты', callback_data = 'salad') soup = types.InlineKeyboardButton(text = 'Суп', callback_data = 'soup') pizza = types.InlineKeyboardButton(text = 'Пицца', callback_data = 'pizza') drink = types.InlineKeyboardButton(text = 'Напитки', callback_data = 'drink') cocktail = types.InlineKeyboardButton(text = 'Коктели', callback_data = 'cocktail') alcohol = types.InlineKeyboardButton(text = 'Алькоголь', callback_data = 'alcohol') main_markup.add(salad, soup, pizza, drink, cocktail, alcohol, basket) bot.send_message(message.from_user.id, 'Выберите вид еды которую хотите закзать', reply_markup = main_markup) @bot.callback_query_handler(func = lambda call: True) def second_part(call): main_markup = types.InlineKeyboardMarkup() back = types.InlineKeyboardButton(text = 'Назад', callback_data = 'back') basket = types.InlineKeyboardButton(text = 'Корзина', callback_data = 'basket') menu = types.InlineKeyboardButton(text = 'Меню', callback_data = 'menu') if call.data == 'salad': bsa1 = types.InlineKeyboardButton(text = sa1.name, callback_data = sa1) bsa2 = types.InlineKeyboardButton(text = sa2.name, callback_data = sa2) bsa3 = types.InlineKeyboardButton(text = sa3.name, callback_data = sa3) main_markup.add(bsa1, bsa2, bsa3) if call.data == 'soup': bso1 = types.InlineKeyboardButton(text = so1.name, callback_data = so1) bso2 = types.InlineKeyboardButton(text = so2.name, callback_data = so2) bso3 = types.InlineKeyboardButton(text = so3.name, callback_data = so3) main_markup.add(bso1, bso2, bso3) if call.data == 'pizza': bp1 = types.InlineKeyboardButton(text = p1.name, callback_data = p1) bp2 = types.InlineKeyboardButton(text = p2.name, callback_data = p2) bp3 = types.InlineKeyboardButton(text = p3.name, callback_data = p3) main_markup.add(bp1, bp2, bp3) if call.data == 'drink': bd1 = types.InlineKeyboardButton(text = d1.name, callback_data = d1) bd2 = types.InlineKeyboardButton(text = d2.name, callback_data = d2) bd3 = types.InlineKeyboardButton(text = d3.name, callback_data = d3) main_markup.add(bd1, bd2, bd3) if call.data == 'cocktail': bc1 = types.InlineKeyboardButton(text = c1.name, callback_data = c1) bc2 = types.InlineKeyboardButton(text = c2.name, callback_data = c2) bc3 = types.InlineKeyboardButton(text = c3.name, callback_data = c3) main_markup.add(bc1, bc2, bc3) if call.data == 'alcohol': ba1 = types.InlineKeyboardButton(text = a1.name, callback_data = a1) ba2 = types.InlineKeyboardButton(text = a2.name, callback_data = a2) ba3 = types.InlineKeyboardButton(text = a3.name, callback_data = a3) main_markup.add(ba1, ba2, ba3) main_markup.add(back, basket, menu) bot.send_message(call.message.chat.id, 'Выберите еду которую хотите заказать', reply_markup = main_markup) @bot.callback_query_handler(func = lambda call: True) def third_part(call): main_markup = types.InlineKeyboardMarkup() add = types.InlineKeyboardButton(text = 'Добавить в корзину', callback_data = 'add') back = types.InlineKeyboardButton(text = 'Назад', callback_data = 'back') basket = types.InlineKeyboardButton(text = 'Корзина', callback_data = 'basket') menu = types.InlineKeyboardButton(text = 'Меню', callback_data = 'menu') main_markup.add(back, basket, menu, add) bot.send_message(call.message.chat.id, f'{call.data.name} {call.data.price}\n{call.data.des}', reply_markup = main_markup) if __name__ == '__main__': bot.polling(non_stop = True, interval = 0)
Офлайн
124
вас не смущает, что в callback_data вместо строки объект. Почему вы решили хранить данные еды в классе а не в базе данных?Начинайте делать по одной кнопке, писать код как бы от малого к большему. В большом коде плохо ориентироваться.
Офлайн