""" بات منوی رستوران — نسخه رایگان Restaurant Menu Bot (Bale) — Free Version بات‌بان | hi@botban.ir """ import os, json, time, logging from typing import Any import requests from dotenv import load_dotenv load_dotenv() log = logging.getLogger(__name__) TOKEN: str = os.getenv("BALE_BOT_TOKEN", "") BASE_URL: str = f"https://tapi.bale.ai/bot{TOKEN}" MAX_MENU_ITEMS: int = 20 # محدودیت نسخه رایگان # بارگذاری منو از فایل JSON with open(os.path.join(os.path.dirname(__file__), "menu.json"), encoding="utf-8") as f: MENU: dict = json.load(f) # سبد خرید در حافظه (user_id -> list of item dicts) carts: dict[int, list[dict]] = {} def format_price(price: int) -> str: return f"{price:,} تومان" def categories_keyboard() -> dict: """کیبورد دسته‌بندی‌های منو""" buttons = [ [{"text": data["label"], "callback_data": f"cat:{key}"}] for key, data in MENU["categories"].items() ] buttons.append([{"text": "🛒 سبد خرید من", "callback_data": "myorder"}]) return {"inline_keyboard": buttons} def find_item(item_id: str) -> dict | None: for cat in MENU["categories"].values(): for item in cat["items"]: if item["id"] == item_id: return item return None def handle_add_to_cart(chat_id: int, item_id: str) -> None: item = find_item(item_id) if not item: return cart = carts.setdefault(chat_id, []) for entry in cart: if entry["id"] == item_id: entry["qty"] += 1 send_message(chat_id, f"✅ {item['name']} ({entry['qty']} عدد) در سبد خرید.") return cart.append({"id": item_id, "name": item["name"], "price": item["price"], "qty": 1}) send_message(chat_id, f"✅ {item['name']} به سبد خرید اضافه شد.\n💰 {format_price(item['price'])}") def handle_my_order(chat_id: int) -> None: cart = carts.get(chat_id, []) if not cart: send_message(chat_id, "🛒 سبد خریدت خالیه!", categories_keyboard()) return lines = ["🛒 سبد خرید شما:\n"] total = 0 for entry in cart: lines.append(f"• {entry['name']} × {entry['qty']} — {format_price(entry['price'] * entry['qty'])}") total += entry["price"] * entry["qty"] lines.append(f"\n💰 جمع کل: {format_price(total)}") send_message(chat_id, "\n".join(lines)) # ... ادامه کد (تا ۱۷۳ خط دیگر) # نسخه کامل + مستندات + دیتابیس → hi@botban.ir