Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ربات فروش نمایندگی (تلگرام)

ربات ساده و کامل فروش نمایندگی/پنل با پرداخت کارت‌به‌کارت، تأیید دستی ادمین و تحویل خودکار به مشتری.

امکانات

  • نمایش پلن‌ها و انتخاب توسط کاربر
  • نمایش شماره کارت و دریافت رسید (عکس/فایل)
  • ارسال سفارش جدید به ادمین همراه با دکمه‌های ✅ تأیید / ❌ رد
  • بعد از تأیید، ادمین اطلاعات پنل رو می‌فرسته و ربات خودکار به مشتری تحویل می‌ده
  • بخش «سفارش‌های من» برای کاربر (وضعیت + اطلاعات پنل‌های تحویل‌شده)
  • ذخیره‌سازی با SQLite (بدون نیاز به دیتابیس جدا)

اجرای محلی (تست قبل از آپلود)

pip install -r requirements.txt
cp .env.example .env   # و مقادیر رو پر کنید
python bot.py

دیپلوی روی Railway (مرحله به مرحله)

  1. یک بات جدید در تلگرام از @BotFather بسازید و توکن رو کپی کنید.
  2. آیدی عددی خودتون رو از @userinfobot بگیرید (این آیدی ادمین شماست).
  3. این پوشه رو در یک ریپازیتوری گیت‌هاب آپلود کنید (یا مستقیم zip رو در Railway آپلود کنید).
  4. در railway.app:
    • New Project → Deploy from GitHub repo رو بزنید و ریپازیتوری رو انتخاب کنید.
    • Railway به‌طور خودکار Dockerfile رو تشخیص میده و بیلد می‌کنه.
  5. در تب Variables پروژه، این متغیرها رو اضافه کنید:
    Key Value
    BOT_TOKEN توکن گرفته‌شده از BotFather
    ADMIN_IDS آیدی عددی ادمین(ها) - با کاما جدا کنید
    CARD_NUMBER شماره کارت برای پرداخت
    CARD_HOLDER نام صاحب کارت
    DB_PATH /data/bot.db (توضیح در مرحله بعد)
    BRAND_NAME نام برند (مثلاً X4G)
    SUPPORT_USERNAME آیدی تلگرام پشتیبانی بدون @ (مثلاً SuppX4G)
    REFERRAL_REQUIRED_COUNT تعداد دعوت موفق لازم برای هدیه (پیش‌فرض 3)
    REFERRAL_REWARD_VOLUME حجم پنل هدیه به گیگ (پیش‌فرض 50)
  6. مهم — ماندگاری دیتابیس: روی Railway فایل‌سیستم بین دیپلوی‌ها ری‌ست میشه. برای اینکه سفارش‌ها پاک نشن:
    • در تب Volumes یک Volume جدید بسازید و آن رو در مسیر /data مانت (mount) کنید.
    • مطمئن شوید متغیر DB_PATH=/data/bot.db تنظیم شده باشه.
  7. بعد از دیپلوی، لاگ‌ها رو چک کنید؛ اگر پیام خطا نبود، ربات آماده‌ست. به تلگرام برید و /start بزنید.

منوی اصلی

منو به‌صورت دوستونه چیده شده تا همه گزینه‌ها همون اول دیده بشن:

  • 🛍 خرید سرویس | 🖥 سرویس‌های من
  • 💰 کیف پول | 💬 پشتیبانی
  • 🤝 دعوت دوستان | 📜 قوانین
  • 🛠 مدیریت ربات (فقط برای ادمین‌ها نمایش داده میشه)

مسیر خرید

🛍 خرید سرویس → انتخاب سرویس (گیمینگ / مولتی لوکیشن) → انتخاب تعرفه → نمایش خلاصه سفارش + شماره کارت با دکمه‌های «📤 ارسال رسید»، «💰 پرداخت با کیف پول» (در صورت کافی بودن موجودی) و «🔙 بازگشت». همه‌جا دکمه «🔙 بازگشت» برای برگشت به مرحله قبل وجود داره.

بخش سرویس‌های من

با زدن «🖥 سرویس‌های من» لیست سفارش‌ها به‌صورت دکمه (با آیکون وضعیت) نشون داده میشه. با کلیک روی هر سفارش، جزئیات کامل (پلن، قیمت، وضعیت و در صورت تحویل، اطلاعات/کانفیگ سرویس) نمایش داده میشه.

