mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-15 19:27:06 +07:00
docs: add Discord bot to READMEs, architecture, operations guides, and locales (#6513)
* docs: add Discord bot to READMEs, architecture, operations guides, and locales * docs: address review feedback on Discord bot formatting, backup commands, and architecture * docs(discord): fix Persian typo and literal arrows on fa/zh bot pages Senior review of #6513, two LOW findings in the two new pages: - fa/operations/discord-bot.mdx:30 spelled "developers" with Cyrillic "де" in place of Persian "ده", rendering a mixed-script word. - Both pages copied `$\rightarrow$` from the en page. The docs site has no math plugin (nothing in source.config.ts, no remark-math installed), so the built HTML shows the literal string "$\rightarrow$" in every menu path. Replaced with a Unicode arrow on fa and zh; en and ru have carried the same since #6486 and are left for a separate change. --------- Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
This commit is contained in:
@@ -58,8 +58,8 @@ file locations when it can answer in one hop.
|
||||
- `internal/web/` — Gin server (embeds `dist/` + `translation/`).
|
||||
- `controller/` — panel + REST API handlers; OpenAPI at /panel/api/openapi.json.
|
||||
- `service/` — business logic (InboundService, SettingService, XrayService,
|
||||
node sync); subpackages tgbot/, email/, outbound/, panel/, integration/.
|
||||
- `job/` — 18 cron jobs (traffic, fail2ban IP-limit, node heartbeat/sync, LDAP,
|
||||
node sync); subpackages tgbot/, discord/, email/, outbound/, panel/, integration/.
|
||||
- `job/` — 19 cron jobs (traffic, fail2ban IP-limit, node heartbeat/sync, LDAP,
|
||||
CPU/memory watchdogs, …); full table in `docs/architecture.md` §5.4.
|
||||
- `middleware/`, `entity/`, `global/`, `session/` (CSRF), `network/`,
|
||||
`runtime/` (master/sub-node over mTLS), `websocket/`.
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@
|
||||
- **دعم العقد المتعددة** — إدارة وتوسيع عبر عدة خوادم من لوحة واحدة، بما في ذلك استنساخ الاتصالات الواردة على عقد أخرى.
|
||||
- **الاتصالات الصادرة والتوجيه** — WARP، NordVPN، PIA، قواعد توجيه مخصصة، موازنات تحميل مع تجاوز الفشل بين الموازنات، وتسلسل الوكلاء الصادرة. ويمكن تصفّح فئات geosite و geoip المضمّنة مباشرةً من محرر القواعد.
|
||||
- **خادم اشتراك مدمج** — إخراج raw و JSON و Clash يُختار تلقائيًا حسب User-Agent الخاص بالعميل، مع [قوالب صفحات مخصصة](docs/custom-subscription-templates.md).
|
||||
- **روبوت تيليجرام** للمراقبة والإدارة عن بُعد.
|
||||
- **روبوتات تيليجرام وديسكورد** للمراقبة والإدارة عن بُعد.
|
||||
- **واجهة RESTful API** مع رموز وصول محدودة النطاق وقابلة لانتهاء الصلاحية، ومرجع API داخل اللوحة.
|
||||
- **لوحة قابلة للتثبيت (PWA)** — ثبّت 3X-UI على سطح المكتب أو شاشة هاتفك الرئيسية.
|
||||
- **تخزين مرن** — SQLite (افتراضي) أو PostgreSQL.
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ Construido como un fork mejorado del proyecto X-UI original, 3X-UI añade un sop
|
||||
- **Soporte multinodo** — gestiona y escala a través de varios servidores desde un único panel, incluida la clonación de entradas en otros nodos.
|
||||
- **Salida y enrutamiento** — WARP, NordVPN, PIA, reglas de enrutamiento personalizadas, balanceadores de carga con conmutación por error entre balanceadores y encadenamiento de proxy de salida. Las categorías geosite y geoip incluidas se pueden explorar directamente desde el editor de reglas.
|
||||
- **Servidor de suscripción integrado** — salida raw, JSON y Clash, seleccionada automáticamente según el User-Agent del cliente, además de [plantillas de página personalizables](docs/custom-subscription-templates.md).
|
||||
- **Bot de Telegram** para monitorización y gestión remotas.
|
||||
- **Bots de Telegram y Discord** para monitorización y gestión remotas.
|
||||
- **API RESTful** con tokens de alcance limitado y caducidad opcional, y una referencia de la API dentro del panel.
|
||||
- **Panel instalable (PWA)** — ancla 3X-UI al escritorio o a la pantalla de inicio del móvil.
|
||||
- **Almacenamiento flexible** — SQLite (predeterminado) o PostgreSQL.
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@
|
||||
- **پشتیبانی از چند نود** — مدیریت و مقیاسدهی روی چندین سرور از یک پنل واحد، از جمله کلونکردن اینباندها روی نودهای دیگر.
|
||||
- **اوتباند و مسیریابی** — WARP، NordVPN، PIA، قوانین مسیریابی سفارشی، متعادلکنندههای بار (load balancer) با فالبک بین متعادلکنندهها و زنجیرهکردن پراکسی اوتباند. دستهبندیهای geosite و geoip همراهشده مستقیماً از ویرایشگر قوانین قابل مرور هستند.
|
||||
- **سرور سابسکریپشن داخلی** — خروجی raw، JSON و Clash که بر پایهی User-Agent کلاینت بهصورت خودکار انتخاب میشود، بههمراه [قالبهای صفحهی سفارشی](docs/custom-subscription-templates.md).
|
||||
- **ربات تلگرام** برای نظارت و مدیریت از راه دور.
|
||||
- **رباتهای تلگرام و دیسکورد** برای نظارت و مدیریت از راه دور.
|
||||
- **RESTful API** با توکنهای محدودشده (scoped) و دارای انقضای اختیاری، بههمراه مرجع API درونپنل.
|
||||
- **پنل قابل نصب (PWA)** — 3X-UI را به دسکتاپ یا صفحهی اصلی گوشی خود سنجاق کنید.
|
||||
- **ذخیرهسازی منعطف** — SQLite (پیشفرض) یا PostgreSQL.
|
||||
|
||||
@@ -37,7 +37,7 @@ Built as an enhanced fork of the original X-UI project, 3X-UI adds broader proto
|
||||
- **Multi-node support** — manage and scale across multiple servers from a single panel, including cloning inbounds onto other nodes.
|
||||
- **Outbound & routing** — WARP, NordVPN, PIA, custom routing rules, load balancers with balancer-to-balancer fallback, and outbound proxy chaining. Bundled geosite and geoip categories are browsable straight from the rule editor.
|
||||
- **Built-in subscription server** — raw, JSON, and Clash output, auto-selected from the client's User-Agent, plus [custom page templates](docs/custom-subscription-templates.md).
|
||||
- **Telegram bot** for remote monitoring and management.
|
||||
- **Telegram and Discord bots** for remote monitoring and management.
|
||||
- **RESTful API** with scoped, optionally expiring tokens and an in-panel API reference.
|
||||
- **Installable panel (PWA)** — pin 3X-UI to a desktop or phone home screen.
|
||||
- **Flexible storage** — SQLite (default) or PostgreSQL.
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@
|
||||
- **Поддержка нескольких узлов** — управление и масштабирование на несколько серверов из одной панели, включая клонирование входящих на другие узлы.
|
||||
- **Исходящие подключения и маршрутизация** — WARP, NordVPN, PIA, пользовательские правила маршрутизации, балансировщики нагрузки с переключением между балансировщиками и цепочки исходящих прокси. Встроенные категории geosite и geoip можно просматривать прямо в редакторе правил.
|
||||
- **Встроенный сервер подписок** — вывод в форматах raw, JSON и Clash, выбираемый автоматически по User-Agent клиента, а также [пользовательские шаблоны страниц](docs/custom-subscription-templates.md).
|
||||
- **Telegram-бот** для удалённого мониторинга и управления.
|
||||
- **Telegram- и Discord-боты** для удалённого мониторинга и управления.
|
||||
- **RESTful API** с токенами ограниченной области действия и необязательным сроком действия, а также справочником API внутри панели.
|
||||
- **Устанавливаемая панель (PWA)** — закрепите 3X-UI на рабочем столе или главном экране телефона.
|
||||
- **Гибкое хранилище** — SQLite (по умолчанию) или PostgreSQL.
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ Orijinal X-UI projesinin geliştirilmiş bir çatallaması (fork) olarak inşa e
|
||||
- **Çoklu düğüm (Multi-node) desteği** — Tek bir panel üzerinden birden fazla sunucuyu yönetin ve ölçeklendirin; gelen bağlantıları diğer düğümlere klonlayın.
|
||||
- **Giden bağlantı (Outbound) ve yönlendirme** — WARP, NordVPN, PIA, özel yönlendirme kuralları, dengeleyiciler arası yük devretme destekli yük dengeleyiciler (load balancers) ve giden bağlantı proxy zincirleme (proxy chaining). Pakete dahil geosite ve geoip kategorileri doğrudan kural düzenleyicisinden taranabilir.
|
||||
- **Dahili abonelik sunucusu** — İstemcinin User-Agent bilgisine göre otomatik seçilen raw, JSON ve Clash çıktısı ve [özel sayfa şablonları](docs/custom-subscription-templates.md).
|
||||
- Uzaktan izleme ve yönetim için **Telegram botu**.
|
||||
- Uzaktan izleme ve yönetim için **Telegram ve Discord botları**.
|
||||
- Kapsamı sınırlanmış, isteğe bağlı olarak süresi dolan token'lar ve panel içi API referansı sunan **RESTful API**.
|
||||
- **Kurulabilir panel (PWA)** — 3X-UI'yi masaüstüne veya telefon ana ekranına sabitleyin.
|
||||
- **Esnek depolama** — SQLite (varsayılan) veya PostgreSQL.
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@
|
||||
- **多节点支持** — 从单一面板管理并扩展到多台服务器,并可将入站克隆到其他节点。
|
||||
- **出站与路由** — WARP、NordVPN、PIA、自定义路由规则、支持均衡器间回退的负载均衡器,以及出站代理链。内置的 geosite 与 geoip 分类可直接在规则编辑器中浏览。
|
||||
- **内置订阅服务器** — 提供 raw、JSON 和 Clash 输出,可依据客户端 User-Agent 自动选择,并支持[自定义页面模板](docs/custom-subscription-templates.md)。
|
||||
- **Telegram 机器人**,用于远程监控和管理。
|
||||
- **Telegram 和 Discord 机器人**,用于远程监控和管理。
|
||||
- **RESTful API**,支持带作用域、可设置有效期的令牌,并提供面板内置的 API 参考文档。
|
||||
- **可安装面板 (PWA)** — 将 3X-UI 固定到桌面或手机主屏幕。
|
||||
- **灵活的存储** — SQLite(默认)或 PostgreSQL。
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ The documentation walks you through 3x-ui from first install to day-to-day opera
|
||||
|
||||
- **Getting Started** — installation, first login, and updating or uninstalling the panel.
|
||||
- **Configuration** — the panel, inbounds, REALITY, transports, clients, subscriptions, and share links.
|
||||
- **Operations** — reverse proxy, multi-node setups, outbounds & routing, backup/restore, the Telegram bot, and security.
|
||||
- **Operations** — reverse proxy, multi-node setups, outbounds & routing, backup/restore, Telegram and Discord bots, and security.
|
||||
- **Reference** — environment variables, the database, ports & firewall, and the HTTP API.
|
||||
- **Help** — troubleshooting, FAQ, migration, and how to contribute.
|
||||
|
||||
|
||||
+27
-24
@@ -65,7 +65,7 @@ Two key ideas that explain most of the complexity:
|
||||
- Scheduler: **robfig/cron/v3** (seconds-precision) for all background jobs.
|
||||
- Xray: **xtls/xray-core** vendored as a library; the panel talks to the running core over
|
||||
its **gRPC API** and also shells out to manage the process.
|
||||
- Telegram bot: **mymmrac/telego**. i18n: **nicksnyder/go-i18n**.
|
||||
- Bots: Telegram bot (**mymmrac/telego**), Discord bot (Discord REST API v10 + **gorilla/websocket** Gateway v10). i18n: **nicksnyder/go-i18n**.
|
||||
- Misc: gorilla/websocket, gopsutil (system stats), go-qrcode, gotp (2FA TOTP).
|
||||
|
||||
**Frontend (`frontend/`):**
|
||||
@@ -217,6 +217,7 @@ node heartbeat every 5s, periodic traffic resets (hourly/daily/weekly/monthly).
|
||||
│ │ │ │ ├── user.go # admin user auth (bcrypt)
|
||||
│ │ │ │ ├── api_token.go # API token CRUD (SHA-256 hashed)
|
||||
│ │ │ │ └── websocket.go # WS hub / push service
|
||||
│ │ │ ├── discord/ # Discord bot client, Gateway v10, and subscriber
|
||||
│ │ │ └── tgbot/ # Telegram bot command handlers
|
||||
│ │ ├── runtime/ # ⭐⭐ The Local/Remote node abstraction (see §5.2)
|
||||
│ │ │ ├── runtime.go # the Runtime interface (the contract)
|
||||
@@ -372,27 +373,28 @@ Periodic resets: `job/periodic_traffic_reset_job.go` (keyed off `Inbound.Traffic
|
||||
|
||||
All registered in `web.go` → `startTask()`. Each is a struct with a `Run()` method in `internal/web/job/`:
|
||||
|
||||
| Schedule | Job | Purpose / condition |
|
||||
| ------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- |
|
||||
| `@every 1s` | `check_xray_running_job` | Restart Xray if it died (2 consecutive down checks) |
|
||||
| `@every 30s` | (inline func in `startTask`) | Debounced Xray restart — consumes the "need restart" flag (§5.1) |
|
||||
| `@every 5s` | `xray_traffic_job` | Pull traffic stats from Xray (5s start delay) |
|
||||
| `@every 5s` | `node_heartbeat_job` | Probe child nodes (online/offline) |
|
||||
| `@every 5s` | `node_traffic_sync_job` | Pull + merge node traffic; push reconciliation |
|
||||
| `@every 10s` | `check_client_ip_job` | Enforce per-client IP limits |
|
||||
| `@every 10s` | `mtproto_job` | Reconcile `mtg` sidecars against enabled MTProto inbounds |
|
||||
| `@every 10s` | `amneziawg_job` | Reconcile embedded AmneziaWG interfaces against enabled local inbounds |
|
||||
| `@every 5m` | `outbound_subscription_job` | Refresh outbound provider configs |
|
||||
| `@every 10m` | `clear_logs_job` (`PruneXrayLogsJob`) | Truncate Xray access/error logs once either exceeds 64 MiB |
|
||||
| `@hourly` | `warp_ip_job`, `periodic_traffic_reset_job("hourly")` | WARP IP rotation; traffic resets |
|
||||
| `@daily` | `clear_logs_job`, `periodic_traffic_reset_job("daily")`, `periodic_traffic_reset_job("monthly")` | IP-limit and Xray access/error log cleanup; daily resets and due monthly resets |
|
||||
| `@weekly` | `periodic_traffic_reset_job("weekly")` | Weekly traffic resets |
|
||||
| default `@every 1m` | `ldap_sync_job` | Only if LDAP enabled; schedule configurable |
|
||||
| default `@daily` | `stats_notify_job` | Only if TG bot enabled; schedule configurable |
|
||||
| `@every 2m` | `check_hash_storage` | Only if TG bot enabled; expires bot callback hashes |
|
||||
| `@every 1m` | `check_cpu_usage` | Only if a CPU alarm is configured (TG or email); publishes `cpu.high` |
|
||||
| `@every 1m` | `check_memory_usage` | Only if a memory alarm is configured; publishes `memory.high` |
|
||||
| configurable | `free_os_memory` | Only if `sys.MemoryReleaseIntervalMinutes() > 0`; returns heap to OS |
|
||||
| Schedule | Job | Purpose / condition |
|
||||
| ------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
|
||||
| `@every 1s` | `check_xray_running_job` | Restart Xray if it died (2 consecutive down checks) |
|
||||
| `@every 30s` | (inline func in `startTask`) | Debounced Xray restart — consumes the "need restart" flag (§5.1) |
|
||||
| `@every 5s` | `xray_traffic_job` | Pull traffic stats from Xray (5s start delay) |
|
||||
| `@every 5s` | `node_heartbeat_job` | Probe child nodes (online/offline) |
|
||||
| `@every 5s` | `node_traffic_sync_job` | Pull + merge node traffic; push reconciliation |
|
||||
| `@every 10s` | `check_client_ip_job` | Enforce per-client IP limits |
|
||||
| `@every 10s` | `mtproto_job` | Reconcile `mtg` sidecars against enabled MTProto inbounds |
|
||||
| `@every 10s` | `amneziawg_job` | Reconcile embedded AmneziaWG interfaces against enabled local inbounds |
|
||||
| `@every 5m` | `outbound_subscription_job` | Refresh outbound provider configs |
|
||||
| `@every 10m` | `clear_logs_job` (`PruneXrayLogsJob`) | Truncate Xray access/error logs once either exceeds 64 MiB |
|
||||
| `@hourly` | `warp_ip_job`, `periodic_traffic_reset_job("hourly")` | WARP IP rotation; traffic resets |
|
||||
| `@daily` | `clear_logs_job`, `periodic_traffic_reset_job("daily")`, `periodic_traffic_reset_job("monthly")` | IP-limit and Xray access/error log cleanup; daily resets and due monthly resets |
|
||||
| `@weekly` | `periodic_traffic_reset_job("weekly")` | Weekly traffic resets |
|
||||
| default `@every 1m` | `ldap_sync_job` | Only if LDAP enabled; schedule configurable |
|
||||
| default `@daily` | `stats_notify_job` | Only if TG bot enabled; schedule configurable |
|
||||
| default `@daily` | `discord_notify_job` | Only if Discord bot enabled; schedule configurable |
|
||||
| `@every 2m` | `check_hash_storage` | Only if TG bot enabled; expires bot callback hashes |
|
||||
| `@every 1m` | `check_cpu_usage` | Only if a CPU alarm is configured (TG, Discord, or email); publishes `cpu.high` |
|
||||
| `@every 1m` | `check_memory_usage` | Only if a memory alarm is configured (TG, Discord, or email); publishes `memory.high` |
|
||||
| configurable | `free_os_memory` | Only if `sys.MemoryReleaseIntervalMinutes() > 0`; returns heap to OS |
|
||||
|
||||
To change _when_ something runs, edit `startTask()`. To change _what_ it does, edit the job file.
|
||||
|
||||
@@ -433,7 +435,7 @@ also has protocol schemas under `frontend/src/schemas/protocols/` and `frontend/
|
||||
`xray.crash`, `node.down|up`, `cpu.high`, `memory.high`, `login.attempt`, with structured
|
||||
payloads (OutboundHealthData, NodeHealthData, LoginEventData, SystemMetricData). Producers
|
||||
include the CPU/memory jobs, node heartbeat, and login handling; consumers include the
|
||||
Telegram bot and the email notifier (`service/email/`). Use it for cross-cutting
|
||||
Telegram bot, the Discord bot (`service/discord/`), and the email notifier (`service/email/`). Use it for cross-cutting
|
||||
notifications instead of importing notification services into producers.
|
||||
|
||||
### 5.8 Tunnel health monitor
|
||||
@@ -504,6 +506,7 @@ for AutoMigrate in `internal/database/db.go`.
|
||||
| **Geo category browser** empty / won't open | `xray/geodata/` (`Store`, `reader.go`), `service/geodata.go` | `controller/xray_setting.go` (`/panel/api/xray/geodata/*`), asset dir = `config.GetBinFolderPath()` |
|
||||
| **`geosite:`/`geoip:` token** reported unknown in a routing rule | `xray/geodata/token.go`, `service/geodata.go` (`Validate`) | `frontend/src/lib/xray/geoTokens.ts`, `frontend/src/components/geodata/` |
|
||||
| **Telegram bot** commands | `service/tgbot/` | `job/stats_notify_job.go` |
|
||||
| **Discord bot** commands & reports | `service/discord/` | `job/discord_notify_job.go` |
|
||||
| **Email notifications** | `service/email/` | `internal/eventbus/` (consumers) |
|
||||
| **CPU / memory alerts** not firing | `job/check_cpu_usage.go`, `job/check_memory_usage.go` | `internal/eventbus/`, notifier settings in `service/setting.go` |
|
||||
| Xray auto-restart on **dead tunnel** | `internal/tunnelmonitor/` | `XUI_TUNNEL_HEALTH_*` in `internal/config/` |
|
||||
@@ -539,7 +542,7 @@ for AutoMigrate in `internal/database/db.go`.
|
||||
8. **Two servers, two concerns.** Admin features go in `internal/web`; anything an _end user_
|
||||
fetches goes in `internal/sub`. Don't blur them.
|
||||
9. **Cross-cutting notifications go through `internal/eventbus/`** — publish an event instead
|
||||
of importing the Telegram/email services into producers.
|
||||
of importing the Telegram/Discord/email services into producers.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ flowchart LR
|
||||
- **Per-client** traffic quotas, expiry dates, IP limits, online status, and
|
||||
one-click share links / QR codes.
|
||||
- **Subscriptions** in VLESS, Clash/Mihomo, and JSON formats.
|
||||
- Operational tooling: **multi-node** management, a **Telegram bot**, backups,
|
||||
- Operational tooling: **multi-node** management, **Telegram and Discord bots**, backups,
|
||||
Fail2ban-based IP limiting, and a documented REST API.
|
||||
|
||||
## Under the hood
|
||||
|
||||
@@ -46,7 +46,7 @@ leaves the page.
|
||||
- **Per-client controls** — traffic quotas, expiry dates, IP limits, share
|
||||
links, and QR codes.
|
||||
- **Subscriptions** — VLESS, Clash/Mihomo, and JSON formats.
|
||||
- **Operations** — multi-node management, Telegram bot, backups, and a REST API.
|
||||
- **Operations** — multi-node management, Telegram and Discord bots, backups, and a REST API.
|
||||
|
||||
<Callout type="info">
|
||||
New to Xray? Read [What is 3x-ui?](/docs/guide) first — it explains how the panel, Xray-core, and
|
||||
|
||||
@@ -31,13 +31,9 @@ To restore, stop the panel, put the database back in place, and start it again.
|
||||
old schema.
|
||||
</Callout>
|
||||
|
||||
## Telegram backup
|
||||
## Automated bot backups (Telegram & Discord)
|
||||
|
||||
If you've configured the [Telegram bot](/docs/operations/telegram-bot), enable
|
||||
**`tgBotBackup`** to attach a backup to the periodic report (on the `tgRunTime`
|
||||
schedule, default daily). The bot sends both the **database** and the **Xray
|
||||
`config.json`** to your admin chat, so you always have an off-server copy. Admins
|
||||
can also request a backup on demand from the bot's menu.
|
||||
If you've configured the [Telegram bot](/docs/operations/telegram-bot) or [Discord bot](/docs/operations/discord-bot), enable **`tgBotBackup`** or **`discordBotBackup`** to attach a backup to the periodic report (on the `tgRunTime` / `discordRunTime` schedule, default daily). The bot sends both the **database** and the **Xray `config.json`** directly to your admin chat or channel, ensuring an off-server copy. Admins can also request a backup on demand from the Telegram bot's menu or using `!backup` in Discord.
|
||||
|
||||
## SQLite dump / restore
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ Provide the node's connection details:
|
||||
The master verifies reachability when you add or test a node. It then sends a
|
||||
**heartbeat** every few seconds, updating the node's status (`online` / `offline`)
|
||||
and emitting `node.up` / `node.down` events (see the
|
||||
[Telegram bot](/docs/operations/telegram-bot)).
|
||||
[Telegram bot](/docs/operations/telegram-bot) and [Discord bot](/docs/operations/discord-bot)).
|
||||
|
||||
<Callout type="info">
|
||||
Nodes are identified by a stable per-panel GUID, so a node keeps its identity
|
||||
|
||||
@@ -67,6 +67,7 @@ icon: SlidersHorizontal
|
||||
|
||||
<Cards>
|
||||
<Card title="ربات Telegram" href="/docs/operations/telegram-bot" description="توکن، شناسههای چت، هشدارها و گزارشها." />
|
||||
<Card title="ربات Discord" href="/docs/operations/discord-bot" description="توکن، شناسه کانال و هشدارهای رویداد." />
|
||||
<Card title="اشتراک" href="/docs/config/subscription" description="سرور اشتراک، قالبها و مسیرها." />
|
||||
<Card title="امنیت" href="/docs/operations/security" description="۲FA، محدودیتهای IP و سختسازی." />
|
||||
</Cards>
|
||||
|
||||
@@ -41,7 +41,7 @@ flowchart LR
|
||||
- سهمیههای ترافیک **بهازای هر کلاینت**، تاریخهای انقضا، محدودیتهای IP،
|
||||
وضعیت آنلاین و لینکهای اشتراکگذاری / کدهای QR با یک کلیک.
|
||||
- **اشتراکها** در قالبهای VLESS، Clash/Mihomo و JSON.
|
||||
- ابزارهای عملیاتی: مدیریت **چندنودی**، یک **ربات Telegram**، پشتیبانگیری،
|
||||
- ابزارهای عملیاتی: مدیریت **چندنودی**، **رباتهای Telegram و Discord**، پشتیبانگیری،
|
||||
محدودسازی IP مبتنی بر Fail2ban و یک REST API مستندشده.
|
||||
|
||||
## پشت صحنه
|
||||
|
||||
@@ -46,7 +46,7 @@ icon: House
|
||||
- **کنترلهای اختصاصی هر کلاینت** — سهمیه ترافیک، تاریخ انقضا، محدودیت IP، لینکهای
|
||||
اشتراکگذاری و کدهای QR.
|
||||
- **سابسکریپشنها** — قالبهای VLESS، Clash/Mihomo و JSON.
|
||||
- **عملیات** — مدیریت چندنودی، ربات Telegram، پشتیبانگیری و یک REST API.
|
||||
- **عملیات** — مدیریت چندنودی، رباتهای Telegram و Discord، پشتیبانگیری و یک REST API.
|
||||
|
||||
<Callout type="info">
|
||||
با Xray تازه آشنا شدهاید؟ ابتدا [3x-ui چیست؟](/docs/guide) را بخوانید — توضیح میدهد که پنل، Xray-core و
|
||||
|
||||
@@ -31,13 +31,9 @@ cp /etc/x-ui/x-ui.db /root/x-ui-backup-$(date +%F).db
|
||||
مهاجرتهای خود را اجرا کند.
|
||||
</Callout>
|
||||
|
||||
## پشتیبانگیری با Telegram
|
||||
## پشتیبانگیری خودکار با رباتها (Telegram و Discord)
|
||||
|
||||
اگر [ربات Telegram](/docs/operations/telegram-bot) را پیکربندی کردهاید، گزینهی
|
||||
**`tgBotBackup`** را فعال کنید تا یک نسخهی پشتیبان به گزارش دورهای ضمیمه شود (بر اساس
|
||||
زمانبندی `tgRunTime`، بهصورت پیشفرض روزانه). ربات هم **پایگاهداده** و هم **`config.json`
|
||||
مربوط به Xray** را به چت ادمین شما میفرستد، بنابراین همیشه یک نسخهی خارج از سرور در اختیار
|
||||
دارید. ادمینها همچنین میتوانند بهصورت درخواستی از منوی ربات یک نسخهی پشتیبان بخواهند.
|
||||
اگر [ربات Telegram](/docs/operations/telegram-bot) یا [ربات Discord](/docs/operations/discord-bot) را پیکربندی کردهاید، گزینهی **`tgBotBackup`** یا **`discordBotBackup`** را فعال کنید تا یک نسخهی پشتیبان به گزارش دورهای ضمیمه شود (بر اساس زمانبندی `tgRunTime` / `discordRunTime`، بهصورت پیشفرض روزانه). ربات هم **پایگاهداده** و هم **`config.json` مربوط به Xray** را مستقیماً به چت یا کانال ادمین شما میفرستد، بنابراین همیشه یک نسخهی خارج از سرور در اختیار دارید. ادمینها همچنین میتوانند بهصورت درخواستی از منوی ربات Telegram یا با دستور `!backup` در Discord یک نسخهی پشتیبان دریافت کنند.
|
||||
|
||||
## دامپ / بازیابی SQLite
|
||||
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
---
|
||||
title: ربات Discord
|
||||
description: یک ربات Discord را به 3x-ui متصل کنید تا اعلانهای بیدرنگ Embed، گزارشهای دورهای همراه با نسخه پشتیبان پایگاهداده و فرمانهای تعاملی را در یک کانال دریافت کنید.
|
||||
icon: Bot
|
||||
---
|
||||
|
||||
3x-ui یکپارچگی کاملی با Discord فراهم میکند: ارسال هشدارهای بیدرنگ از طریق گذرگاه رویدادها (`EventBus`)، گزارشهای دورهای وضعیت سرور بههمراه فایل پشتیبان پایگاهداده، و پردازش فرمانهای تعاملی از طریق Discord Gateway.
|
||||
|
||||
<Callout type="info">
|
||||
اعلانهای لحظهای و گزارشهای دورهای از تماسهای خروجی HTTPS به Discord REST API v10 استفاده میکنند. فرمانهای تعاملی ربات نیز از طریق یک اتصال پسزمینه WebSocket امن به Discord Gateway برقرار میشوند.
|
||||
</Callout>
|
||||
|
||||
## راهاندازی
|
||||
|
||||
<Steps>
|
||||
|
||||
<Step>
|
||||
### ساخت برنامه و ربات در Discord
|
||||
|
||||
1. وارد [Discord Developer Portal](https://discord.com/developers/applications) شوید.
|
||||
2. روی **New Application** در بالا سمت راست کلیک کنید، یک نام مشخص کنید (مثلاً `3x-ui Notifier`) و تایید نمایید.
|
||||
3. در نوار کناری چپ، به تب **Bot** بروید.
|
||||
4. روی **Reset Token** (یا **Add Bot**) کلیک کنید و **Bot Token** را کپی نمایید. این توکن را محفوظ نگه دارید.
|
||||
5. در بخش **Privileged Gateway Intents**، گزینه **Message Content Intent** را فعال کنید (برای خواندن فرمانهایی مانند `!status` ضروری است).
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### دعوت ربات به سرور Discord
|
||||
|
||||
1. در پرتال توسعهدهندگان، به **OAuth2** → **URL Generator** بروید.
|
||||
2. در بخش **Scopes**، گزینه `bot` را علامت بزنید.
|
||||
3. در بخش **Bot Permissions**، دسترسیهای زیر را انتخاب کنید:
|
||||
- **Send Messages** (ارسال پیام)
|
||||
- **Embed Links** (ارسال امبدها)
|
||||
- **Attach Files** (پیوست فایلها — جهت ارسال نسخه پشتیبان پایگاهداده ضروری است)
|
||||
- **Read Message History** (خواندن تاریخچه پیامها)
|
||||
4. لینک تولیدشده در پایین صفحه را کپی کرده و در مرورگر باز کنید تا ربات به سرور شما اضافه شود.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### کپی کردن Channel ID
|
||||
|
||||
1. در کلاینت دیسکورد، حالت توسعهدهنده را فعال کنید: **User Settings** → **Advanced** → **Developer Mode** (روشن).
|
||||
2. روی کانالی که میخواهید اعلانها و تعامل با ربات در آن انجام شود راستکلیک کرده و **Copy Channel ID** را انتخاب کنید.
|
||||
3. مطمئن شوید ربات دسترسی مشاهده و ارسال پیام در این کانال را دارد.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### پیکربندی پنل
|
||||
|
||||
1. در پنل 3x-ui، به **تنظیمات پنل** → **ربات Discord** (یا آدرس `/settings#discord`) بروید.
|
||||
2. در بخش **عمومی**:
|
||||
- گزینه **فعالسازی اعلانهای Discord** را روشن کنید.
|
||||
- **Bot Token** و **Channel ID** خود را وارد کنید.
|
||||
- شناسه کاربری عددی دیسکورد خود را در **شناسههای کاربری ادمین** وارد نمایید (راستکلیک روی نام خودتان → **Copy User ID**؛ شناسههای متعدد را با کاما جدا کنید).
|
||||
- زبان مورد نظر خود برای ربات را انتخاب کنید.
|
||||
3. در بخش **اعلانها**:
|
||||
- زمانبندی گزارشها را تنظیم کنید (مثلاً `@daily`، `@weekly` یا عبارت crontab سفارشی).
|
||||
- در صورت تمایل، گزینه **پشتیبانگیری پایگاهداده** را فعال کنید تا فایل `x-ui.db` بهصورت خودکار ضمیمه گزارشها شود.
|
||||
- رویدادهای مورد نظر برای دریافت هشدار و آستانههای بار CPU/RAM را تنظیم نمایید.
|
||||
4. روی **ارسال اعلان آزمایشی** کلیک کنید تا از صحت ارتباط مطمئن شوید.
|
||||
5. برای اعمال تغییرات روی **ذخیره** کلیک نمایید.
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## فرمانهای ربات
|
||||
|
||||
هنگام فعال بودن، ربات به فرمانهای ارسالشده در کانال پیکربندیشده گوش میدهد (پشتیبانی از هر دو پیشوند `!` و `/`). تنها کاربرانی که شناسهی آنها در **شناسههای کاربری ادمین** ثبت شده مجاز به اجرای فرمانها هستند؛ پیامهای سایر کاربران نادیده گرفته میشود و در صورت خالی بودن این فیلد، اجرای فرمانها غیرفعال خواهد بود. فرمان `!backup` فایل پایگاهداده را در کانال ارسال میکند، بنابراین کانالی را انتخاب کنید که فقط ادمینها به آن دسترسی داشته باشند:
|
||||
|
||||
| فرمان | عملکرد |
|
||||
| ----- | ------ |
|
||||
| `!status` | نمایش بار پردازشی سیستم، مصرف RAM، وضعیت هسته Xray، اتصالات و تعداد کاربران آنلاین. |
|
||||
| `!report` | تولید و ارسال فوری گزارش کامل وضعیت سرور و پروکسی. |
|
||||
| `!backup` | ارسال فوری فایل نسخه پشتیبان پایگاهداده (`x-ui.db`) و `config.json`. |
|
||||
| `!usage <email>` | بررسی مصرف ترافیک (دانلود/آپلود)، سقف حجم و تاریخ انقضای یک کلاینت خاص. |
|
||||
| `!inbounds` | فهرست تمام اینباندهای فعال به همراه پورت، پروتکل، ترافیک و تعداد کلاینتها. |
|
||||
| `!restart` | راهاندازی مجدد ایمن هسته Xray بدون نیاز به ریاستارت پنل تحت وب. |
|
||||
| `!help` | نمایش فهرست فرمانهای در دسترس ربات. |
|
||||
|
||||
## هشدارهای رویدادها
|
||||
|
||||
هشدارها بهصورت ساختاریافته در قالب Discord Embed همراه با رنگبندی تشخیصی ارسال میشوند:
|
||||
|
||||
| رویداد | نشانگر | توضیح |
|
||||
| ------ | ------ | ------ |
|
||||
| `xray.crash` | 🔴 قرمز | کرش کردن هسته Xray؛ همراه با علت و زمان دقیق |
|
||||
| `outbound.down` | 🔴 قرمز | شکست در آزمون اتصال اوتباند |
|
||||
| `outbound.up` | 🟢 سبز | برقراری مجدد اتصال اوتباند |
|
||||
| `node.down` | 🔴 قرمز | خارج از دسترس شدن یا قطع اتصال نود راه دور |
|
||||
| `node.up` | 🟢 سبز | اتصال مجدد و بازگشت سلامت نود راه دور |
|
||||
| `cpu.high` | 🟠 نارنجی | عبور میزان مصرف CPU از آستانه تعیینشده (`discordCpu`) |
|
||||
| `memory.high` | 🟠 نارنجی | عبور میزان مصرف RAM از آستانه تعیینشده (`discordMemory`) |
|
||||
| `login.attempt` | 🟢 / 🔴 | تلاش برای ورود به پنل تحت وب همراه با نام کاربری، IP و وضعیت ورود |
|
||||
|
||||
<Callout type="warn">
|
||||
هشدارهای ورود فقط نام کاربری و آدرس IP کلاینت را گزارش میدهند. رمزهای عبور هرگز ذخیره یا ارسال نمیشوند.
|
||||
</Callout>
|
||||
|
||||
## راهنمای تنظیمات
|
||||
|
||||
| پارامتر | مقدار پیشفرض | توضیح |
|
||||
| ------- | ------------- | ------ |
|
||||
| `discordBotEnable` | `false` | کلید اصلی فعالسازی ربات و هشدارهای Discord. |
|
||||
| `discordBotToken` | _(محرمانه)_ | توکن ربات دریافتی از Discord Developer Portal. |
|
||||
| `discordChannelId` | _(خالی)_ | شناسه عددی (Snowflake ID) کانال مقصد در دیسکورد. |
|
||||
| `discordAdminIds` | _(خالی)_ | شناسههای عددی کاربران مجاز به اجرای فرمانها (با کاما جدا شوند). |
|
||||
| `discordLang` | `en-US` | زبان پیامها و گزارشهای ارسالی ربات دیسکورد. |
|
||||
| `discordRunTime` | `@daily` | زمانبندی Cron برای ارسال خودکار گزارش وضعیت. |
|
||||
| `discordBotBackup` | `false` | ضمیمه کردن خودکار فایل نسخه پشتیبان (`x-ui.db`) به گزارشها. |
|
||||
| `discordEnabledEvents` | `login.attempt,cpu.high` | فهرست رویدادهای فعال برای ارسال هشدار (با کاما جدا شوند). |
|
||||
| `discordCpu` | `80` | آستانه درصد مصرف پردازنده (CPU) جهت ارسال هشدار (۰ تا ۱۰۰). |
|
||||
| `discordMemory` | `80` | آستانه درصد مصرف رم (RAM) جهت ارسال هشدار (۰ تا ۱۰۰). |
|
||||
|
||||
## عیبیابی
|
||||
|
||||
- **خطای invalid bot token (401)**: مطمئن شوید که توکن ربات را بهطور کامل از تب **Bot** کپی کردهاید، نه Client Secret یا Application ID.
|
||||
- **خطای missing permissions (403)**: بررسی کنید که رول ربات در کانال یا دستهبندی مربوطه دارای دسترسیهای **Send Messages**، **Embed Links** و **Attach Files** باشد.
|
||||
- **عدم پاسخگویی به فرمانها**: بررسی کنید که شناسهی عددی شما در **Admin User IDs** ثبت شده باشد. همچنین مطمئن شوید گزینه **Message Content Intent** در پرتال دیسکورد روشن است و پنل را ریاستارت کنید؛ دیسکورد در صورت نبود این دسترسی اتصال را قطع میکند.
|
||||
- **خطای channel not found (404)**: از صحت Channel ID اطمینان حاصل کنید و بررسی کنید که ربات حتماً در سروری که کانال در آن قرار دارد عضو باشد.
|
||||
- **پراکسی برای درخواستهای خروجی**: اگر سرور شما برای اتصال به دیسکورد به پروکسی نیاز دارد، در تنظیمات پنل گزینه **Panel Outbound** را پیکربندی کنید؛ درخواستهای دیسکورد بهصورت خودکار از طریق آن هدایت میشوند.
|
||||
@@ -25,7 +25,7 @@ icon: Boxes
|
||||
| **Inbound sync** | همهٔ inboundها (`all`) یا انتخابشده (`selected`) بر اساس تگ. |
|
||||
| **Outbound tag** | بهاختیار از طریق یک outbound نامدار به نود برسید (پل خروجی). |
|
||||
|
||||
مستر هنگام افزودن یا آزمودن یک نود، قابلیت دسترسی به آن را بررسی میکند. سپس هر چند ثانیه یک **ضربان قلب (heartbeat)** ارسال میکند، وضعیت نود را بهروزرسانی میکند (`online` / `offline`) و رویدادهای `node.up` / `node.down` را منتشر میکند (به [بات Telegram](/docs/operations/telegram-bot) مراجعه کنید).
|
||||
مستر هنگام افزودن یا آزمودن یک نود، قابلیت دسترسی به آن را بررسی میکند. سپس هر چند ثانیه یک **ضربان قلب (heartbeat)** ارسال میکند، وضعیت نود را بهروزرسانی میکند (`online` / `offline`) و رویدادهای `node.up` / `node.down` را منتشر میکند (به [بات Telegram](/docs/operations/telegram-bot) و [بات Discord](/docs/operations/discord-bot) مراجعه کنید).
|
||||
|
||||
<Callout type="info">
|
||||
نودها با یک GUID پایدار بهازای هر پنل شناسایی میشوند، بنابراین یک نود هویت خود
|
||||
|
||||
@@ -40,7 +40,7 @@ flowchart LR
|
||||
- **Поклиентские** квоты трафика, даты истечения, ограничения по IP, статус «онлайн» и
|
||||
ссылки для подключения / QR-коды в один клик.
|
||||
- **Подписки** в форматах VLESS, Clash/Mihomo и JSON.
|
||||
- Инструменты для эксплуатации: управление **несколькими узлами**, **Telegram-бот**, резервные копии,
|
||||
- Инструменты для эксплуатации: управление **несколькими узлами**, **Telegram- и Discord-боты**, резервные копии,
|
||||
ограничение по IP на базе Fail2ban и документированный REST API.
|
||||
|
||||
## Что под капотом
|
||||
|
||||
@@ -46,7 +46,7 @@ icon: House
|
||||
- **Управление каждым клиентом** — квоты трафика, даты истечения, ограничения по IP, ссылки
|
||||
для подключения и QR-коды.
|
||||
- **Подписки** — форматы VLESS, Clash/Mihomo и JSON.
|
||||
- **Эксплуатация** — управление несколькими узлами, Telegram-бот, резервные копии и REST API.
|
||||
- **Эксплуатация** — управление несколькими узлами, Telegram- и Discord-боты, резервные копии и REST API.
|
||||
|
||||
<Callout type="info">
|
||||
Впервые работаете с Xray? Сначала прочитайте [Что такое 3x-ui?](/docs/guide) — там объясняется, как панель, Xray-core и
|
||||
|
||||
@@ -33,14 +33,9 @@ cp /etc/x-ui/x-ui.db /root/x-ui-backup-$(date +%F).db
|
||||
выполнить миграции, а не навязывайте старую схему.
|
||||
</Callout>
|
||||
|
||||
## Резервное копирование через Telegram
|
||||
## Автоматические бэкапы ботов (Telegram и Discord)
|
||||
|
||||
Если вы настроили [Telegram-бота](/docs/operations/telegram-bot), включите
|
||||
**`tgBotBackup`**, чтобы прикреплять резервную копию к периодическому отчёту (по
|
||||
расписанию `tgRunTime`, по умолчанию ежедневно). Бот отправляет в чат
|
||||
администратора как **базу данных**, так и **`config.json` Xray**, поэтому у вас
|
||||
всегда будет копия за пределами сервера. Администраторы также могут запросить
|
||||
резервную копию по требованию через меню бота.
|
||||
Если вы настроили [Telegram-бота](/docs/operations/telegram-bot) или [Discord-бота](/docs/operations/discord-bot), включите **`tgBotBackup`** или **`discordBotBackup`**, чтобы прикреплять резервную копию к периодическому отчёту (по расписанию `tgRunTime` / `discordRunTime`, по умолчанию ежедневно). Бот отправляет в чат или канал администратора как **базу данных**, так и **`config.json` Xray**, поэтому у вас всегда будет копия за пределами сервера. Администраторы также могут запросить резервную копию по требованию через меню бота Telegram или с помощью команды `!backup` в Discord.
|
||||
|
||||
## Дамп / восстановление SQLite
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ API этого узла. Главная панель опрашивает каж
|
||||
Главная панель проверяет доступность при добавлении или тестировании узла. Затем
|
||||
она каждые несколько секунд отправляет **heartbeat**, обновляя статус узла
|
||||
(`online` / `offline`) и генерируя события `node.up` / `node.down` (см.
|
||||
[Telegram-бот](/docs/operations/telegram-bot)).
|
||||
[Telegram-бот](/docs/operations/telegram-bot) и [Discord-бот](/docs/operations/discord-bot)).
|
||||
|
||||
<Callout type="info">
|
||||
Узлы идентифицируются по стабильному GUID, уникальному для каждой панели,
|
||||
|
||||
@@ -63,6 +63,7 @@ icon: SlidersHorizontal
|
||||
|
||||
<Cards>
|
||||
<Card title="Telegram 机器人" href="/docs/operations/telegram-bot" description="令牌、聊天 ID、告警与报告。" />
|
||||
<Card title="Discord 机器人" href="/docs/operations/discord-bot" description="令牌、频道 ID 与事件告警。" />
|
||||
<Card title="订阅" href="/docs/config/subscription" description="订阅服务器、格式与路径。" />
|
||||
<Card title="安全" href="/docs/operations/security" description="2FA、IP 限制与加固。" />
|
||||
</Cards>
|
||||
|
||||
@@ -31,7 +31,7 @@ flowchart LR
|
||||
- 一流的 **REALITY** 与 **XTLS-Vision** 支持,带来隐蔽、快速的传输方式。
|
||||
- **按客户端**设置的流量配额、到期日期、IP 限制、在线状态,以及一键生成分享链接 / 二维码。
|
||||
- 支持 VLESS、Clash/Mihomo 和 JSON 格式的**订阅**。
|
||||
- 运维工具:**多节点**管理、**Telegram 机器人**、备份、基于 Fail2ban 的 IP 限制,以及一套有文档说明的 REST API。
|
||||
- 运维工具:**多节点**管理、**Telegram 和 Discord 机器人**、备份、基于 Fail2ban 的 IP 限制,以及一套有文档说明的 REST API。
|
||||
|
||||
## 底层原理
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ icon: House
|
||||
- **细粒度的客户端管理** —— 流量配额、到期日期、IP 限制、分享
|
||||
链接以及 QR 码。
|
||||
- **订阅** —— 支持 VLESS、Clash/Mihomo 以及 JSON 格式。
|
||||
- **运维能力** —— 多节点管理、Telegram 机器人、备份以及 REST API。
|
||||
- **运维能力** —— 多节点管理、Telegram 和 Discord 机器人、备份以及 REST API。
|
||||
|
||||
<Callout type="info">
|
||||
初次接触 Xray?请先阅读 [什么是 3x-ui?](/docs/guide) —— 它解释了面板、Xray-core 与
|
||||
|
||||
@@ -28,13 +28,9 @@ cp /etc/x-ui/x-ui.db /root/x-ui-backup-$(date +%F).db
|
||||
运行迁移,而不要强行套用旧的数据库结构。
|
||||
</Callout>
|
||||
|
||||
## Telegram 备份
|
||||
## 机器人自动备份(Telegram 与 Discord)
|
||||
|
||||
如果你已配置 [Telegram 机器人](/docs/operations/telegram-bot),启用
|
||||
**`tgBotBackup`** 即可在周期性报告中附带一份备份(按 `tgRunTime`
|
||||
计划执行,默认每天一次)。机器人会将**数据库**与 Xray 的
|
||||
**`config.json`** 一并发送到你的管理员聊天,从而让你始终拥有一份服务器之外的副本。
|
||||
管理员也可以从机器人的菜单中按需请求备份。
|
||||
如果你已配置 [Telegram 机器人](/docs/operations/telegram-bot) 或 [Discord 机器人](/docs/operations/discord-bot),启用 **`tgBotBackup`** 或 **`discordBotBackup`** 即可在周期性报告中附带一份备份(按 `tgRunTime` / `discordRunTime` 计划执行,默认每天一次)。机器人会将**数据库**与 Xray 的 **`config.json`** 一并发送到你的管理员聊天或频道,从而让你始终拥有一份服务器之外的副本。管理员也可以随时从 Telegram 机器人的菜单或使用 Discord 的 `!backup` 命令按需请求备份。
|
||||
|
||||
## SQLite 转储 / 恢复
|
||||
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
---
|
||||
title: Discord 机器人
|
||||
description: 将 Discord 机器人接入 3x-ui,在指定频道接收实时的面板事件 Embed 告警、周期性健康报告(含数据库备份)以及执行交互式控制命令。
|
||||
icon: Bot
|
||||
---
|
||||
|
||||
3x-ui 提供了完整的 Discord 集成支持:通过事件总线(`EventBus`)实时推送事件告警、通过定时任务发送包含数据库备份的服务器状态报告,以及通过 Discord Gateway 执行交互式管理命令。
|
||||
|
||||
<Callout type="info">
|
||||
Discord 实时通知和周期性报告使用出站 HTTPS REST API v10 请求。交互式机器人命令则通过与 Discord Gateway 建立的后台安全 WebSocket 连接实现。
|
||||
</Callout>
|
||||
|
||||
## 完成配置
|
||||
|
||||
<Steps>
|
||||
|
||||
<Step>
|
||||
### 创建 Discord 应用程序与机器人
|
||||
|
||||
1. 打开 [Discord 开发者门户](https://discord.com/developers/applications) 并登录。
|
||||
2. 点击右上角的 **New Application**,输入名称(例如 `3x-ui Notifier`)并确认创建。
|
||||
3. 在左侧菜单中,进入 **Bot** 标签页。
|
||||
4. 点击 **Reset Token**(如果尚未创建机器人则点击 **Add Bot**),并复制生成的 **Bot Token**。请妥善保管该令牌。
|
||||
5. 在 **Privileged Gateway Intents** 区域,勾选启用 **Message Content Intent**(机器人读取 `!status` 等前缀命令所必需)。
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### 邀请机器人加入你的 Discord 服务器
|
||||
|
||||
1. 在开发者门户左侧导航栏中,进入 **OAuth2** → **URL Generator**。
|
||||
2. 在 **Scopes** 中勾选 `bot`。
|
||||
3. 在下方展开的 **Bot Permissions** 中,勾选以下权限:
|
||||
- **Send Messages**(发送消息)
|
||||
- **Embed Links**(嵌入链接)
|
||||
- **Attach Files**(附加文件 —— 发送数据库备份附件所必需)
|
||||
- **Read Message History**(读取消息历史)
|
||||
4. 复制页面底部生成的邀请链接,在浏览器中打开并将机器人添加到你的目标服务器。
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### 复制频道 ID
|
||||
|
||||
1. 在 Discord 客户端中开启开发者模式:**用户设置** → **高级** → **开发者模式**(开启)。
|
||||
2. 右键点击希望接收告警和执行命令的频道,选择**复制频道 ID**(Copy Channel ID)。
|
||||
3. 确保机器人拥有该频道的查看和发送消息权限。
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### 配置面板
|
||||
|
||||
1. 在 3x-ui 面板中,打开**面板设置** → **Discord 机器人**(或直接访问 `/settings#discord`)。
|
||||
2. 在**通用**区域:
|
||||
- 开启**启用 Discord 通知**。
|
||||
- 填入你的 **Discord Bot Token** 和 **频道 ID**。
|
||||
- 在**管理员用户 ID**中填入你自己的 Discord 用户数字 ID(右键你的个人头像 → **复制用户 ID**;多个 ID 请用英文逗号分隔)。
|
||||
- 选择偏好的 **Discord 机器人语言**。
|
||||
3. 在**通知**区域:
|
||||
- 设置**通知时间**(如 `@daily`、`@weekly` 或自定义 Cron 表达式)。
|
||||
- 如需自动备份,可开启**数据库备份**,定时报告中将自动附带 `x-ui.db` 备份文件。
|
||||
- 勾选需要触发告警的事件类型,并配置 CPU / 内存阈值。
|
||||
4. 点击**发送测试通知**以验证连通性。你的 Discord 频道应立刻收到一条测试 Embed 消息。
|
||||
5. 点击**保存**应用配置。
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## 机器人命令
|
||||
|
||||
启用后,机器人将在配置的 Discord 频道内监听命令(同时支持 `!` 和 `/` 前缀)。仅列在**管理员用户 ID**中的用户可以执行命令;来自其他用户的消息将被忽略,若未配置管理员 ID 则关闭命令响应。`!backup` 与定时备份会将数据库文件发送至频道中,因此请务必选择仅管理员可见的频道:
|
||||
|
||||
| 命令 | 说明 |
|
||||
| ---- | ---- |
|
||||
| `!status` | 查看系统负载、内存占用、CPU 使用率、核心状态、TCP/UDP 连接数及当前在线用户。 |
|
||||
| `!report` | 立即生成并发送完整的服务器与代理状态报告 Embed。 |
|
||||
| `!backup` | 立即导出并发送当前数据库备份文件(`x-ui.db`)与 `config.json`。 |
|
||||
| `!usage <email>` | 查询指定客户端的流量用量(上传/下载)、配额上限及到期时间。 |
|
||||
| `!inbounds` | 列出所有活动的入站连接、监听端口、协议、已用流量及客户端数量。 |
|
||||
| `!restart` | 安全重启 Xray 核心,无需重启整个 Web 面板。 |
|
||||
| `!help` | 显示机器人可用命令列表及使用说明。 |
|
||||
|
||||
## 事件告警
|
||||
|
||||
告警以 Discord Embed 格式发送,带有颜色标识和关键诊断信息:
|
||||
|
||||
| 事件类型 | 标识 | 说明 |
|
||||
| -------- | ---- | ---- |
|
||||
| `xray.crash` | 🔴 红色 | Xray 核心崩溃;包含崩溃原因及时间戳 |
|
||||
| `outbound.down` | 🔴 红色 | 出站连通性探测失败 |
|
||||
| `outbound.up` | 🟢 绿色 | 出站连通性已恢复 |
|
||||
| `node.down` | 🔴 红色 | 远程子节点离线或不可达 |
|
||||
| `node.up` | 🟢 绿色 | 远程子节点重新连接且健康 |
|
||||
| `cpu.high` | 🟠 橙色 | 服务器 CPU 使用率超过设定阈值(`discordCpu`) |
|
||||
| `memory.high` | 🟠 橙色 | 服务器内存使用率超过设定阈值(`discordMemory`) |
|
||||
| `login.attempt` | 🟢 / 🔴 | Web 面板登录尝试(包含用户名、客户端 IP 及登录结果) |
|
||||
|
||||
<Callout type="warn">
|
||||
登录告警仅包含尝试的用户名及客户端 IP 地址。系统绝不会记录或传输密码明文。
|
||||
</Callout>
|
||||
|
||||
## 设置参考
|
||||
|
||||
| 设置项 | 默认值 | 说明 |
|
||||
| ------ | ------ | ---- |
|
||||
| `discordBotEnable` | `false` | Discord 机器人与告警总开关。 |
|
||||
| `discordBotToken` | _(保密)_ | 从 Discord 开发者门户获取的 Bot Token。 |
|
||||
| `discordChannelId` | _(无)_ | 接收消息的目标 Discord 频道 Snowflake ID(17–20 位数字)。 |
|
||||
| `discordAdminIds` | _(无)_ | 允许执行命令的 Discord 用户数字 ID(逗号分隔)。留空则禁用命令交互。 |
|
||||
| `discordLang` | `en-US` | Discord 机器人消息与报告使用的语言。 |
|
||||
| `discordRunTime` | `@daily` | 发送周期性状态报告的 Cron 表达式或预设计划。 |
|
||||
| `discordBotBackup` | `false` | 是否在周期性报告中自动附带数据库备份文件(`x-ui.db`)。 |
|
||||
| `discordEnabledEvents` | `login.attempt,cpu.high` | 触发通知的事件类型列表(逗号分隔)。 |
|
||||
| `discordCpu` | `80` | 触发 CPU 告警的利用率百分比阈值(0–100)。 |
|
||||
| `discordMemory` | `80` | 触发内存告警的利用率百分比阈值(0–100)。 |
|
||||
|
||||
## 故障排查
|
||||
|
||||
- **测试报错 "invalid bot token (401)"**:请确认复制的是开发者门户 **Bot** 标签页中的 Bot Token,而非 Client Secret 或 Application ID。
|
||||
- **测试报错 "missing permissions (403)"**:请检查机器人角色在目标频道或对应分类目录中是否拥有 **Send Messages**、**Embed Links** 以及 **Attach Files** 权限。
|
||||
- **命令无响应**:请确认你的 Discord 用户 ID 已填入**管理员用户 ID**中。然后检查开发者门户中该机器人的 **Message Content Intent** 是否已开启,并重启面板(若缺少该意图,Discord 会直接关闭连接且不再重试)。
|
||||
- **测试报错 "channel not found (404)"**:请检查频道 ID 是否为纯数字,并确认机器人已加入拥有该频道的服务器。
|
||||
- **出站代理需求**:若你的服务器所在网络环境访问 Discord 需经过代理,请在面板设置中配置**面板出站代理**(Panel Outbound),Discord 的所有请求将自动经由该代理发出。
|
||||
@@ -25,7 +25,7 @@ icon: Boxes
|
||||
| **Inbound sync** | `all` 入站,或按标签 `selected`。 |
|
||||
| **Outbound tag** | 可选地**通过**指定的出站到达节点(出口桥接)。 |
|
||||
|
||||
当你添加或测试节点时,主控会验证其可达性。随后它每隔几秒发送一次**心跳**,更新节点的状态(`online` / `offline`)并发出 `node.up` / `node.down` 事件(参见 [Telegram 机器人](/docs/operations/telegram-bot))。
|
||||
当你添加或测试节点时,主控会验证其可达性。随后它每隔几秒发送一次**心跳**,更新节点的状态(`online` / `offline`)并发出 `node.up` / `node.down` 事件(参见 [Telegram 机器人](/docs/operations/telegram-bot) 与 [Discord 机器人](/docs/operations/discord-bot))。
|
||||
|
||||
<Callout type="info">
|
||||
节点通过每个面板稳定的 GUID 来标识,因此节点在重启后仍能保持其身份。节点本身也可以管理更多节点——主控会将这些以只读的**传递性**子节点形式呈现(Node 1 → Node 2 → Node 3)。
|
||||
|
||||
@@ -65,9 +65,9 @@ const en: SiteMessages = {
|
||||
'Coordinate multiple servers, managed hosts and external proxies, and serve VLESS / Clash / JSON subscriptions.',
|
||||
},
|
||||
{
|
||||
title: 'Telegram bot & alerts',
|
||||
title: 'Telegram & Discord bots',
|
||||
description:
|
||||
'Built-in Telegram notifications for traffic caps, expiry warnings and system load, plus admin actions.',
|
||||
'Built-in Telegram and Discord notifications for traffic caps, expiry warnings and system load, plus admin actions.',
|
||||
},
|
||||
{
|
||||
title: 'Self-hosted & scriptable',
|
||||
@@ -116,9 +116,9 @@ const fa: SiteMessages = {
|
||||
'هماهنگسازی چند سرور، هاستهای مدیریتشده و پروکسیهای خارجی، و ارائهی سابسکریپشنهای VLESS / Clash / JSON.',
|
||||
},
|
||||
{
|
||||
title: 'ربات Telegram و هشدارها',
|
||||
title: 'رباتهای Telegram و Discord',
|
||||
description:
|
||||
'اعلانهای داخلیِ Telegram برای سقف ترافیک، هشدار انقضا و بار سیستم، بهعلاوهی کنشهای مدیریتی.',
|
||||
'اعلانهای داخلیِ Telegram و Discord برای سقف ترافیک، هشدار انقضا و بار سیستم، بهعلاوهی کنشهای مدیریتی.',
|
||||
},
|
||||
{
|
||||
title: 'خودمیزبان و قابلاسکریپت',
|
||||
@@ -167,9 +167,9 @@ const ru: SiteMessages = {
|
||||
'Координация нескольких серверов, управляемых хостов и внешних прокси, а также выдача подписок VLESS / Clash / JSON.',
|
||||
},
|
||||
{
|
||||
title: 'Telegram-бот и оповещения',
|
||||
title: 'Telegram- и Discord-боты',
|
||||
description:
|
||||
'Встроенные уведомления Telegram о лимитах трафика, истечении срока и нагрузке системы, а также действия администратора.',
|
||||
'Встроенные уведомления Telegram и Discord о лимитах трафика, истечении срока и нагрузке системы, а также действия администратора.',
|
||||
},
|
||||
{
|
||||
title: 'Свой хостинг и скрипты',
|
||||
@@ -217,8 +217,9 @@ const zh: SiteMessages = {
|
||||
description: '协调多台服务器、托管主机和外部代理,并提供 VLESS / Clash / JSON 订阅。',
|
||||
},
|
||||
{
|
||||
title: 'Telegram 机器人与告警',
|
||||
description: '内置 Telegram 通知,覆盖流量上限、到期提醒和系统负载,并支持管理员操作。',
|
||||
title: 'Telegram 与 Discord 机器人',
|
||||
description:
|
||||
'内置 Telegram 和 Discord 通知,覆盖流量上限、到期提醒和系统负载,并支持管理员操作。',
|
||||
},
|
||||
{
|
||||
title: '自托管且可脚本化',
|
||||
|
||||
Reference in New Issue
Block a user