ربات تلگرامی حرفهای برای تغییر اندازه، فشردهسازی و تبدیل تصاویر و ویدئوها
توسط Hoot-Code
| قابلیت | توضیحات |
|---|---|
| 📸 پردازش تصویر | تغییر اندازه، فشردهسازی و تبدیل فرمت — JPG · PNG · WEBP |
| 🎬 پردازش ویدئو | تغییر اندازه، فشردهسازی و تبدیل فرمت — MP4 · AVI · MKV |
| 🗜️ حالت فشردهسازی | کاهش حجم فایل بدون تغییر رزولوشن |
| 🔄 تبدیل فرمت | تبدیل بین فرمتهای مختلف تصویر و ویدئو |
| 🎯 Fit / Stretch | حفظ نسبت تصویر یا اعمال ابعاد دقیق |
| 🔒 اسکنر امنیتی | اعتبارسنجی Magic Byte و تشخیص فایلهای مخرب |
| 🌐 چندزبانه | انگلیسی · روسی · چینی · فارسی |
| 🛡️ پنل مدیریت | ارسال همگانی، مسدودسازی، آمار، تنظیمات زنده، سلامت، خاموشی |
| 💾 تاریخچه کاربران | ذخیره آخرین اندازه استفاده شده |
| ⚡ پردازش همزمان | مدیریت چند عملیات موازی با محدودیت منابع |
| 🐘 PostgreSQL | پایگاه داده آماده تولید با اتصالات استخر شده |
| 📊 Metriсهای Prometheus | مانیتورینگ لحظهای با داشبوردهای Grafana |
| 🔭 OpenTelemetry | ردیابی توزیعشده از طریق OTLP |
| 🚀 Kubernetes | استقرار خودکار (۲ تا ۱۰ پاد) |
| 🏷️ پرچمهای ویژگی | فعال/غیرفعال کردن ویژگیها بدون استقرار مجدد |
| 🛡️ محدودیت نرخ | محدودیت آپلود فایل به ازای هر کاربر (۵ در دقیقه) |
| 🔄 خاموشی آرام | تکمیل عملیات در حال اجرا قبل از خروج |
ReFrame/
├── main.py # نقطه ورود و اجرای ربات
├── config.py # متغیرهای محیطی، پرچمهای ویژگی و تنظیمات
├── database.py # مدیریت پایگاه داده دوگانه (SQLite / PostgreSQL)
├── handlers.py # مدیریت تعاملات کاربران
├── admin_handlers.py # پنل مدیریت
├── media_processor.py # پردازش تصاویر و ویدئوها (Pillow + FFmpeg)
├── scanner.py # اسکنر امنیتی
├── locales.py # ترجمهها و متون چندزبانه
├── utils.py # توابع کمکی
├── metrics.py # متريکهای Prometheus
├── tracing.py # ردیابی توزیعشده OpenTelemetry
├── tests/ # ۱۲۴ تست خودکار
├── k8s/ # فایلهای پیکربندی Kubernetes
├── monitoring/ # پیکربندی Prometheus و Grafana
├── docker-compose.yml # استک کامل تولید
├── locustfile.py # پیکربندی تست بار
├── SECURITY.md # سیاست امنیتی و مستندات SOC 2
├── requirements.txt
├── pyproject.toml # بستهبندی مدرن پایتون
├── Dockerfile
├── .env.example # الگوی متغیرهای محیطی
├── .gitignore
├── .dockerignore
└── temp_media/ # بهصورت خودکار ایجاد میشود
git clone https://github.com/Hoot-Code/ReFrame.git
cd ReFramepython -m venv venv
source venv/bin/activate # ویندوز: venv\Scripts\activate
pip install -r requirements.txt
# یا نصب با تمام افزونههای اختیاری:
pip install -e ".[all]"# macOS
brew install ffmpeg
# Ubuntu / Debian
sudo apt install ffmpeg
# ویندوز — دانلود از https://ffmpeg.org/download.htmlcp .env.example .envفایل .env را ویرایش کنید:
BOT_TOKEN=your_bot_token_here
ADMIN_IDS=123456789
python main.pydocker build -t reframe-bot .
docker run -d --env-file .env --name reframe reframe-botdocker compose up -dشامل: ربات + PostgreSQL + Redis + Prometheus + Grafana
kubectl apply -f k8s/| دستور | توضیح |
|---|---|
/start |
شروع ربات و انتخاب زبان |
/help |
نمایش راهنمای کامل |
/stats |
مشاهده آمار استفاده |
/lang |
تغییر زبان |
/cancel |
لغو عملیات جاری |
/admin |
ورود به پنل مدیریت (فقط مدیران) |
/health |
بررسی سلامت ربات (فقط مدیران) |
/shutdown |
خاموشی آرام (فقط مدیران) |
| کد | زبان |
|---|---|
en |
انگلیسی |
ru |
روسی |
zh |
چینی |
fa |
فارسی |
زبان هنگام اجرای دستور /start انتخاب شده و در هر زمان از طریق /lang قابل تغییر است.
⚠️ مهم: این یک مکانیزم غربالگری سبک است، نه تحلیل امنیتی کامل.
تمام فایلهای آپلودشده پیش از پردازش بررسی میشوند:
- اعتبارسنجی Magic Byte — هدر فایل باید با نوع ادعایی مطابقت داشته باشد
- شناسایی الگوهای مخرب — رد فایلهای حاوی PHP، اسکریپتهای Shell، ELF/PE، ZIP جاسازیشده
- اعتبارسنجی EOF JPEG — بررسی انتهای صحیح فایلهای JPEG
- ثبت رویدادها — هر فایل مسدودشده در
security_logsثبت میشود
اسکنر نمیتواند تشخیص دهد:
- پردازههای چندشکلی یا رمزگذاریشده
- بمبهای منطقی یا حملات تأخیری
- محتوای استگانوگرافیک
- آسیبپذیریهای خاص دیکدرها
- محرکهای از بین بردن حافظه
جزئیات کامل در SECURITY.md موجود است.
قابل دسترس از طریق /admin برای مدیران تعریفشده:
- 📢 ارسال پیام همگانی
- 👤 مدیریت کاربران (مسدودسازی و رفع مسدودیت)
- 🚧 حالت تعمیرات — متوقف کردن ربات برای کاربران غیرمدیر
- 📊 آمار کامل — جزئیات استفاده و نرخ موفقیت
- 🔒 گزارشهای امنیتی — ۱۵ رویداد آخر
- ⚙️ تنظیمات — تغییر زنده CRF، preset، کیفیت، حداکثر حجم
- ❤️ سلامت — وضعیت ربات، عملیات فعال، زمان کارکرد
- 🛑 خاموشی — خاموشی آرام (تکمیل عملیات در حال اجرا)
| نام | رزولوشن |
|---|---|
| پست اینستاگرام | 1080 × 1080 |
| استوری اینستاگرام | 1080 × 1920 |
| HD | 1280 × 720 |
| Full HD | 1920 × 1080 |
| 4K | 3840 × 2160 |
| توییتر | 1200 × 675 |
| کاور فیسبوک | 820 × 312 |
| ✏️ سفارشی | هر اندازه (تا ۳۸۴۰ پیکسل) |
| متغیر | ضروری | پیشفرض | توضیح |
|---|---|---|---|
BOT_TOKEN |
✅ | — | توکن ربات تلگرام از @BotFather |
ADMIN_IDS |
✅ | — | شناسههای تلگرام مدیران ( جدا شده با کاما) |
DB_BACKEND |
❌ | sqlite |
بکاند پایگاه داده: sqlite یا postgresql |
DATABASE_URL |
❌ | — | آدرس اتصال PostgreSQL |
REDIS_URL |
❌ | — | آدرس Redis برای محدودیت نرخ توزیعشده |
MAX_FILE_SIZE_MB |
❌ | 50 |
حداکثر حجم فایل آپلود (مگابایت) |
MAX_CONCURRENT_JOBS |
❌ | 2 |
حداکثر عملیات پردازش همزمان |
FF_RATE_LIMITING |
❌ | true |
فعالسازی محدودیت نرخ به ازای هر کاربر |
FF_SCANNER |
❌ | true |
فعالسازی اسکنر امنیتی |
FF_METRICS |
❌ | true |
فعالسازی متريکهای Prometheus |
FF_TRACING |
❌ | false |
فعالسازی ردیابی OpenTelemetry |
متريکها در http://localhost:9090/metrics در دسترس هستند:
| متريک | نوع | توضیح |
|---|---|---|
reframe_commands_total |
counter | دستورات دریافتی |
reframe_files_processed |
counter | فایلهای پردازششده موفق |
reframe_files_failed |
counter | فایلهای ناموفق |
reframe_scan_threats |
counter | تهدیدات شناساییشده |
reframe_active_jobs |
gauge | عملیات در حال پردازش |
reframe_processing_time_seconds |
summary | تأخیر پردازش |
دسترسی به Grafana در http://localhost:3000 (admin/admin):
- داشبوردهای از پیش پیکربندیشده
- منبع داده Prometheus بهصورت خودکار پیکربندی میشود
# تمام تستها
pytest
# با جزئیات
pytest -v
# ماژول خاص
pytest tests/test_scanner.py
# فقط تستهای یکپارچه
pytest tests/test_integration.py tests/test_e2e.py| ماژول | تعداد | پوشش |
|---|---|---|
scanner.py |
۲۵ | Magic bytes، الگوهای مخرب، اعتبارسنجی EOF |
database.py |
۲۰ | CRUD کاربران، تنظیمات زبان، آمار، چرخش لاگ |
handlers.py |
۳۰ | پارس اندازه، اعتبارسنجی فرمت/حالت، فرار MD |
config.py |
۱۱ | پارس env، presetها، حالات مکالمه |
locales.py |
۸ | ترجمه، قالببندی، پوشش کلیدها |
integration |
۱۰ | جریانهای بین ماژولی، محدودیت نرخ، چرخش لاگ |
e2e |
۲۰ | جریانهای handler با API تلگرام Mock شده |
| مجموع | ۱۲۴ |
# نصب Locust
pip install locust
# اجرای تست بار
locust -f locustfile.py --host=http://localhost:9090- Python 3.12+
- FFmpeg
- SQLite (included) یا PostgreSQL
git clone https://github.com/Hoot-Code/ReFrame.git
cd ReFrame
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env
# فایل .env را با BOT_TOKEN و ADMIN_IDS خود ویرایش کنید
python main.py
# در ترمینال دیگر
pytest -v- سبک کد: PEP 8، بدون توضیحات مگر برای منطق غیر واضح
- مدیریت خطا: شکست ایمن، ثبت خطا، هرگز ربات را متوقف نکنید
- امنیت: اعتبارسنجی تمام ورودیهای کاربر، اسکن تمام فایلهای آپلود شده
- تست: اضافه کردن تست برای ویژگیهای جدید، حفظ پوشش >۹۰٪
- بررسی کنید
BOT_TOKENدر.envتنظیم شده باشد - FFmpeg نصب و در PATH در دسترس باشد
- Python 3.12+ استفاده شود
- اسکنر یک ابزار غربالگری سبک است
- برخی فایلهای موجه ممکن است به دلیل الگوهای بایتی غیر معمول رد شوند
- جزئیات در پنل مدیریت بخش
security_logsموجود است
- پردازش ویدئو به FFmpeg و پیچیدگی فایل بستگی دارد
- فایلهای بزرگ یا رزولوشنهای بالاتر زمان بیشتری نیاز دارند
MAX_CONCURRENT_JOBSرا برای افزایش موازیسازی تنظیم کنید
- SQLite: مطمئن شوید مجوز نوشتن در دایرکتوری کاری دارید
- PostgreSQL:
DATABASE_URLو اجرای سرور را بررسی کنید - فضای دیسک را بررسی کنید
- حد پیشفرض: ۵ فایل در دقیقه به ازای هر کاربر
- غیرفعال کردن:
FF_RATE_LIMITING=falseدر.env - یا ۶۰ ثانیه قبل از ارسال فایل بعدی صبر کنید
MIT © Hoot-Code