کیف پول

کاربر از بخش «💰 کیف پول» می‌تونه:

  • موجودی فعلی خودش رو ببینه.
  • با زدن «➕ شارژ کیف پول»، مبلغ دلخواه رو وارد کنه، رسید واریز رو ارسال کنه و بعد از تأیید ادمین، همون مبلغ به کیف پولش اضافه بشه.
  • در خرید سرویس، اگه موجودی کیف پولش کافی باشه، به‌جای ارسال رسید می‌تونه با دکمه «💰 پرداخت با کیف پول» مستقیم و آنی پرداخت کنه (بدون نیاز به تأیید رسید). اگه بعداً ادمین اون سفارش رو رد کنه، مبلغ به‌صورت خودکار به کیف پول کاربر برمی‌گرده.

قوانین

بخش «📜 قوانین» یک متن پیش‌فرض (قابل تغییر) درباره نحوه تحویل، بازگشت وجه، محدودیت‌های استفاده و... نمایش می‌ده. ادمین می‌تونه از داخل «🛠 مدیریت ربات → 📜 ویرایش قوانین» این متن رو کاملاً دلخواه عوض کنه.

بخش مدیریت ربات (فقط ادمین)

دکمه «🛠 مدیریت ربات» فقط برای آیدی‌های داخل ADMIN_IDS توی منوی اصلی نمایش داده میشه (با دستور /admin هم قابل دسترسیه). از این بخش می‌شه:

  • تعرفه‌های گیمینگ و مولتی لوکیشن: تغییر قیمت هر تعرفه، فعال/غیرفعال کردن، افزودن تعرفه جدید (حجم/عنوان + قیمت دلخواه).
  • ✉️ پیام خوش‌آمدگویی: متن پیام /start رو کاملاً دلخواه تغییر بدید (تگ‌های ساده HTML مثل <b> پشتیبانی میشه).
  • 📜 ویرایش قوانین: متن بخش «قوانین» رو تغییر بدید.
  • 🤝 تنظیمات رفرال: درصد پورسانتی نقدی که به کیف پول دعوت‌کننده به‌ازای هر خرید موفق زیرمجموعه‌اش تعلق می‌گیره رو تغییر بدید.
  • 🎟 کدهای تخفیف: ساخت/فعال‌سازی/غیرفعال‌سازی/حذف کد تخفیف با درصد و ظرفیت دلخواه.
  • 💳 تخفیف شارژ کیف پول: آستانه مبلغ و درصد هدیه پلکانی شارژ کیف پول رو تنظیم کنید.

همه این تنظیمات داخل دیتابیس ذخیره می‌شن، پس با هر بار ری‌استارت شدن ربات از بین نمی‌رن (به شرطی که از Volume برای دیتابیس استفاده کرده باشید، طبق مرحله ۶ بالا).

تأیید/رد شارژ کیف پول توسط ادمین

وقتی کاربر درخواست شارژ کیف پول می‌ده و رسید می‌فرسته، برای همه ادمین‌ها پیامی با دکمه‌های «✅ تأیید و شارژ» / «❌ رد» ارسال میشه؛ این کاملاً مستقل از تأیید سفارش‌های سرویسه (سفارش‌ها همچنان از همون دکمه‌های «✅ تأیید» / «❌ رد» قبلی مدیریت می‌شن).

سیستم رفرال (پورسانتی نقدی دائمی)

هر کاربر یک لینک اختصاصی می‌گیره (t.me/<bot>?start=ref_<user_id>). به‌ازای هر خرید موفقی که یکی از دعوت‌شده‌هاش انجام بده و ادمین تحویلش بده، یه درصد مشخص (پیش‌فرض ۱۰٪) از مبلغ همون خرید بلافاصله و نقداً به کیف پول دعوت‌کننده اضافه میشه - این کار محدودیت تعداد دفعات نداره و برای همیشه ادامه داره. درصد پورسانتی از «🛠 مدیریت ربات → 🤝 تنظیمات رفرال» قابل تغییره.

کد تخفیف (کوپن)

