Надо исправить код чтобы работало добавление в корзину
import telebot
from telebot import types
# Токен вашего бота (замените на свой)
BOT_TOKEN = "здесь будет мой токен"
# Инициализация бота
bot = telebot.TeleBot(BOT_TOKEN)
# Меню
menu = {
"бургеры": {
"Чизбургер": 100,
"Воппер": 150,
"Биг Мак": 200
},
"напитки": {
"Кока-Кола": 40,
"Фанта": 40,
"Спрайт": 40
},
"гарниры": {
"Картофель фри": 60,
"Куриные наггетсы": 90
}
}
# Акции
promotions = ["Скидка 20% на все бургеры", "Куриные наггетсы по цене 2 за 1"]
# Корзина
cart = {}
@bot.message_handler(commands=['start'])
def send_welcome(message):
markup = types.InlineKeyboardMarkup()
markup.row(
types.InlineKeyboardButton(text="Меню", callback_data="show_menu"),
types.InlineKeyboardButton(text="Акции", callback_data="show_promotions"),
types.InlineKeyboardButton(text="Корзина", callback_data="show_cart")
)
bot.send_message(message.chat.id, "Добро пожаловать в KFC! \nВыберите действие:", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: call.data == "show_menu")
def show_menu(call):
markup = types.InlineKeyboardMarkup()
for category, items in menu.items():
for item, price in items.items():
markup.add(types.InlineKeyboardButton(text=f"Добавить {item} ({price} руб.)",
callback_data=f"add_to_cart_{category}_{item}"))
markup.add(types.InlineKeyboardButton(text="Назад", callback_data="back_to_main"))
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Выберите категорию:", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: call.data.startswith("add_to_cart_"))
def add_to_cart(call):
_, category, item = call.data.split("_")
if category not in cart:
cart[category] = []
cart[category].append(item)
bot.answer_callback_query(call.id, text=f"{item} добавлен в корзину")
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text=f"{item} добавлен в корзину", reply_markup=None)
@bot.callback_query_handler(func=lambda call: call.data == "back_to_main")
def back_to_main(call):
markup = types.InlineKeyboardMarkup()
markup.row(
types.InlineKeyboardButton(text="Меню", callback_data="show_menu"),
types.InlineKeyboardButton(text="Акции", callback_data="show_promotions"),
types.InlineKeyboardButton(text="Корзина", callback_data="show_cart")
)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Добро пожаловать в KFC! \nВыберите действие:", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: call.data == "show_promotions")
def show_promotions(call):
promotions_text = "*Текущие акции:*\n"
for promotion in promotions:
promotions_text += f"- {promotion}\n"
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text=promotions_text, reply_markup=None)
@bot.callback_query_handler(func=lambda call: call.data == "show_cart")
def show_cart(call):
if cart:
total_price = 0
cart_text = "*Ваша корзина:*\n"
for category, items in cart.items():
cart_text += f"\n*{category.upper()}*:\n"
for item in items:
price = menu[category][item]
total_price += price
cart_text += f"- {item} ({price} руб.)\n"
cart_text += f"\n*Итого:* {total_price} руб."
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton(text="Удалить", callback_data="remove_from_cart"))
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text=cart_text, reply_markup=markup)
else:
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Ваша корзина пуста", reply_markup=None)
@bot.callback_query_handler(func=lambda call: call.data.startswith("remove_from_cart_"))
def remove_from_cart(call):
_, category, item = call.data.split("_")
if category in cart and item in cart[category]:
cart[category].remove(item)
if not cart[category]:
del cart[category]
bot.answer_callback_query(call.id, text=f"{item} удален из корзины")
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Корзина обновлена", reply_markup=None)
@bot.callback_query_handler(func=lambda call: call.data == "placeorder")
def place_order(call):
bot.answer_callback_query(call.id, text="Заказ оформлен! Спасибо!")
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Ваш заказ оформлен! Спасибо!", reply_markup=None)
cart.clear()
#Запускаем бота
bot.infinity_polling()
При попытке добавить товар в корзину выдаёт вот такую вот ошибку 2024-05-30 18:15:59,544 (init.py:1095 MainThread) ERROR - TeleBot: "Infinity polling exception: too many values to unpack (expected 3)"