ربات چندسکویی اتوماسیون تغذیه، رزرو هوشمند غذا، مدیریت اعتبار و تولید بارکد تحویل برای سامانه یکپارچه صمد (دانشگاه صنعتی شریف و سایر دانشگاهها) با دو پیادهسازی مستقل و پشتیبانی همزمان از تلگرام (Telegram) و بله (Bale).
این مخزن شامل دو پیادهسازی مستقل و کامل متناسب با نیازهای مختلف است:
FoodBot/
├── miniapp/ # 📱 مینیاپ اختصاصی تلگرام (نسخه مستقل Static SPA)
│ └── index.html # کلاینت وب سبک، بهینه و بدون وابستگی سنگین
│
├── python/ # 🐍 نسخه پایتون (Long-polling / سرور یا داکر)
│ ├── handlers/ # هندلرهای دستورات و گفتگوهای تلگرام و بله
│ ├── bot.py # نقطه ورود اصلی ربات پایتون
│ ├── config.py # تنظیمات و متغیرهای محیطی
│ ├── database.py # مدیریت پایگاهداده SQLite
│ ├── date_helper.py # تبدیل تقویم شمسی/میلادی و کار با روزها
│ ├── samad_client.py # کلاینت ارتباط با وبسرویس صمد
│ ├── requirements.txt # وابستگیهای پایتون
│ ├── Dockerfile # ایمیج داکر برای استقرار کانتینری
│ ├── docker-compose.yml # فایل استقرار آسان با داکر کامپوز
│ ├── foodbot.service # سرویس systemd برای لینوکس/VPS
│ ├── .env.example # الگوی متغیرهای محیطی
│ └── README.md # راهنمای کامل نسخه پایتون
│
├── cloudflare/ # ☁️ نسخه کلادفلر (Serverless / رایگان ۲۴ ساعته)
│ ├── src/ # کدهای TypeScript ربات با grammY
│ │ ├── bot.ts # منطق ربات و پیامها
│ │ ├── index.ts # نقطه ورود ورکر کلادفلر، مینیاپ و API
│ │ ├── miniapp.ts # رندر مینیاپ تلگرام با بارگذاری آنی
│ │ ├── samad.ts # کلاینت صمد در محیط ورکر
│ │ ├── db.ts # ارتباط با Cloudflare D1
│ │ ├── kv.ts # ارتباط با Cloudflare KV
│ │ ├── qr.ts # تولید تصویر QR Code در Edge
│ │ ├── date.ts # مدیریت تاریخهای شمسی
│ │ └── types.ts # تعاریف داده و تایپها
│ ├── wrangler.toml # تنظیمات ورکر، بایندینگ دیتابیس D1 و KV
│ ├── schema.sql # ساختار جدول دیتابیس D1
│ ├── .dev.vars.example # الگوی متغیرهای محیطی توسعه محلی
│ └── README.md # راهنمای استقرار نسخه کلادفلر
│
├── .gitignore # نادیدهگرفتن فایلهای حساس، توکنها و دیتابیسها
├── LICENSE # لایسنس MIT
└── README.md # راهنمای جامع پروژه
| ویژگی | 🐍 نسخه پایتون (python/) |
☁️ نسخه سرورلس کلادفلر (cloudflare/) |
|---|---|---|
| هزینه میزبانی | نیازمند VPS یا سیستم همیشه روشن | ۱۰۰٪ رایگان (از پلن رایگان Cloudflare Workers) |
| روش دریافت پیام | Long-polling (یا وبهوک اختیاری) | Webhook در لبه شبکه جهانی کلادفلر |
| دیتابیس | SQLite محلی (storage.db) |
دیتابیس ابری سرورلس Cloudflare D1 |
| کش و سشن | فایل / حافظه رم | حافظه کلید-مقدار ابری Cloudflare KV |
| پیامرسانهای هدف | تلگرام و بله (با آرگومان --platform) |
تلگرام و بله (با متغیر PLATFORM یا وبهوک مجزا) |
| پروکسی در ایران | پشتیبانی داخلی از PROXY_URL (Socks5/HTTP) |
بینیاز از پروکسی (میزبانی مستقیم روی زیرساخت Cloudflare) |
| سادگی راهاندازی | نیازمند نصب Python و داکر/VPS | استقرار در ۵ دقیقه با wrangler deploy |
| دستور / دکمه | توضیح و عملکرد |
|---|---|
📱 مینیاپ صمد (/app) |
اجرای مینیاپ اختصاصی وب تلگرام (TMA) با رابط گرافیکی سریع، منوی هفتگی، رزرو و بارکد تحویل |
🍽 غذای امروز (/today) |
نمایش غذای رزرو شده امروز، نام سلف، وضعیت تحویل و تولید خودکار کد QR / بارکد تحویل |
📅 برنامه هفته بعد (/nextweek) |
منوی کامل هفته آینده با امکان مقایسه همزمان همه سلفها به تفکیک هر روز |
📋 غذاهای رزرو مانده (/remaining) |
مشاهده لیست غذاهای رزرو شده تا پایان هفته با قابلیت لغو و دریافت بارکد |
💰 مانده اعتبار (/credit) |
نمایش موجودی کیف پول تغذیه (ریال و تومان) و ریز تراکنشهای اخیر |
💳 افزایش اعتبار (/charge) |
اتصال مستقیم به سامانه متمرکز پرداخت شریف (pay.sharif.ir) و لینک ورود سریع با توکن |
🛒 رزرو و خرید غذا (/buy) |
خرید تعاملی از منوی هفته آینده با دکمههای اینلاین و خرید از فروش روزانه |
⚙️ انتخاب سلف (/self) |
تغییر سالن غذاخوری پیشفرض کاربر (مرکزی، خوابگاه، خلدبرین و...) |
👤 حساب کاربری (/profile) |
مشخصات دانشجو، رشته، شماره دانشجویی و سلف فعال |
🔐 ورود و خروج (/login, /logout) |
ورود امن چندکاربره با تفکیک نشست و رمزهای عبور |
cd python
# ایجاد محیط مجازی و نصب وابستگیها
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# تنظیم فایل پیکربندی
cp .env.example .env
# مقادیر BOT_TOKEN و پلتفرم را در فایل .env تنظیم کنید
# اجرا برای تلگرام
python bot.py --platform telegram
# اجرا برای پیامرسان بله
python bot.py --platform bale👉 جزئیات بیشتر، داکر و سرویس systemd در راهنمای نسخه پایتون.
cd cloudflare
# نصب وابستگیها
npm install
# ساخت دیتابیس D1 و سطل KV
npx wrangler d1 create foodbot-db
npx wrangler d1 execute foodbot-db --remote --file=./schema.sql
npx wrangler kv namespace create foodbot-kv
# ثبت ایمن توکن ربات
npx wrangler secret put BOT_TOKEN
# استقرار روی شبکه کلادفلر
npx wrangler deployپس از استقرار، کافی است لینک زیر را در مرورگر باز کنید تا وبهوک در تلگرام یا بله ثبت شود:
- برای تلگرام:
https://<your-worker>.workers.dev/set-webhook?platform=telegram - برای بله:
https://<your-worker>.workers.dev/set-webhook?platform=bale
👉 راهنمای گامبهگام و مصور در راهنمای نسخه کلادفلر.
پروژه شامل یک مینیاپ وب مدرن و فوقالعاده سبک (کمتر از ۴۰ کیلوبایت) است که به صورت مستقیم در تلگرام اجرا میشود:
- سرعت لودینگ زیر ۱۰۰ میلیثانیه: طراحی شده با HTML5/CSS3/Vanilla JS بدون فریمورکهای سنگین React/Vue.
- انطباق تم: سازگاری کامل با تم روشن و تاریک تلگرام بر اساس متغیرهای تم کاربر.
- ۴ بخش اصلی:
- 🍽 امروز: وعدههای امروز، وضعیت تحویل، و پاپآپ بارکد و QR Code تحویل برای اسکن در گیت سلف.
- 📅 رزرو غذا: انتخاب روز، سلف غذاخوری، و رزرو یا لغو آنی غذا با ویبره لمسی (Haptic Feedback).
- 💳 کیف پول: نمایش موجودی، دکمه پرداخت مستقیم شریف (pay.sharif.ir) و تاریخچه تراکنشها.
- 👤 پروفایل: مشخصات دانشجو، انتخاب سلف پیشفرض و خروج امن.
- دسترسی سریع:
- دستور
/appدر چت ربات - دکمه شیشهای منوی اصلی
- منوبار پایین چت تلگرام (Menu Button)
- دستور
در هر دو نسخه ربات و مینیاپ، گزینه «افزایش اعتبار» مستقیماً به درگاه متمرکز دانشگاه صنعتی شریف متصل است:
- آدرس درگاه:
https://pay.sharif.ir - پرداخت مستقیم بدون نیاز به وارد کردن مجدد کلمه عبور صمد
- بهروزرسانی آنی اعتبار در ربات و مینیاپ بلافاصله پس از پرداخت
- دکمه جایگزین ورود سریع با توکن (Token Login) به سامانه وب صمد نیز حفظ شده است.
پیامرسان بله از پروتکلی سازگار با تلگرام برای رباتها استفاده میکند:
- آدرس وبسرویس رباتهای بله:
https://tapi.bale.ai/bot<TOKEN>/<METHOD> - توکن ربات را میتوانید مستقیماً از @BotFather در پیامرسان بله دریافت کنید.
- برای نسخه پایتون، کافی است مقدار
PLATFORM=baleدر.envقرار گیرد یا آرگومان--platform baleپاس داده شود. - برای نسخه کلادفلر، وبهوک با اندپوینت
/set-webhook?platform=baleفعال میشود.
- هیچگونه توکن، رمز عبور یا فایل پایگاهداده در مخزن گیت ذخیره نمیشود.
- فایلهای حساس (
.env،storage.db،.dev.vars، پوشهvenvوnode_modules) در.gitignoreبه دقت فیلتر شدهاند. - پس از دریافت رمز عبور در مرحله لاگین، پیام حاوی پسورد کاربر بلافاصله حذف میگردد.
این پروژه تحت مجوز متنباز MIT License منتشر شده است.