ادمین از «🛠 مدیریت ربات → 🎟 کدهای تخفیف» می‌تونه کد تخفیف بسازه (مثلاً SUMMER20 با ۲۰٪ تخفیف و ظرفیت استفاده دلخواه یا نامحدود). کاربر توی صفحه خلاصه سفارش، با دکمه «🎟 اعمال کد تخفیف» می‌تونه کدش رو وارد کنه تا قیمت نهایی به‌صورت خودکار محاسبه بشه؛ امکان تغییر یا حذف کد هم هست.

تخفیف پلکانی شارژ کیف پول

از «🛠 مدیریت ربات → 💳 تخفیف شارژ کیف پول» می‌شه یه آستانه مبلغ (پیش‌فرض ۵۰۰٬۰۰۰ تومان) و درصد هدیه (پیش‌فرض ۵٪) تعیین کرد. وقتی کاربری شارژی برابر یا بیشتر از اون آستانه بزنه و ادمین تأییدش کنه، علاوه بر مبلغ اصلی، همون درصد هم به‌عنوان هدیه به کیف پولش اضافه میشه.

محافظت در برابر اسپم (Rate Limit)

یک میان‌افزار ساده روی کل ربات فعاله که جلوی کلیک/پیام پشت‌سرهمِ خیلی سریع از یک کاربر رو می‌گیره (پیام‌ها حداقل هر ۰.۷ ثانیه، دکمه‌ها حداقل هر ۰.۴ ثانیه)؛ این از اسپم دکمه‌ها یا ثبت سفارش پشت‌سرهم جلوگیری می‌کنه.

نکته درباره دکمه پشتیبانی

آیدی پشتیبانی (SUPPORT_USERNAME) فقط داخل لینک دکمه قرار می‌گیره، نه در متن پیام - یعنی کاربر عادی آیدی رو در متن نمی‌بینه و فقط با زدن دکمه پی‌وی پشتیبانی باز میشه. توجه داشته باشید تلگرام به‌طور کامل امکان مخفی‌کردن آدرس لینک از کاربر فنی/کنجکاو رو نمی‌ده (مثلاً با نگه‌داشتن روی دکمه در بعضی کلاینت‌ها لینک نمایش داده میشه)، اما در حالت عادی استفاده، آیدی در متن پیام دیده نمی‌شه.

نکته درباره رنگ دکمه‌ها

تلگرام (از طریق Bot API) اجازه تنظیم رنگ سفارشی برای دکمه‌های Reply Keyboard یا Inline رو نمی‌ده - رنگ دکمه‌ها بر اساس تم (Theme) کلاینت تلگرام کاربر تعیین میشه، نه توسط ربات. برای تمایز بصری از ایموجی و چیدمان دکمه‌ها استفاده شده.

ویرایش پلن‌ها، برند و پشتیبانی

همه داخل فایل config.py هستند:

  • COUNTRIES: لیست کشورها (کد + نام نمایشی)
  • VOLUMES: لیست حجم‌ها بر حسب گیگابایت
  • BASE_PRICE و PRICE_STEP: قیمت ۵۰ گیگ اول و مقدار افزایش قیمت به ازای هر پله بعدی (الان: شروع از ۱۰۰ تومان با پله‌های ۲۰۰۰ تومانی)
  • BRAND_NAME: نام برند که در پیام خوش‌آمدگویی نمایش داده میشه
  • SUPPORT_USERNAME: آیدی تلگرام پشتیبانی (بدون @)

نکات مهم امنیتی

  • توکن ربات و آیدی ادمین‌ها رو هیچ‌وقت داخل کد قرار ندید؛ همیشه از Environment Variables استفاده کنید (همونطور که در بالا انجام شده).
  • فایل .env رو در گیت‌هاب آپلود نکنید (در .gitignore قرار داده شده).
  • این ربات پرداخت رو به‌صورت دستی (تأیید توسط ادمین) مدیریت می‌کنه، یعنی درگاه پرداخت آنلاین نداره. اگر بعداً خواستید درگاه آنلاین (زرین‌پال و ...) اضافه کنید، بگید تا اون بخش رو هم اضافه کنم.

ساختار فایل‌ها

├── bot.py           # فایل اصلی و تمام هندلرها
├── config.py        # تنظیمات و لیست پلن‌ها
├── database.py      # لایه دیتابیس SQLite
├── requirements.txt
├── Dockerfile
├── railway.json
├── .env.example
└── .gitignore

About

No description, website, or topics provided.

Resources

Stars

131 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages