{"id":47676647,"url":"https://github.com/sartoopjj/thefeed","last_synced_at":"2026-06-28T12:00:44.720Z","repository":{"id":346747901,"uuid":"1191410002","full_name":"sartoopjj/thefeed","owner":"sartoopjj","description":"DNS-based feed reader and lite messenger for environments where only DNS queries work. Read Telegram channels and public X accounts, and exchange end-to-end-encrypted messages with other users — all over DNS.","archived":false,"fork":false,"pushed_at":"2026-06-27T12:50:54.000Z","size":2921,"stargazers_count":1363,"open_issues_count":87,"forks_count":82,"subscribers_count":13,"default_branch":"main","last_synced_at":"2026-06-27T14:21:27.426Z","etag":null,"topics":["dns","iran","network","telegram","thefeed","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-06-27T12:50:54.000Z","dependencies_parsed_at":"2026-04-30T23:00:50.097Z","dependency_job_id":null,"html_url":"https://github.com/sartoopjj/thefeed","commit_stats":null,"previous_names":["sartoopjj/thefeed"],"tags_count":256,"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":34887328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","thefeed","twitter"],"created_at":"2026-04-02T13:32:58.922Z","updated_at":"2026-06-28T12:00:44.711Z","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) | فارسی | [简体中文](README-ZH.md) | [Русский](README-RU.md)\n\n---\n\n## دانلود\n\n- **آخرین انتشار** — باینری سرور و کلاینت برای همه پلتفرم‌ها به علاوهٔ APK اندروید. از هر کدوم از این دو لینک که در دسترس بود استفاده کنید: [GitLab](https://gitlab.com/sartoopjj/thefeed/-/releases) / [GitHub](https://github.com/sartoopjj/thefeed/releases/latest).\n- **نصب سرور با یک خط** (لینوکس + systemd) — هر کدوم از این دوتا که در دسترس باشه استفاده کنید:\n\u003cdiv dir=\"ltr\" align=\"left\"\u003e\n\n```bash\n# از GitHub\nsudo bash -c \"$(curl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh)\"\n\n# از GitLab (در صورتی که اکانت GitHub موقتاً در دسترس نباشه)\nsudo bash -c \"$(curl -Ls https://gitlab.com/sartoopjj/thefeed/-/raw/main/scripts/install.sh)\" -- --gitlab\n```\n\n\u003c/div\u003e\n\n- **APK اندروید**: گوشی‌های جدیدتر از حدود ۱۳۹۶ نسخه `arm64-v8a` و دستگاه‌های قدیمی ۳۲ بیتی نسخه `armeabi-v7a` را نصب کنند.\n- **ویندوز** (۱۰/۱۱): فایل `.exe` **امضای دیجیتال ندارد**، برای همین در اولین اجرا SmartScreen پیام «Windows protected your PC» نشان می‌دهد و ممکن است Defender آن را قرنطینه کند — این یک هشدار اشتباه (false positive) رایج برای ابزارهای تونل DNS است، **نه بدافزار**. روی **More info → Run anyway** بزنید؛ اگر حذف شد از مسیر Defender → *Protection history* برش گردانید و در صورت تردید هش SHA-256 را از صفحهٔ انتشار بررسی کنید. (امضای دیجیتال برای رفع این هشدار در برنامهٔ کار است.)\n\nکانفیگ‌های عمومی برای تست: [@thefeedconfig](https://t.me/thefeedconfig).\n\n---\n\n## تصاویر\n\n\u003ctable align=\"center\"\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/mainfeed.jpg\" width=\"170\" alt=\"فید اصلی\"\u003e\u003cbr\u003e\u003csub\u003eفید اصلی\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/chat.jpg\" width=\"170\" alt=\"پیام‌رسان\"\u003e\u003cbr\u003e\u003csub\u003eپیام‌رسان\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/feed-post.jpg\" width=\"170\" alt=\"خواندن پست\"\u003e\u003cbr\u003e\u003csub\u003eخواندن پست\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/telemirror.jpg\" width=\"170\" alt=\"تله‌میرور\"\u003e\u003cbr\u003e\u003csub\u003eتله‌میرور\u003c/sub\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/scanner.jpg\" width=\"170\" alt=\"اسکنر ریزالور\"\u003e\u003cbr\u003e\u003csub\u003eاسکنر ریزالور\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/resolver-bank.jpg\" width=\"170\" alt=\"بانک ریزالور\"\u003e\u003cbr\u003e\u003csub\u003eبانک ریزالور\u003c/sub\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/settings.jpg\" width=\"170\" alt=\"تنظیمات\"\u003e\u003cbr\u003e\u003csub\u003eتنظیمات\u003c/sub\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\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- **چند دامنه‌ای** (`--extra-domains` / `THEFEED_EXTRA_DOMAINS`): سرور علاوه بر دامنه اصلی روی چند ساب‌دامنه هم به کوئری‌های فید پاسخ می‌دهد و کلاینت‌ها درخواست‌ها را بین همه آن‌ها پخش می‌کنند (توزیع بار و مقاومت در برابر فیلتر شدن یک دامنه). دامنه اصلی برای مسیرهای رله ثابت می‌ماند. ساب‌دامنه‌ها در فیلد `d=` پیوند ایمپورت قرار می‌گیرند.\n- **پیام‌رسان** (`--chat-domains` / `THEFEED_CHAT_DOMAINS`): پیام‌رسان اختیاریِ ذخیره-و-ارسال بین کاربران همان سرور، روی ساب‌دامنه(های) اختصاصی — بخش «پیام‌رسان» را ببینید.\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- **نمایش ریزالورهای فعال**: مشاهده لیست ریزالورهای سالم و فعال از تنظیمات\n- **تصویر پس‌زمینه**: تنظیم URL تصویر پس‌زمینه برای پنل پیام‌ها (ذخیره محلی)\n- **تایم‌اوت DNS**: تنظیم تایم‌اوت کوئری DNS برای هر پروفایل (پیش‌فرض ۱۵ ثانیه)\n- **اسکنر ریزالور**: اسکن بازه‌های IP و CIDR برای پیدا کردن سرورهای DNS کارآمد\n\n### رابط وب\n\nیک پوسته‌ی یکپارچه به سبک تلگرام با یک **نوار ناوبری پایین** که بین پنج بخش کامل جابه‌جا می‌شود (دیگر خبری از پنجره‌های مودال نیست):\n\n- **فید** — فید کانال‌ها/X: لیست کانال‌ها به تفکیک نوع (عمومی/X/خصوصی) با نشان، پیام‌ها با رندر بومی RTL/فارسی (فونت وزیرمتن)، نوار نوشتن دایره‌ای شناور (ارسال به کانال‌ها/چت خصوصی وقتی تلگرام وصل است)، نشان پیام جدید هر کانال، شمارش معکوس تا واکشی بعدی، هایلایت تگ مدیا (`[IMAGE]`، `[VIDEO]`…)، جستجوی داخل کانال، خروجی به کلیپ‌بورد، شیت لینک با یک ضربه، و لاگ زنده DNS. **پیام‌های ذخیره‌شده** (یادداشت + نشانک رمزنگاری‌شده‌ی محلی) هم همین‌جاست.\n- **میرور** (تل‌میرور) — آینه‌ی فقط‌خواندنی کانال‌ها به سبک وب تلگرام؛ برای عکس/آلبوم نسبت ابعاد دقیق هر تصویر از قبل رزرو می‌شود تا هنگام بارگذاری اسکرول نپرد.\n- **چت** — [پیام‌رسان](#messenger) سرتاسر رمزنگاری‌شده: لیست گفتگوها، تیک تحویل (✓/✓✓)، پیشرفت ارسال/دریافت، حلقه‌ی سهمیه‌ی ارسال برای هر گفتگو، تأیید با ایموجی امنیتی، و دفترچه‌ی مخاطبین فقط‌محلی.\n- **ریزالور** — مرکز یکپارچه‌ی ریزالورهای DNS: **بانک** مشترک، **لیست‌های** نام‌گذاری‌شده‌ی شما (فعال‌سازی/تغییرنام/حذف/خالی‌کردن)، و **اسکنر** برای پیدا کردن ریزالورهای تازه — همه در یک بخش (پایین‌تر را ببینید).\n- **تنظیمات** — هر ترجیح یک صفحه‌ی جداگانه: **نمایش** (پوسته، اندازه فونت، زبان، تصویر پس‌زمینه)، **اتصال** (حالت کوئری، ریت‌لیمیت، scatter، تایم‌اوت، رمز برنامه، عکس پروفایل، دیباگ)، **حافظه** (سقف کش دیسک)، **پشتیبان‌گیری** (خروجی/ورودی رمزنگاری‌شده)، **درباره**، و **کانفیگ‌ها** (لیست ایمپورت/مدیریت همراه کانفیگ‌های آماده). همه‌ی فیلدها خودکار ذخیره می‌شوند.\n\nپوسته به‌صورت پیش‌فرض از **دستگاه** پیروی می‌کند (سیستم)، و گزینه‌های صریح **تیره** / **روشن** هم هست. هر کانفیگ کش یک‌ساعته‌ی مرورگر مخصوص خودش را دارد تا داده‌ها فوری دیده شوند؛ همزمانی **scatter**، تایم‌اوت 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- لیست تسک‌ها و رودمپ پروژه: [بورد گیتهاب](https://github.com/users/sartoopjj/projects/1/views/1)\n\n## ⚡ نصب سریع سرور\n\nاسکریپت نصب می‌تونه باینری رو از GitHub یا GitLab دانلود کنه.\nبدون پارامتر اول GitHub رو امتحان می‌کنه و اگه در دسترس نبود می‌ره سراغ GitLab.\nبرای انتخاب دستی از `--github` یا `--gitlab` استفاده کنید.\n\n```bash\n# از GitHub\nsudo bash -c \"$(curl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh)\"\n\n# از GitLab\nsudo bash -c \"$(curl -Ls https://gitlab.com/sartoopjj/thefeed/-/raw/main/scripts/install.sh)\" -- --gitlab\n```\n\nاسکریپت:\n1. آخرین باینری را از مخزن انتخاب‌شده (GitHub یا GitLab) دانلود می‌کند\n2. دامنه، رمز عبور، کانال‌های تلگرام و حساب‌های X را می‌پرسد\n3. به تلگرام لاگین می‌کند (یک‌بار)\n4. سرویس systemd را راه‌اندازی می‌کند\n\n```bash\n# بروزرسانی\ncurl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh | sudo bash\n\n# لاگین مجدد تلگرام\ncurl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh | sudo bash -s -- --login\n\n# نمایش کانفیگ فعلی (پیوند ایمپورت: دامنه، رمز، کلید عمومی سرور sk=، و ریزالورها)\ncurl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh | sudo bash -s -- --config\n\n# حذف\ncurl -Ls https://raw.githubusercontent.com/sartoopjj/thefeed/main/scripts/install.sh | sudo bash -s -- --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### مک (فایل `.dmg` نصب با کشیدن)\n\nاز صفحه [Releases](https://github.com/sartoopjj/thefeed/releases) فایل `thefeed-macos-\u003cversion\u003e.dmg` را دانلود کنید. این یک فایل یونیورسال است (هم اینتل و هم Apple Silicon) و شامل `Thefeed.app` می‌شود. آن را داخل پوشه‌ی Applications بکشید، روی آیکن کلیک کنید — مرورگر شما به‌صورت خودکار باز می‌شود و وب‌یوآی ظاهر می‌شود. داده‌ها زیر `~/Library/Application Support/Thefeed` ذخیره می‌شوند.\n\nوقتی برنامه در حال اجراست، یک آیتم به اسم **Thefeed** در نوار منوی بالای صفحه (سمت راست) ظاهر می‌شود — از آنجا می‌توانید **Open Thefeed** برای باز کردن مجدد مرورگر یا **Quit Thefeed** برای خاموش کردن کامل سرور را انتخاب کنید. لاگ سرور در فایل `~/Library/Application Support/Thefeed/launcher.log` ذخیره می‌شود.\n\nچون فایل امضاء (sign) نشده، در اولین اجرا macOS مانع می‌شود. یکی از دو راه:\n\n```bash\n# الف) در Finder روی Thefeed.app راست‌کلیک کرده و Open را بزنید (یک‌بار)\n# ب) از ترمینال:\nxattr -dr com.apple.quarantine /Applications/Thefeed.app\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### اندروید (نسخه APK)\n\nاز صفحه‌ی [Releases](https://github.com/sartoopjj/thefeed/releases) فایل APK مناسب گوشی خود را دانلود کنید (نیازمند اندروید ۷ یا بالاتر):\n\n- `thefeed-android-\u003cversion\u003e-arm64-v8a.apk` — برای گوشی‌های ۶۴ بیتی (تقریباً همه‌ی گوشی‌های جدید از سال ۱۳۹۶ به بعد). **این گزینه برای اکثر کاربران درست است.**\n- `thefeed-android-\u003cversion\u003e-armeabi-v7a.apk` — فقط برای گوشی‌های قدیمی ۳۲ بیتی.\n\n\u003e ⚠️ اگر نسخه‌ی اشتباه را نصب کنید، اندروید ممکن است نصب را قبول کند ولی باینری داخل APK اجرا نشود و برنامه کار نکند. اگر مطمئن نیستید، نسخه‌ی `arm64-v8a` را انتخاب کنید.\n\u003e\n\u003e برای دیدن معماری دقیق گوشی: تنظیمات → درباره‌ی گوشی → یا با اپ‌هایی مثل CPU-Z معماری CPU را ببینید (`arm64-v8a` یا `armeabi-v7a`).\n\nبرنامه در اولین اجرا اجازه‌ی Battery Optimization Exemption را می‌گیرد تا سرویس پس‌زمینه توسط سیستم بسته نشود.\n\n### iOS\n\nنسخه‌ی iOS در حال توسعه است. سورس در پوشه‌ی [`ios/`](ios/) قرار دارد. برای ساخت روی مک:\n\n```\ngo install golang.org/x/mobile/cmd/gomobile@latest \u0026\u0026 gomobile init\nmake ios-bind        # ساخت Mobile.xcframework\nmake ios-build       # بیلد روی iOS Simulator\nmake ios-test        # اجرای تست‌ها\n```\n\nسپس `ios/Thefeed.xcodeproj` را در Xcode باز کنید.\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```bash\nthefeed-server ... --chat-domains c.example.com\n# یا: THEFEED_CHAT_DOMAINS=c.example.com\n```\n\n- **رمزنگاری سرتاسری**: فقط دو طرف می‌توانند پیام را بخوانند — سرور فقط داده مبهم نگه می‌دارد و بدون خواندن محتوا، فرستنده را راستی‌آزمایی می‌کند. نام مخاطبان هرگز از دستگاه خارج نمی‌شود.\n- **هویت**: کلاینت یک کد بازیابی را به‌صورت محلی می‌سازد؛ آدرس شما ۲۰ کاراکتر است که از آن مشتق می‌شود. آدرس را خارج از این کانال (مثلاً تلفنی) به مخاطب بدهید؛ همان کد بازیابی روی هر سروری کار می‌کند.\n- **امنیت fail-closed**: کلاینت فقط وقتی چت را فعال می‌کند که کلید عمومی سرور (`sk=`) در پروفایل پین شده باشد و امضای داده‌های قابلیت چت تأیید شود. یک بیت امضاشده در متادیتای فید اعلام می‌کند که سرور چت دارد؛ بنابراین کلاینتی که کلید را ندارد می‌تواند بگوید «این سرور پیام‌رسان دارد — کانفیگ را با کلیدش دوباره وارد کن» به‌جای شکست بی‌صدا، و کلاینت‌ها روی سرورهای بدون چت اصلاً کوئری اضافه نمی‌زنند.\n- **خاموش کردن بدون حذف دامنه‌ها**: با `--chat-enabled=false` (یا `THEFEED_CHAT_ENABLED=0`) دامنه‌ها می‌مانند ولی چت «غیرفعال» اعلام می‌شود و کلاینت‌ها پیام «پیام‌رسان توسط این سرور غیرفعال است» نشان می‌دهند.\n- **محدودیت‌های ضد سوءاستفاده** (به‌صورت خودکار به کلاینت‌ها اعلام می‌شود): `--chat-send-per-hour` (۳۰)، `--chat-inbox-cap` (۵۰)، `--chat-per-pair-cap` (۱۰)، `--chat-max-msg-bytes` (۵۰۰). پیام‌های تحویل‌نشده بعد از `--chat-ttl-hours` (۷۲) منقضی می‌شوند.\n- **اکانت‌ها به‌صورت پیش‌فرض نگه داشته می‌شوند** (`--chat-account-ttl-days 0`) تا گزارش‌ها دقیق بمانند؛ روی سرور پرترافیک می‌توانید تعداد روز ست کنید تا اکانت‌های قدیمی پاک شوند. `--chat-max-accounts` (۰ = نامحدود) سقف کل اکانت‌ها است.\n- **پایایی در برابر کارایی** (`--chat-sync-seconds`، پیش‌فرض ۱): صندوق پیام‌ها هر N ثانیه روی دیسک ذخیره می‌شود، پس با یک کرش ممکن است تا حدود N ثانیه از پیام‌های تازه‌دریافت‌شده از بین برود (اشکالی ندارد — چت سرتاسر رمزنگاری‌شده است و فرستنده دوباره می‌فرستد). مقدار `0` یعنی fsync روی هر پیام (پایایی کامل، کارایی کمتر).\n- در رابط کلاینت، **چت** را از نوار ناوبری پایین باز کنید. ✓ = روی سرور ذخیره شد، ✓✓ = گیرنده دریافت کرد. یکسان بودن ایموجی‌های امنیتی در دو دستگاه یعنی گفتگو امن است.\n\nگزارش ساعتی DNS شامل `totalChatQueries` و بلوک `chat` (اکانت‌ها، پیام‌ها، ثبت‌نام‌ها، سشن‌ها) است.\n\n### گزارش ادمین (TUI)\n\nسرور هر گزارش ساعتی را به‌صورت یک خط JSON به فایل `\u003cdata-dir\u003e/dns_hourly.jsonl` اضافه می‌کند (با چرخش بر اساس حجم و نگه‌داری چند نسخه پشتیبان). خود باینری سرور با فلگ `--report` یک داشبورد ترمینالی از همین فایل می‌سازد؛ هیچ‌چیز روی شبکه serve نمی‌کند و فقط پوشه دیتا را می‌خواند:\n\n```bash\nthefeed-server --report                       # خواندن ./data/dns_hourly.jsonl و ./data/chat.db\nthefeed-server --data-dir /srv/thefeed --report\nthefeed-server --report --report-refresh 5s   # زنده، هر ۵ ثانیه تازه‌سازی\nthefeed-server --report --report-from 2026-06-10 --report-to \"2026-06-11 18:00\"   # فقط همین بازه زمانی UTC\n```\n\nمجموع کوئری‌ها، channel-fetch، متادیتا، مدیا و چت، میانگین هر کانال با نمودار میله‌ای، مجموع هر دامنه، اسپارک‌لاین، کوئری در هر ساعت روز و آمار چت (از جمله شمارش زنده اکانت‌ها از `chat.db`) را نشان می‌دهد — همان محاسبات `scripts/thefeed_log_report.py` در ترمینال.\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| `--chat-domains` | | ساب‌دامنه(های) اختصاصی پیام‌رسان (خالی = غیرفعال) |\n| `--chat-send-per-hour` | `30` | سقف ارسال پیام هر کاربر در ساعت |\n| `--chat-inbox-cap` | `50` | سقف پیام‌های ذخیره‌شده در هر صندوق |\n| `--chat-per-pair-cap` | `10` | سقف پیام‌های یک فرستنده در صندوق یک گیرنده |\n| `--chat-max-msg-bytes` | `500` | حداکثر اندازه متن پیام بر حسب بایت |\n| `--chat-ttl-hours` | `72` | عمر پیام تحویل‌نشده بر حسب ساعت |\n| `--chat-enabled` | `true` | سرو چت وقتی دامنه ست شده؛ `false` یعنی «چت غیرفعال» به کلاینت اعلام شود |\n| `--chat-account-ttl-days` | `0` | حذف اکانت‌های بی‌استفاده بعد از N روز (۰ = هرگز) |\n| `--chat-max-accounts` | `0` | سقف کل اکانت‌های ذخیره‌شده (۰ = نامحدود) |\n| `--chat-sync-seconds` | `1` | ذخیره صندوق پیام روی دیسک هر N ثانیه (۰ = هر پیام؛ پایایی کامل، کارایی کمتر) |\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/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"}