ویژگیها • نصب • دستورات • پنل ادمین • استقرار لینوکس • داکر • آپدیت • معماری
بات تلگرام برای هشدار قیمت لحظهای ارزهای دیجیتال + چارت تکنیکال + سیستم اشتراک چندسطحی.
ساختهشده با python-telegram-bot و httpx، با معماری ماژولار، async کامل، و پنل مدیریت داخل ربات.
- اسپات و فیوچرز بایننس بهصورت یکپارچه
- TradingView symbols برای دامیننس (
BTC.D,TOTAL,TOTAL2, …) - تشخیص خودکار نماد:
BTC→BTCUSDT،ETH→ETHUSDTو چندین جفت دیگر - تشخیص خودکار جهت: اگر فقط عدد بفرستی، بالاتر از قیمت فعلی → U، پایینتر → D
- چک هر ۶۰ ثانیه در پسزمینه (parallel برای همه نمادها)
- دکمههای شیشهای برای حذف، نمایش چارت، بروزرسانی
- صفحهبندی لیست هشدارها
- قیمت لحظهای + اطلاعات ۲۴h (high, low, volume, change%)
- چارت تکنیکال با RSI، BB، EMA50 (Chart-Img API)
- تایمفریمهای متنوع:
1m,5m,15m,1h,4h,1d,1w - محدودیت نمودار روزانه بر اساس پلن
| پلن | قیمت/ماه | مدت | هشدار همزمان | نمودار/روز |
|---|---|---|---|---|
| 🆓 FREE | رایگان ♾️ | بدون انقضا | ۳ | ۲ |
| ⭐ PRO | 550٬000 تومان | ۱ ماهه | ۸ | ۸ |
| 💎 VIP | 900٬000 تومان | ۱ ماهه | ∞ | ∞ |
تنظیم قیمت و محدودیتها فقط با ویرایش
PLANSدرbot/config.py— بدون نیاز به ریاستارت.
بدون نیاز به باز کردن کد! همهچیز از داخل ربات:
- 📊 آمار زنده: تعداد کاربران هر پلن + منقضیها + درخواستهای در انتظار
- 📩 درخواستهای خرید: لیست با دکمههای تایید/رد
- 👥 لیست کاربران با صفحهبندی
- 🔍 جستجوی کاربر با chat_id
- 🔔 نوتیفیکیشن خودکار به ادمینها هنگام درخواست خرید
- تنزل خودکار پلنهای منقضیشده به FREE (هر شب ۰۰:۰۵ + استارت بات)
| لایه | ابزار |
|---|---|
| زبان | Python 3.10+ |
| فریمورک بات | python-telegram-bot v21+ |
| HTTP | httpx (async + connection pool) |
| Scheduler | APScheduler |
| TradingView | tradingview-scraper |
| ذخیرهسازی | JSON (در data/) |
| نمودار | chart-img.com API |
| لاگ | stdout → journald (systemd) |
Crypto_alert/
├── main.py # نقطه ورود + ثبت هندلرها
├── requirements.txt
├── .env # تنظیمات محیطی (ساخته شود)
├── .env.example
├── Dockerfile
├── docker-compose.yml
├── deploy/
│ ├── crypto-alert.service # systemd unit
│ ├── install.sh # اسکریپت نصب خودکار
│ └── README.md # راهنمای deploy
├── bot/
│ ├── __init__.py
│ ├── config.py # env، ثابتها، پلنها
│ ├── storage.py # JSON I/O + کش in-memory + per-file lock
│ ├── http_client.py # کلاینت HTTP مشترک (connection pool)
│ ├── utils.py # قالببندی، زمان
│ ├── prices.py # قیمت Binance + TradingView
│ ├── ui.py # کیبوردها
│ ├── alerts.py # CRUD هشدار + تسک پسزمینه
│ ├── subscriptions.py # پلنها + auto-demotion
│ ├── admin.py # پنل ادمین + pending requests
│ ├── update.py # startup + shutdown + error handler
│ └── handlers/
│ ├── commands.py # /start, /plan, /grant, /admin, ...
│ ├── callbacks.py # دکمهها + پنل ادمین
│ └── messages.py # پیامهای آزاد + منو
└── data/ # JSON ها (auto-created)
├── alerts.json
├── subscribers.json
├── subscriptions.json
├── chart_usage.json
└── pending_requests.json
- Python 3.10+ (بهخاطر
zoneinfoوhttpxمدرن) - یک توکن ربات تلگرام از @BotFather
# 1. کلون یا دانلود
git clone https://github.com/TahaT80/Crypto_alert.git
cd Crypto_alert
# 2. ساخت محیط مجازی
python3 -m venv venv
source venv/bin/activate # لینوکس/مک
# venv\Scripts\activate # ویندوز
# 3. نصب وابستگیها
pip install --upgrade pip
pip install -r requirements.txt
# 4. تنظیم .env
cp .env.example .env
nano .env # TELEGRAM_TOKEN را پر کن
# 5. اجرا
python main.pyاگر همهچی درست باشد:
2025-01-15 10:00:00 INFO: 🚀 BOT IS STARTING ...
2025-01-15 10:00:00 INFO: ✅ Scheduler started — demote expired daily at 00:05
2025-01-15 10:00:00 INFO: check_alerts started
2025-01-15 10:00:00 INFO: Application started
برو و در تلگرام به رباتت /start بفرست.
# آپدیت سیستم و نصب پیشنیازها (Ubuntu/Debian)
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3.11 python3.11-venv python3-pip git
# برای CentOS/RHEL/Rocky/Alma
# sudo dnf install -y python3.11 python3.11-pip git# ساخت کاربر سیستمی (بدون دسترسی shell)
sudo useradd -r -s /bin/false -d /opt/crypto-alert crypto-alert
# ساخت پوشه پروژه
sudo mkdir -p /opt/crypto-alert
sudo chown crypto-alert:crypto-alert /opt/crypto-alert# کلون ریپازیتوری
cd /tmp
git clone https://github.com/TahaT80/Crypto_alert.git
cd Crypto_alert
# کپی فایلها به پوشه نهایی
sudo cp -r * /opt/crypto-alert/
sudo cp -r .env.example /opt/crypto-alert/
sudo chown -R crypto-alert:crypto-alert /opt/crypto-alert# ورود به دایرکتوری پروژه
cd /opt/crypto-alert
# ساخت محیط مجازی
sudo -u crypto-alert python3 -m venv /opt/crypto-alert/venv
# نصب وابستگیها
sudo -u crypto-alert /opt/crypto-alert/venv/bin/pip install --upgrade pip
sudo -u crypto-alert /opt/crypto-alert/venv/bin/pip install -r /opt/crypto-alert/requirements.txt# کپی .env.example به .env
sudo -u crypto-alert cp /opt/crypto-alert/.env.example /opt/crypto-alert/.env
# ویرایش فایل .env
sudo -u crypto-alert nano /opt/crypto-alert/.envمحتوای .env را تنظیم کنید:
# === Telegram ===
TELEGRAM_TOKEN=123456:ABC-DEF... # الزامی
# === ادمین ===
ADMIN_IDS=123456789,987654321 # آیدی عددی ادمینها
ADMIN_CONTACT=@your_admin # یوزرنیم ادمین
# === زمانبندی ===
TIMEZONE=Asia/Tehran
# === API های اختیاری ===
CHART_API_KEY= # برای چارت تکنیکالفایل سرویس را بسازید:
sudo nano /etc/systemd/system/crypto-alert.serviceمحتوای زیر را قرار دهید:
[Unit]
Description=Crypto Alert Telegram Bot
After=network.target
[Service]
Type=simple
User=crypto-alert
Group=crypto-alert
WorkingDirectory=/opt/crypto-alert
ExecStart=/opt/crypto-alert/venv/bin/python main.py
Restart=always
RestartSec=10
Environment=PYTHONUNBUFFERED=1
StandardOutput=journal
StandardError=journal
SyslogIdentifier=crypto-alert
[Install]
WantedBy=multi-user.targetفعالسازی و استارت سرویس:
# ریلود systemd
sudo systemctl daemon-reload
# فعالسازی در بوت
sudo systemctl enable crypto-alert
# استارت سرویس
sudo systemctl start crypto-alert
# بررسی وضعیت
sudo systemctl status crypto-alert# مشاهده وضعیت
sudo systemctl status crypto-alert
# استارت
sudo systemctl start crypto-alert
# استاپ
sudo systemctl stop crypto-alert
# ریاستارت
sudo systemctl restart crypto-alert
# مشاهده لاگها (زنده)
sudo journalctl -u crypto-alert -f
# مشاهده لاگهای اخیر
sudo journalctl -u crypto-alert -n 50
# مشاهده لاگها از زمان خاص
sudo journalctl -u crypto-alert --since "2025-01-15 10:00"# چک کردن اجرای بات
curl -sf https://api.telegram.org/bot${TELEGRAM_TOKEN}/getMe
# چک کردن پورتها
sudo ss -tlnp | grep python
# چک کردن مالکیت فایلها
ls -la /opt/crypto-alert/data/
# چک کردن وضعیت سرویس
systemctl is-enabled crypto-alertاگر فایل deploy/install.sh موجود باشد:
# دانلود و اجرا
cd /tmp
git clone https://github.com/TahaT80/Crypto_alert.git
cd Crypto_alert
chmod +x deploy/install.sh
sudo ./deploy/install.shاگر نمیخواهید از systemd استفاده کنید:
# ورود به پوشه پروژه
cd /opt/crypto-alert
# اجرا با nohup
sudo -u crypto-alert nohup /opt/crypto-alert/venv/bin/python main.py > /var/log/crypto-alert.log 2>&1 &
# یا استفاده از screen
sudo -u crypto-alert screen -dmS crypto-alert /opt/crypto-alert/venv/bin/python main.py
# برای مشاهده screen
screen -r crypto-alert# ۱. توقف سرویس
sudo systemctl stop crypto-alert
# ۲. ورود به پوشه پروژه
cd /opt/crypto-alert
# ۳. دریافت تغییرات
sudo -u crypto-alert git pull origin main
# ۴. آپدیت وابستگیها
sudo -u crypto-alert /opt/crypto-alert/venv/bin/pip install -r /opt/crypto-alert/requirements.txt
# ۵. استارت مجدد
sudo systemctl start crypto-alert
# ۶. بررسی وضعیت
sudo systemctl status crypto-alertیک فایل بسازید: sudo nano /opt/crypto-alert/update.sh
#!/bin/bash
cd /opt/crypto-alert
sudo systemctl stop crypto-alert
sudo -u crypto-alert git pull origin main
sudo -u crypto-alert /opt/crypto-alert/venv/bin/pip install -r /opt/crypto-alert/requirements.txt
sudo systemctl start crypto-alert
echo "✅ Update completed at $(date)"اجازه اجرا بدهید:
chmod +x /opt/crypto-alert/update.shاجرای آپدیت:
sudo /opt/crypto-alert/update.sh# ویرایش crontab
sudo crontab -e
# اضافه کردن خط زیر (هر روز ساعت ۴ صبح)
0 4 * * * /opt/crypto-alert/update.sh >> /var/log/crypto-alert-update.log 2>&1تمام تنظیمات در فایل .env:
# === Telegram ===
TELEGRAM_TOKEN=123456:ABC-DEF... # الزامی
# === ادمین ===
ADMIN_IDS=123456789,987654321 # چند ادمین، با کاما
ADMIN_CONTACT=@your_admin # یوزرنیم برای نمایش به کاربران
# === زمانبندی ===
TIMEZONE=Asia/Tehran
# === API های اختیاری ===
CHART_API_KEY= # برای چارت تکنیکال
CMC_API_KEY= # CoinMarketCap| متغیر | الزامی | توضیح |
|---|---|---|
TELEGRAM_TOKEN |
✅ | توکن BotFather |
ADMIN_IDS |
❌ | آیدی عددی ادمینها برای دستورات ادمینی |
ADMIN_CONTACT |
❌ | یوزرنیم ادمین (برای نمایش به کاربران) |
CHART_API_KEY |
❌ | بدون آن فقط متن قیمت (بدون تصویر) |
| دستور | توضیح |
|---|---|
/start |
منوی اصلی + ثبتنام خودکار |
/help |
راهنمای کامل |
/cancel |
لغو عملیات جاری |
/add SYM PRICE [U|D] |
افزودن هشدار قیمت |
/list |
لیست هشدارها (با صفحهبندی) |
/delete ID |
حذف یک هشدار |
/p SYM |
قیمت لحظهای |
/chart SYM [TF] |
چارت تکنیکال |
/plan |
مشاهده/تغییر پلن |
/subscribe |
عضویت |
/unsubscribe |
لغو عضویت |
| دستور | توضیح |
|---|---|
/admin |
باز کردن پنل ادمین (interactive) |
/grant <user_id> <PLAN> [days] |
اختصاص پلن (مثل /grant 123 PRO 30) |
/revoke <user_id> |
حذف کامل اشتراک |
/userinfo <user_id> |
نمایش اطلاعات پلن یک کاربر |
/plans |
نمایش پلنها + آمار ادمین |
┌─────────────────────┬─────────────────────┐
│ 📋 هشدارهای من │ 💲 قیمت لحظهای │
├─────────────────────┼─────────────────────┤
│ ➕ افزودن هشدار │ 🗑 حذف هشدار │
├─────────────────────┼─────────────────────┤
│ 💎 پلنها │ ℹ️ راهنما │
├─────────────────────┼─────────────────────┤
│ │ 💼 پنل ادمین* │
└─────────────────────┴─────────────────────┘
* فقط برای ادمین
- کاربر روی
💎 پلن حرفهای — 💳 خریدکلیک میکند - ربات هیچ تغییری در پلن نمیدهد — فقط اطلاعات پرداخت نشان میدهد
- درخواست به ادمین(ها) ارسال میشود با دکمههای ✅ / ❌
- کاربر مبلغ را به
ADMIN_CONTACTواریز میکند و رسید میفرستد - ادمین تایید میکند → پلن خودکار فعال میشود + به کاربر اطلاع داده میشود
- یا ادمین رد میکند → کاربر مطلع میشود
- اگر پلن PRO/VIP منقضی شود:
- در
/plan→ خودکار به FREE تنزل مییابد - در
/userinfo→ خودکار به FREE تنزل مییابد - هر شب ساعت
00:05→ همه کاربران منقضی یکجا تنزل مییابند - در استارت بات → یکبار cleanup کامل
- در
بعد از تنظیم ADMIN_IDS در .env و ریاستارت:
- در تلگرام
/adminبفرست - پنل زیر نمایش داده میشود:
💼 پنل ادمین
📊 آمار کاربران:
🆓 FREE: 30
⭐ PRO: 15
💎 VIP: 5
⚠️ منقضی: 2
👥 مجموع: 52
📩 درخواستهای در انتظار: 2
[📩 درخواستهای خرید (2)]
[📊 آمار] [👥 لیست کاربران]
[🔍 جستجوی کاربر]
[↩️ بستن]
docker compose up -d
docker compose logs -f
docker compose restartdocker build -t crypto-alert-bot .
docker run -d \
--name crypto-alert-bot \
--restart unless-stopped \
--env-file .env \
-v $(pwd)/data:/app/data \
crypto-alert-bot┌─────────────────────────────────────────────────────┐
│ Telegram Bot API │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Application (PTB) │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Handlers │ │ Callbacks │ │
│ │ (commands) │ │ (buttons) │ │
│ └──────┬───────┘ └──────┬───────┘ │
└─────────┼──────────────────┼────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────┐
│ Domain Layer (bot/*.py) │
│ alerts │ subscriptions │ admin │
└────┬─────────────┬──────────────┬───────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────┐
│ Storage (in-memory cache + JSON) │
│ load_json / save_json (per-file lock) │
└─────────────────────────────────────────────────────┘
│
▼
┌──────────────────┐
│ data/*.json │
└──────────────────┘
| Task | Interval | کار |
|---|---|---|
check_alerts_loop |
۶۰s | چک قیمت همه هشدارها |
_demote_expired_job |
روزانه ۰۰:۰۵ | تنزل پلنهای منقضی |
- Connection Pool مشترک برای همه درخواستهای HTTP (۱۵ connection همزمان)
- In-memory cache برای فایلهای JSON (پس از اولین load، I/O صفر)
- Per-file lock به جای global (parallel reads)
- Parallel price fetching با
asyncio.gatherدر رندر alert list و چک loop - Skip empty saves در alert loop (اگه تغییری نکرد، فایل save نمیشه)
در bot/config.py:
PLANS: Dict[str, Plan] = {
"FREE": Plan(price_toman=0, max_alerts=3, max_charts_per_day=2, ...),
"PRO": Plan(price_toman=250_000, duration_days=30, max_alerts=8, ...),
"VIP": Plan(price_toman=750_000, duration_days=30, max_alerts=-1, ...),
}| مشکل | علت | راهحل |
|---|---|---|
Conflict: terminated by other getUpdates |
دو نمونه از بات در حال اجراست | نمونه قبلی را ببندید: pkill -9 -f 'python.*main.py' |
401 Unauthorized |
توکن اشتباه | توکن را از @BotFather دوباره بگیرید |
ImportError: zoneinfo |
Python < 3.10 | به Python 3.10+ ارتقا دهید |
| چارت نمایش داده نمیشود | CHART_API_KEY خالی |
از chart-img.com کلید بگیرید |
Permission denied: data/ |
مالکیت فایلها | sudo chown -R crypto-alert:crypto-alert /opt/crypto-alert |
| بات بعد از ریبوت بالا نمیاد | سرویس enable نشده | sudo systemctl enable crypto-alert |
python -c "
import asyncio
from bot.prices import get_price_info
async def main():
for sym in ['BTCUSDT', 'ETHUSDT', 'BTC.D']:
info = await get_price_info(sym)
if info:
print(f'{sym}: {info[\"price\"]} ({info[\"market\"]})')
asyncio.run(main())
"curl -sf https://api.telegram.org/bot${TELEGRAM_TOKEN}/getMe | python -m json.tool- Fork کنید
- برنچ بسازید (
git checkout -b feature/amazing) - تغییرات را commit کنید (
git commit -m 'feat: add amazing feature') - Push کنید (
git push origin feature/amazing) - Pull Request باز کنید
این پروژه تحت مجوز MIT منتشر شده است. برای جزئیات LICENSE را ببینید.
ساختهشده با ❤️ برای جامعه کریپتو فارسی