{"id":47676647,"url":"https://github.com/sartoopjj/thefeed","last_synced_at":"2026-04-30T23:00:30.508Z","repository":{"id":346747901,"uuid":"1191410002","full_name":"sartoopjj/thefeed","owner":"sartoopjj","description":"DNS-based feed reader for Telegram channels and public X accounts. Designed for environments where only DNS queries work.","archived":false,"fork":false,"pushed_at":"2026-04-25T10:02:10.000Z","size":739,"stargazers_count":171,"open_issues_count":10,"forks_count":21,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-25T12:26:23.519Z","etag":null,"topics":["dns","iran","network","telegram","twitter"],"latest_commit_sha":null,"homepage":"https://t.me/networkti","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sartoopjj.png","metadata":{"files":{"readme":"README-FA.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-25T08:05:16.000Z","updated_at":"2026-04-25T11:28:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sartoopjj/thefeed","commit_stats":null,"previous_names":["sartoopjj/thefeed"],"tags_count":78,"template":false,"template_full_name":null,"purl":"pkg:github/sartoopjj/thefeed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sartoopjj%2Fthefeed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sartoopjj%2Fthefeed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sartoopjj%2Fthefeed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sartoopjj%2Fthefeed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sartoopjj","download_url":"https://codeload.github.com/sartoopjj/thefeed/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sartoopjj%2Fthefeed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32479448,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns","iran","network","telegram","twitter"],"created_at":"2026-04-02T13:32:58.922Z","updated_at":"2026-04-30T23:00:30.476Z","avatar_url":"https://github.com/sartoopjj.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv dir=\"rtl\" align=\"right\"\u003e\n\n# 🌍 thefeed\n\n**خواندن کانال‌های تلگرام و حساب‌های عمومی X از طریق DNS — برای اینترنت سانسورشده**\n\n[English](README.md) | فارسی\n\n---\n\n## thefeed چیست؟\n\nthefeed یک سیستم تونل DNS است که به شما اجازه می‌دهد پیام‌های کانال‌های تلگرام را حتی وقتی تلگرام و اینترنت فیلتر شده، بخوانید. تنها چیزی که نیاز دارید **DNS** است — که تقریباً هیچ‌وقت مسدود نمی‌شود.\n\n\u003cdiv dir=\"ltr\" align=\"left\"\u003e\n\n```\n                                  Encrypted DNS TXT\n   ┌──────────────┐  feed meta + small media   ┌──────────────────┐    MTProto      ┌──────────┐\n   │              │ ─────────────────────────▸ │      Server      │ ─────────────▸  │ Telegram │\n   │    Client    │ ◂───────────────────────── │  (DNS auth +     │ ◂─────────────  │   API    │\n   │  (Web UI)    │                            │   media relays)  │    RSS / HTTP   ┌──────────┐\n   │              │  large media (fast relay)  │                  │ ─────────────▸  │  Nitter  │\n   │              │ ◂───── api.github.com ◂──  │                  │ ◂─────────────  │ (X feed) │\n   └──────────────┘     (uploaded by server)   └──────────────────┘                 └──────────┘\n```\n\n\u003c/div\u003e\n\n## ✨ ویژگی‌ها\n\n### سمت سرور (خارج از ایران)\n- اتصال به تلگرام و خواندن پیام‌ کانال‌ها\n- دریافت پست‌های عمومی X از حساب‌های تنظیم‌شده (بدون لاگین)\n- سرو متادیتا و فایل‌های کوچک به صورت پاسخ DNS TXT رمزنگاری‌شده\n- **رله‌های مدیا** — یک فایل، چند مسیر تحویل:\n  - **رله DNS** (کند، مقاوم به سانسور) فایل را به بلاک‌های DNS تقسیم می‌کند\n  - **رله گیتهاب** (سریع، پیش‌فرض خاموش) بایت‌ها را روی یک ریپازیتوری گیتهاب می‌گذارد و کلاینت با HTTPS ساده می‌گیرد؛ مناسب فایل‌های بزرگ‌تر از سقف DNS\n  - رله‌های آینده در کنار همین‌ها اضافه می‌شوند بدون اینکه کلاینت‌های قدیمی را خراب کنند\n- padding تصادفی برای جلوگیری از شناسایی DPI\n- ذخیره‌سازی session — یک‌بار لاگین، همیشه اجرا\n- پشتیبانی از حالت بدون تلگرام (`--no-telegram`) — خواندن کانال‌های عمومی بدون نیاز به ورود به تلگرام\n\n### سمت کلاینت (داخل ایران)\n- رابط کاربری وب با پشتیبانی RTL/فارسی (فونت وزیرمتن)\n- ارسال پیام به کانال‌ها و چت‌های خصوصی (نیاز به `--allow-manage` سمت سرور و ورود به تلگرام)\n- مدیریت کانال‌ها از راه دور ( افزودن/حذف کانال‌ها از طریق دستورات ادمین وقتی `--allow-manage` فعال است)\n- **دانلود مدیا با رله‌ها** — اگر فایل روی رله سریع (گیتهاب) موجود باشد، اول از همان مسیر تلاش می‌کند، در صورت خطا چند بار retry می‌کند و قبل از سوییچ به رله DNS از کاربر می‌پرسد. هش و سایز هر فایل دانلود‌شده حتماً اعتبارسنجی می‌شود\n- **به‌روزرسانی خودکار هر کانال**: کانال‌های دلخواه را پین کنید تا در پس‌زمینه به‌طور دوره‌ای رفرش شوند (به ازای هر پروفایل ذخیره می‌شود)\n- فشرده‌سازی پیام‌ها (deflate)\n- محافظت رابط وب با رمز عبور (`--password` سمت کلاینت)\n- لاگ زنده درخواست‌های DNS در مرورگر\n- **جستجوی پیام‌ها**: جستجو در پیام‌های کانال فعلی با هایلایت نتایج و ناوبری قبلی/بعدی\n- **خروجی پیام‌ها**: کپی N پیام آخر یک کانال به کلیپبورد\n- **بانک ریزالور**: مدیریت مشترک ریزالورها برای تمام پروفایل‌ها — بدون نیاز به تنظیم ریزالور جداگانه برای هر پروفایل. ریزالورها از طریق اسکنر، ایمپورت، یا ورود دستی اضافه می‌شوند و به صورت خودکار امتیازدهی می‌شوند\n- **پاکسازی ریزالور**: حذف ریزالورهای ضعیف از بانک بر اساس حداقل امتیاز دلخواه\n- **نمایش ریزالورهای فعال**: مشاهده لیست ریزالورهای سالم و فعال از تنظیمات\n- **تصویر پس‌زمینه**: تنظیم URL تصویر پس‌زمینه برای پنل پیام‌ها (ذخیره محلی)\n- **تایم‌اوت DNS**: تنظیم تایم‌اوت کوئری DNS برای هر پروفایل (پیش‌فرض ۱۵ ثانیه)\n- **اسکنر ریزالور**: اسکن بازه‌های IP و CIDR برای پیدا کردن سرورهای DNS کارآمد\n\n### اسکنر ریزالور\n\nرابط وب شامل یک اسکنر ریزالور داخلی است (آیکون 🔍 در نوار کناری) که بازه‌های IP را بررسی می‌کند تا سرورهای DNS قابل دسترسی به سرور thefeed شما را پیدا کند:\n\n- **اهداف متنوع**: آی‌پی‌های تکی، CIDR (مثل `5.1.0.0/16`)، یا نام دامنه — هر خط یکی\n- **بارگذاری CIDR ایران**: دکمه یک‌کلیکی برای بارگذاری لیست بازه‌های ISP ایران\n- **پاک کردن اهداف**: دکمه برای پاک کردن سریع لیست CIDR/IP اسکنر\n- **انتخاب پروفایل**: انتخاب کنید کدام پروفایل برای تست استفاده شود\n- **قابل تنظیم**: همزمانی (پیش‌فرض ۵۰)، تایم‌اوت (پیش‌فرض ۱۵ ثانیه)، حداکثر آی‌پی\n- **گسترش /24**: وقتی ریزالور کارآمد پیدا شد، آی‌پی‌های نزدیک در همان /24 هم بررسی می‌شوند\n- **مکث / ادامه / توقف**: کنترل کامل روی اسکن‌های طولانی (مکث واقعاً ارسال درخواست‌های جدید را متوقف می‌کند)\n- **زمان پاسخ**: نتایج بر اساس تأخیر مرتب شده‌اند تا سریع‌ترین‌ها اول نمایش داده شوند\n- **انتخاب نتایج**: چک‌باکس برای انتخاب ریزالورهای مورد نظر\n- **اعمال نتایج**: افزودن یا جایگزینی بانک ریزالور مستقیم از اسکنر\n- **کپی**: دکمه کپی برای هر آی‌پی، کپی انتخاب‌شده‌ها، یا کپی همه\n- **اسکن جدید**: بازنشانی رابط کاربری برای شروع اسکن جدید پس از اتمام\n- **لاگ دیباگ**: در حالت دیباگ، کوئری‌ها و پاسخ‌های هر probe ثبت می‌شوند\n\n### ضد DPI\n- **اندازه متغیر پاسخ**: Padding تصادفی (۰-۳۲ بایت)\n- **کوئری تک‌برچسب**: رمزنگاری Base32 در یک برچسب DNS\n- **شافل Resolver**: توزیع تصادفی کوئری‌ها بین resolverها\n- **بانک ریزالور**: مخزن مشترک ریزالورها با امتیازدهی دائمی و ابزار پاکسازی\n- **محدودیت نرخ**: قابل تنظیم برای ترکیب با ترافیک عادی DNS\n- **Padding تصادفی کوئری**: ۴ بایت تصادفی در هر درخواست\n- **اندازه بلاک متغیر**: بلاک‌های ۴۰۰-۷۰۰ بایت\n\n## 🔐 رمزنگاری و احراز هویت\n\n### مدل دو بخشی\n\n**بخش ۱ — رمز عبور رمزنگاری (`--key`):** روی سرور و کلاینت هر دو لازم است. هر کسی با این رمز می‌تواند همه پیام‌ها (از جمله کانال‌های خصوصی) را بخواند. می‌توانید آن را با دوستان مورد اعتماد به اشتراک بگذارید.\n\n**بخش ۲ — مدیریت از راه دور (`--allow-manage` سمت سرور):** وقتی فعال باشد، هر کسی با کلید رمزنگاری می‌تواند پیام ارسال کند و کانال‌ها را مدیریت کند. به صورت پیش‌فرض غیرفعال است.\n\n**رمز عبور وب کلاینت (`--password`):** تمام صفحات رابط وب را با HTTP Basic Auth محافظت می‌کند. این فقط محافظت محلی است.\n\n### ویژگی‌های امنیتی\n\n- **AES-256-GCM** برای تمام پاسخ‌ها و پیام‌های ارسالی\n- کلیدهای مجزا از طریق HKDF برای کوئری و پاسخ\n- Padding تصادفی در هر دو جهت\n- بدون state — هر درخواست مستقل است\n- بررسی رمز عبور ادمین سمت سرور با مقایسه زمان‌ثابت\n- فایل session با مجوز ۰۶۰۰\n\n\u003e ⚠️ هرگز رمز عبور رمزنگاری (passphrase) خود را عمومی به اشتراک نگذارید — هر کسی با آن می‌تواند کلاینت خودش را اجرا و تمام پیام‌های شما را بخواند. `--password` سمت کلاینت فقط رابط وب روی دستگاه خودتان را محافظت می‌کند.\n\n## دانلود\n\n[رلیز ها](https://github.com/sartoopjj/thefeed/releases)\n\n## حمایت مالی\n\nبرای حمایت از من می‌تونید مبلغ دلخواه‌تون رو به صورت USDT یا USDC روی شبکه‌های زیر ارسال کنید:\n\n-  Polygon\n-  BNB Chain\n\nآدرس ولت من:\n`0xe73f022f668c57cce79feccd875ac7332311013a`\n\nممنون از حمایت‌تون ❤️\n\n# لینک ها\n- کانال تلگرام من: [@networkti](https://t.me/networkti)\n- کانال کانفیگ عمومی دفید: [@thefeedconfig](https://t.me/thefeedconfig)\n- راهنمای نصب سرور دفید: [@networkti](https://t.me/networkti/25)\n- راهنمای نصب سرور دفید با اسلیپ گیت: [@networkti](https://t.me/networkti/200)\n\n## ⚡ نصب سریع سرور\n\n```bash\nsudo bash -c \"$(curl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh)\"\n```\n\nاسکریپت:\n1. آخرین باینری را از GitHub دانلود می‌کند\n2. دامنه، رمز عبور، کانال‌های تلگرام و حساب‌های X را می‌پرسد\n3. به تلگرام لاگین می‌کند (یک‌بار)\n4. سرویس systemd را راه‌اندازی می‌کند\n\n```bash\n# بروزرسانی\nsudo bash install.sh\n\n# لاگین مجدد تلگرام\nsudo bash install.sh --login\n\n# حذف\nsudo bash install.sh --uninstall\n```\n\n\n\u003e **توجه:** سرور باید روی پورت ۵۳ پاسخ بدهد. بهتر است روی پورت غیرمحدود (`:5300`) اجرا و با iptables فوروارد کنید:\n\u003e\n\u003e نام اینترفیس شبکه خود را با `ip a` پیدا کنید و `eth0` را جایگزین کنید:\n\u003e ```bash\n\u003e sudo iptables -I INPUT -p udp --dport 5300 -j ACCEPT\n\u003e sudo iptables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300\n\u003e sudo ip6tables -I INPUT -p udp --dport 5300 -j ACCEPT\n\u003e sudo ip6tables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300\n\u003e ```\n\u003e\n\u003e برای ماندگار کردن این قوانین بعد از ریبوت:\n\u003e ```bash\n\u003e sudo apt install iptables-persistent   # Debian/Ubuntu\n\u003e sudo netfilter-persistent save\n\u003e ```\n\n\n**اگر مشکلی پیش آمد — حذف فوری redirect:**\n\n```bash\n# حذف قانون iptables (بازگشت به حالت اولیه)\nsudo iptables -t nat -D PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300\nsudo iptables -D INPUT -p udp --dport 5300 -j ACCEPT\nsudo netfilter-persistent save\n```\n\n\n## 🐳 نصب با Docker (سرور)\n\nاجرای سرور با Docker — بدون نیاز به نصب Go.\n\n### شروع سریع (کانال‌های عمومی، بدون لاگین تلگرام)\n\n```bash\n# ۱. تنظیم محیط\ncp .env.example .env\nnano .env   # مقادیر THEFEED_DOMAIN و THEFEED_KEY را وارد کنید\n\n# ۲. آماده‌سازی دایرکتوری داده\nmkdir -p data\ncp configs/channels.txt data/\ncp configs/x_accounts.txt data/   # اختیاری\n\n# ۳. ساخت و اجرا\ndocker compose up -d\n\n# ۴. هدایت ترافیک DNS خارجی به کانتینر\n#    نام اینترفیس شبکه خود را با ip a پیدا کنید و eth0 را جایگزین کنید\nsudo iptables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300\nsudo iptables -I INPUT -p udp --dport 5300 -j ACCEPT\nsudo ip6tables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300\nsudo ip6tables -I INPUT -p udp --dport 5300 -j ACCEPT\n\n# ماندگار کردن قوانین iptables بعد از ریبوت\nsudo apt install -y iptables-persistent\nsudo netfilter-persistent save\n\n# ۵. مشاهده لاگ‌ها\ndocker compose logs -f\n```\n\n\u003e **توجه:** کانتینر روی پورت 5300 listen می‌کند (نه 53) تا با `systemd-resolved` تداخل نداشته باشد.\n\u003e قانون `iptables PREROUTING` فقط ترافیک DNS **خارجی** (پورت 53) را به کانتینر هدایت می‌کند\n\u003e و DNS محلی سرور بدون مشکل کار می‌کند.\n\n### با تلگرام (لاگین یکباره)\n\n```bash\n# ۱. تنظیم محیط (متغیرهای تلگرام را در .env از حالت کامنت خارج کنید)\ncp .env.example .env\nnano .env\n\n# ۲. لاگین یکباره (تعاملی — کد تأیید را وارد کنید)\ndocker compose run -it --rm server \\\n  --login-only --data-dir /data \\\n  --domain YOUR_DOMAIN --key YOUR_KEY \\\n  --api-id YOUR_API_ID --api-hash YOUR_HASH \\\n  --phone YOUR_PHONE\n\n# ۳. در docker-compose.yml فلگ --no-telegram را حذف و فلگ‌های تلگرام را اضافه کنید\n# ۴. اجرای سرور\ndocker compose up -d\n# ۵. تنظیم iptables redirect (مشابه قدم ۴ در شروع سریع)\n```\n\n### جزئیات Docker\n\n| مورد | مقدار |\n|------|-------|\n| ایمیج پایه | `alpine:3.21` (حدود ۲۳ مگابایت) |\n| ساخت | دو مرحله‌ای (`golang:1.26-alpine` → `alpine`) |\n| کاربر | `thefeed` (UID 1000، غیر root) |\n| پورت کانتینر | `:5300/udp` (هاست `:5300/udp` + iptables redirect از `:53`) |\n| داده | ولوم `./data` (کانال‌ها، session، کش) |\n| تنظیمات | فایل `.env` (در git ذخیره نمی‌شود) |\n\n```bash\n# ساخت مجدد بعد از تغییرات کد\ndocker compose build\n\n# توقف\ndocker compose down\n```\n\n### ایمنی پورت ۵۳ و سرویس‌ها\n\nکانتینر روی پورت **5300** (نه 53) listen می‌کند تا با `systemd-resolved` یا سرویس‌های DNS دیگر سرور تداخل نداشته باشد. ترافیک DNS خارجی توسط `iptables PREROUTING` هدایت می‌شود که **فقط** بسته‌های ورودی از اینترفیس شبکه خارجی را تحت تأثیر قرار می‌دهد — DNS محلی سرور **دست‌نخورده** باقی می‌ماند.\n\n**قبل از راه‌اندازی — بررسی پورت ۵۳:**\n\n```bash\n# چه سرویسی از پورت 53 استفاده می‌کند؟\nss -ulnp | grep ':53 '\n\n# نتیجه مورد انتظار: فقط systemd-resolved روی 127.0.0.53 (بی‌خطر)\n# UNCONN  127.0.0.53%lo:53  users:((\"systemd-resolve\",...))\n```\n\n**بعد از راه‌اندازی — بررسی سلامت سرویس‌ها:**\n\n```bash\n# ۱. DNS محلی سرور هنوز کار می‌کند\ndig +short google.com @127.0.0.53\n\n# ۲. کانتینر thefeed در حال اجراست\ndocker ps --filter name=thefeed\n\n# ۳. کانال‌ها در حال دریافت هستند\ndocker logs thefeed-server --tail 5\n\n# ۴. قانون iptables فعال است\niptables -t nat -L PREROUTING -n | grep 5300\n\n# ۵. بقیه کانتینرها سالم هستند\ndocker ps --format 'table {{.Names}}\\t{{.Status}}' | head -10\n```\n\n**اگر مشکلی پیش آمد — حذف فوری redirect:**\n\n```bash\n# حذف قانون iptables (بازگشت به حالت اولیه)\nsudo iptables -t nat -D PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5300\nsudo iptables -D INPUT -p udp --dport 5300 -j ACCEPT\nsudo netfilter-persistent save\n```\n\n## 🖥️ نصب کلاینت\n\n### لینوکس / macOS / ویندوز\nاز صفحه [Releases](https://github.com/sartoopjj/thefeed/releases) باینری مناسب سیستم خود را دانلود کنید.\n\n```bash\n# اجرا (مرورگر خودکار باز می‌شود)\n./thefeed-client\n\n# با پورت و دایرکتوری سفارشی\n./thefeed-client --port 9090 --data-dir ./mydata\n\n# با رمز عبور ادمین\n./thefeed-client --password \"your-password\"\n```\n\n### اندروید (Termux)\n\n```bash\n# نصب Termux از F-Droid\npkg update \u0026\u0026 pkg install curl\n\n# دانلود باینری اندروید\ncurl -Lo thefeed-client https://github.com/sartoopjj/thefeed/releases/latest/download/thefeed-client-android-arm64\nchmod +x thefeed-client\n\n# اجرا\n./thefeed-client\n# مرورگر را باز کنید: http://127.0.0.1:8080\n```\n\n## ⚙️ تنظیمات DNS\n\nشما به **دو رکورد DNS** نیاز دارید. فرض کنید IP سرور شما `203.0.113.10` است:\n\n| نوع | نام | مقدار |\n|-----|-----|-------|\n| A | `ns.example.com` | `203.0.113.10` |\n| NS | `t.example.com` | `ns.example.com` |\n\n\n## 🛠️ ساخت از سورس\n\n```bash\n# پیش‌نیازها: Go 1.26+\nmake build          # ساخت سرور و کلاینت\nmake build-all      # کراس‌کامپایل تمام پلتفرم‌ها\nmake test           # اجرای تست‌ها\nmake upx            # فشرده‌سازی باینری‌ها با UPX\n```\n\n## 🎞️ رله‌های مدیا\n\nهر رله مستقل است — یک فایل می‌تواند هم‌زمان روی DNS و گیتهاب (و رله‌های آینده) قابل دسترسی باشد. کلاینت بر اساس فلگ‌هایی که در پیام دیده، سریع‌ترین مسیر در دسترس را انتخاب می‌کند، در صورت خطا چند بار retry می‌کند و قبل از فال‌بک به مسیر کندتر از کاربر می‌پرسد. هش و سایز هر دانلود اعتبارسنجی می‌شود.\n\nدو رله الان موجود هست:\n\n- **رله DNS** (کند، پیش‌فرض روشن). بایت‌ها به بلاک‌های DNS تقسیم می‌شوند. در شبکه‌های فیلترشده کار می‌کند. سقف پیش‌فرض: ۱۰۰ کیلوبایت.\n- **رله گیتهاب** (سریع، پیش‌فرض خاموش). فایل‌ها در یک ریپازیتوری آپلود می‌شوند و کلاینت‌ها از طریق `api.github.com` (که در خیلی از کشورها برخلاف `raw.githubusercontent.com` در دسترس است) با HTTPS می‌گیرند. به یک Personal Access Token با اسکوپ `contents:write` نیاز دارد. مسیر فایل‌ها `\u003crepo\u003e/\u003csanitised-domain\u003e/\u003csize\u003e_\u003ccrc32\u003e` است تا چند سرور بتوانند یک ریپازیتوری مشترک داشته باشند. سقف پیش‌فرض: ۱۵ مگابایت.\n\nپرچم‌ها / متغیرهای محیطی:\n\n\u003cdiv dir=\"ltr\" align=\"left\"\u003e\n\n| Flag                       | Env                                  | Default      | توضیح                              |\n|----------------------------|--------------------------------------|--------------|------------------------------------|\n| `--dns-media-enabled`      | `THEFEED_DNS_MEDIA_ENABLED`          | `false`      | فعال/غیرفعال کردن رله DNS         |\n| `--dns-media-max-size`     | `THEFEED_DNS_MEDIA_MAX_SIZE_KB`      | `100` (KB)   | سقف هر فایل                        |\n| `--dns-media-cache-ttl`    | `THEFEED_DNS_MEDIA_CACHE_TTL_MIN`    | `600` (min)  | TTL                                 |\n| `--dns-media-compression`  | `THEFEED_DNS_MEDIA_COMPRESSION`      | `gzip`       | `none` / `gzip` / `deflate`         |\n| `--github-relay-enabled`   | `THEFEED_GITHUB_RELAY_ENABLED`       | `false`      | فعال‌سازی رله گیتهاب               |\n| `--github-relay-token`     | `THEFEED_GITHUB_RELAY_TOKEN`         | —            | PAT با دسترسی `contents:write`      |\n| `--github-relay-repo`      | `THEFEED_GITHUB_RELAY_REPO`          | —            | `owner/repo`                        |\n| `--github-relay-branch`    | `THEFEED_GITHUB_RELAY_BRANCH`        | `main`       | برنچ کامیت                          |\n| `--github-relay-max-size`  | `THEFEED_GITHUB_RELAY_MAX_SIZE_KB`   | `15360` (KB) | سقف هر فایل                        |\n| `--github-relay-ttl`       | `THEFEED_GITHUB_RELAY_TTL_MIN`       | `600` (min)  | فایل‌های یتیم در سیکل بعدی پاک می‌شوند |\n\n\u003c/div\u003e\n\n## 📋 پرچم‌های سرور\n\n| پرچم | پیش‌فرض | توضیح |\n|-------|---------|-------|\n| `--data-dir` | `./data` | دایرکتوری داده‌ها |\n| `--domain` | | دامنه DNS (الزامی) |\n| `--key` | | رمز عبور رمزنگاری (الزامی) |\n| `--channels` | `{data-dir}/channels.txt` | فایل کانال‌ها |\n| `--x-accounts` | `{data-dir}/x_accounts.txt` | فایل حساب‌های X |\n| `--x-rss-instances` | `http://nitter.net,https://nitter.net` | لیست URL پایه برای RSS حساب‌های X |\n| `--api-id` | | شناسه API تلگرام |\n| `--api-hash` | | هش API تلگرام |\n| `--phone` | | شماره تلفن تلگرام |\n| `--listen` | `:53` | آدرس شنود DNS |\n| `--login-only` | `false` | فقط لاگین به تلگرام |\n| `--no-telegram` | `false` | اجرا بدون ورود به تلگرام (فقط کانال‌های عمومی) |\n| `--padding` | `32` | حداکثر padding تصادفی |\n| `--msg-limit` | `15` | حداکثر تعداد پیام‌ها برای هر کانال تلگرام |\n| `--fetch-interval` | `10` | فاصله چرخه فتچ بر حسب دقیقه (حداقل ۳) |\n| `--allow-manage` | `false` | فعال‌سازی مدیریت از راه دور (ارسال پیام و مدیریت کانال‌ها) |\n| `--debug` | `false` | لاگ کردن هر کوئری DNS رمزگشایی‌شده |\n| `--dns-media-enabled` | `false` | سرو مدیا از طریق DNS (مسیر کند) |\n| `--dns-media-max-size` | `100` | سقف هر فایل برای رله DNS بر حسب KB |\n| `--dns-media-cache-ttl` | `600` | TTL رله DNS بر حسب دقیقه |\n| `--dns-media-compression` | `gzip` | فشرده‌سازی رله DNS: `none` / `gzip` / `deflate` |\n| `--github-relay-enabled` | `false` | سرو مدیا از طریق گیتهاب (مسیر سریع) |\n| `--github-relay-token` | | توکن گیتهاب (`contents:write`) |\n| `--github-relay-repo` | | `owner/repo` ریپازیتوری رله |\n| `--github-relay-branch` | `main` | برنچی که رله روش کامیت می‌کند |\n| `--github-relay-max-size` | `15360` | سقف هر فایل برای رله گیتهاب بر حسب KB |\n| `--github-relay-ttl` | `600` | TTL رله گیتهاب بر حسب دقیقه |\n\n## 📋 پرچم‌های کلاینت\n\n| پرچم | پیش‌فرض | توضیح |\n|-------|---------|-------|\n| `--data-dir` | `./thefeeddata` | دایرکتوری داده‌ها |\n| `--port` | `8080` | پورت رابط وب |\n| `--password` | | رمز عبور ادمین (خالی = بدون احراز هویت) |\n\n## 📂 فرمت channels.txt\n\n```\n# خطوط با # کامنت هستند\n@VahidOnline\n@SomeChannel\n```\n\n## 📂 فرمت x_accounts.txt\n\n```\n# خطوط با # کامنت هستند\nVahid\n```\n\n## 🔒 نکات امنیتی دریافت X\n\n- دریافت پست‌های X فقط از RSS/XML انجام می‌شود.\n- آدرس instanceها اعتبارسنجی می‌شوند (`http`/`https`، فقط host، بدون path/query/fragment).\n- اندازه پاسخ محدود است و timeout اعمال می‌شود.\n- اگر یک mirror خطای `403` بدهد یا در دسترس نباشد، سرور خودکار instance بعدی را امتحان می‌کند.\n- پیشنهاد: لیست mirrorهای قابل اعتماد خودتان را با `--x-rss-instances` (یا `THEFEED_X_RSS_INSTANCES`) تنظیم کنید.\n\n## 🤝 مشارکت\n\nمشارکت شما خوش‌آمد است! Issue بزنید یا Pull Request بفرستید.\n\n## 📄 لایسنس\n\nMIT\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**برای ایران آزاد** \u003cimg src=\"internal/web/static/iran-lion-sun.svg\" alt=\"شیر و خورشید\" height=\"20\"\u003e\n\n*هر ایرانی حق دسترسی آزاد به اطلاعات را دارد*\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsartoopjj%2Fthefeed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsartoopjj%2Fthefeed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsartoopjj%2Fthefeed/lists"}