pXDP/yarix-bot

GitHub: pXDP/yarix-bot

一款由 YARA 规则、反垃圾机制、蜜罐频道和 OCR 图像分析驱动的独立 Discord 自动审核机器人。

Stars: 10 | Forks: 0

Yarix banner

Yarix logo

Yarix

由原生 YARA 规则、Anti-Spam、Honeypot 和 OCR 驱动的 Discord 审核。

Python 3.11+ MIT License Windows and Linux SQLite

## 概述 - [功能](#features) - [环境要求](#requirements) - [安装说明](#installation) - [配置说明](#configuration) - [Discord 设置](#discord-setup) - [规则模式](#rule-modes) - [OCR 流程](#ocr-flow) - [Honeypot](#honeypot) - [项目结构](#project-structure) - [开发指南](#development) - [故障排除](#troubleshooting) - [安全指南](#security-guide) ## 功能 - 基于原生 YARA 的消息检测 - 针对操作和审核阶段的逐规则配置 - 用于检测重复相同消息行为的 Anti-Spam 门控机制 - 针对重复图片活动的、由 OCR 支持的高级分析 - 具备 timeout、ban 或 quarantine 功能的 Honeypot 诱捕频道 - 豁免角色 - 成员审核概览 - quarantine 解除命令 - 基于Components V2 的审核面板和 embeds - 带有 schema 引导和迁移的 SQLite 数据库 - 可读或结构化的运行时日志 ## 环境要求 支持的平台: - Windows - Linux,包括 Debian 和 Ubuntu Python: - Python `3.11` 或更高版本 主要依赖项: - `discord.py` - `yara-python` - `rapidocr-onnxruntime` - `Pillow` - `aiosqlite` - `structlog` - `pydantic` - `pydantic-settings` - `python-dotenv` 可选开发工具: - `pytest` - `pytest-asyncio` - `ruff` ## 安装说明 ### 1. 创建虚拟环境 Windows PowerShell: ``` py -3.12 -m venv .venv .\.venv\Scripts\Activate.ps1 ``` Linux: ``` python3.12 -m venv .venv source .venv/bin/activate ``` 如果 `3.12` 不可用,只要您安装的 Python 版本为 `3.11+` 即可使用。 ### 2. 安装 Yarix ``` python -m pip install --upgrade pip python -m pip install -e . ``` 安装开发工具: ``` python -m pip install -e .[dev] ``` ### 3. 准备配置 将 `.env.example` 复制到 `.env`。 必需项: ``` YARIX_DISCORD_TOKEN=your_bot_token ``` 推荐测试项: ``` YARIX_COMMAND_GUILD_ID=your_test_server_id ``` ### 4. 启动机器人 ``` python -m yarix ``` 预期的启动过程会包含类似这样的一行: ``` Connected to Discord as Yarix#8123 (application_id=...) ``` ## 配置说明 Yarix 从 `.env` 读取运行时配置。 核心键值: ``` YARIX_DISCORD_TOKEN= YARIX_APPLICATION_ID= YARIX_COMMAND_GUILD_ID= YARIX_DATABASE_PATH=data/yarix.sqlite3 YARIX_RUNTIME_LOG_PATH=data/logs/yarix.log YARIX_LOG_LEVEL=INFO YARIX_MODERATION_CONSOLE_LOG_MODE=complex ``` ### 日志 ``` YARIX_LOG_LEVEL=INFO YARIX_MODERATION_CONSOLE_LOG_MODE=complex YARIX_RUNTIME_LOG_PATH=data/logs/yarix.log ``` `YARIX_LOG_LEVEL` 控制常规应用程序日志记录。 可用值: - `INFO` - `WARNING` - `ERROR` `YARIX_MODERATION_CONSOLE_LOG_MODE` 控制审核流程的控制台输出。 可用值: - `off` - `simple` - `complex` `simple` 通常是日常使用的最佳选择。 `simple` 输出示例: ``` [01:53:11.409 28.06.2026] Queue: OCR job queued (1 waiting) [01:53:11.409 28.06.2026] Dispatcher: selected worker 0 (1 queued) [01:53:11.409 28.06.2026] Worker 0: accepted queued OCR job [01:53:11.637 28.06.2026] Worker 0: started OCR for 4 grouped messages ``` `YARIX_COMMAND_GUILD_ID` 仅在开发或受控部署期间作为 slash commands 的快速同步目标。它不控制审核范围或 OCR 容量。 ### 检测模式和受支持的文件 ``` YARIX_URL_DETECTION_PATTERN=https?:// YARIX_INVITE_DETECTION_PATTERN=(?:https?://)?(?:www\.)?(?:discord\.gg|discord(?:app)?\.com/invite)/[A-Za-z0-9-]+ YARIX_SUPPORTED_IMAGE_MIME_PREFIXES=image/ YARIX_SUPPORTED_IMAGE_EXTENSIONS=.png,.jpg,.jpeg,.gif,.webp,.bmp YARIX_SUPPORTED_VIDEO_EXTENSIONS=.mp4,.mov,.webm,.avi,.mkv YARIX_SUPPORTED_ARCHIVE_EXTENSIONS=.zip,.rar,.7z,.tar,.gz ``` ### OCR worker 和后端限制 ``` YARIX_OCR_GLOBAL_MAX_WORKERS=2 YARIX_OCR_PER_GUILD_MAX_WORKERS=1 YARIX_OCR_MAX_ATTACHMENT_TIMEOUTS_PER_JOB=1 YARIX_OCR_INTRA_OP_THREADS=2 YARIX_OCR_INTER_OP_THREADS=1 ``` 含义: - `YARIX_OCR_GLOBAL_MAX_WORKERS` 整个 bot 进程的总 OCR 任务并发数 - `YARIX_OCR_PER_GUILD_MAX_WORKERS` 单个 Discord guild 的 OCR 并发上限 - `YARIX_OCR_MAX_ATTACHMENT_TIMEOUTS_PER_JOB` 在达到这么多次单附件超时后,中止该 OCR cluster - `YARIX_OCR_INTRA_OP_THREADS` 单个 OCR runtime 可用于单次操作的 CPU 量 - `YARIX_OCR_INTER_OP_THREADS` 单个 OCR runtime 可使用的内部 OCR 并行度 推荐的 CPU OCR 起始配置: ``` YARIX_OCR_GLOBAL_MAX_WORKERS=2 YARIX_OCR_PER_GUILD_MAX_WORKERS=1 YARIX_OCR_MAX_ATTACHMENT_TIMEOUTS_PER_JOB=1 YARIX_OCR_INTRA_OP_THREADS=2 YARIX_OCR_INTER_OP_THREADS=1 ``` 调优指南: - 除非基准测试另有证明,否则保持 `INTER=1` - 在提高 `INTER` 之前先提高 `INTRA` - 在假定 OCR 需要更多并行度之前,先减少 worker 数量 ### Emoji 配置 Yarix 通过 `.env` 支持自定义 emoji 引用。 ``` YARIX_EMOJI_PIN=<:pin:...> YARIX_EMOJI_TIMEOUT=<:timeout:...> YARIX_EMOJI_TRASH=<:trash:...> YARIX_EMOJI_LIST=<:list:...> YARIX_EMOJI_INFO=<:info:...> YARIX_EMOJI_BAN=<:ban:...> YARIX_EMOJI_SETTINGS=<:settings:...> YARIX_EMOJI_ALERT=<:alert:...> YARIX_EMOJI_HONEY=<:honey:...> ``` 如果未配置自定义 emoji,Yarix 将回退到 `config.py` 中的默认值。 ## 首次启动行为 首次运行时,Yarix 将: - 如果 SQLite 数据库不存在,则创建它 - 创建缺失的表 - 运行迁移 - 同步 slash commands 您无需手动创建数据库。 ## Discord 设置 推荐的首次运行流程: 1. 打开 `/automod panel` 2. 配置日志频道 3. 如果需要,配置豁免角色 4. 如果需要诱捕频道审核,配置 Honeypot 5. 打开 `/rules panel` 6. 导入您的 YARA 规则 7. 配置或确认每个规则的模式和操作 主要命令: - `/automod panel` - `/rules panel` - `/rules import-file` - `/view` - `/quarantine-lift` ### OAuth scopes 生成邀请 URL 时请使用这些 scope: - `bot` - `applications.commands` ### Bot 权限 推荐的基础权限: - `View Channels` - `Send Messages` - `Embed Links` - `Attach Files` - `Read Message History` - `Manage Messages` 使用特定功能时所需: - `Moderate Members` 规则、Anti-Spam 和 Honeypot 执行 timeout 所需。 - `Ban Members` 如果 Honeypot 或某个规则需要 ban 用户时所需。 - `Manage Roles` 分配 quarantine 角色、创建 quarantine 角色以及解除 quarantine 所需。 - `Mention Everyone` 非必需。保持禁用。 - `Administrator` 非必需。除非您有意授予完全信任,否则请勿授予此权限。 实用建议: - 将 Yarix 的角色置于它可以 timeout 或分配 quarantine 的角色之上。 - 如果您使用托管的 quarantine 角色,也请将 Yarix 置于该角色之上。 - 如果日志或 Honeypot 操作不起作用,请首先检查频道覆盖权限和角色层级。 ## 规则模式 ### Immediate 匹配消息并立即采取行动。 ### Anti-Spam 仅在检测到重复的相同消息行为后才采取行动。 ### Advanced Signal 不直接进行处罚。它为可疑的重复图片活动贡献 OCR 风险。 ### Advanced Detect 在高级分析已经开始后,基于 OCR 输出运行。 ## OCR 流程 Yarix 的 OCR pipeline 工作原理如下: 1. 首先运行常规消息处理 2. Immediate 规则可能会立即采取行动 3. Anti-Spam 可能会在检测到重复相同消息行为时触发 4. Advanced signal 规则会增加可疑重复图片活动的风险 5. 成熟的可疑候选对象会根据基于内容的候选键被分组到 OCR 任务中 6. OCR 任务被放入 guild OCR 队列 7. 分配器将排队的任务分配给空闲的 worker 插槽 8. OCR 扫描该任务内受支持的图像 9. OCR 文本被送入 advanced-detect YARA 规则 10. 匹配的 OCR-detect 规则应用操作 重要注意事项: - OCR 使用 `rapidocr-onnxruntime` - OCR 超时通过 Discord AutoMod 面板配置 - worker 和后端线程限制来自 `.env` - 一个 OCR 任务按顺序扫描其自身的图像 - 来自同一用户的不同可疑图像集将成为独立的 OCR 任务 - 相同的可疑内容被分组到一个 OCR 任务中 - 如果某个 cluster 达到了配置的附件超时限制,Yarix 将中止该 cluster 的其余部分 ### OCR 调优 推荐的调优顺序: 1. 保持保守的 worker 数量 2. 如果较重的图像确实太慢,则增加 OCR 超时时间 3. 如果单个 OCR worker 需要更多 CPU,则增加 `INTRA` 4. 仅在已知稳定路径后才对 `INTER > 1` 进行基准测试 ## Honeypot Honeypot 系统是一个诱捕频道。 当用户在配置的 Honeypot 频道中发帖时,Yarix 可以: - 删除 Honeypot 消息 - 删除同一用户在其他频道中的匹配消息 - 应用配置的处罚 - 如果可能,发送 DM 通知 - 记录事件 可用的 Honeypot 操作: - timeout - ban - quarantine 角色 如果使用 `quarantine`,Yarix 可以: - 使用现有角色 - 创建托管的 quarantine 角色 - 为被 quarantine 的用户保留一个可见的申诉频道 ## 数据库 默认数据库路径: ``` data/yarix.sqlite3 ``` 相关文件: - [src/yarix/db/schema.sql](src/yarix/db/schema.sql) - [src/yarix/db/migrations.py](src/yarix/db/migrations.py) - [src/yarix/db/repository.py](src/yarix/db/repository.py) ## 运行时日志 Yarix 写入: - 将常规应用程序输出写入控制台 - 将运行时控制台输出写入配置的日志文件路径 默认运行时日志文件: ``` data/logs/yarix.log ``` ## 项目结构 重要文件和文件夹: - [src/yarix/bot.py](src/yarix/bot.py) - bot 启动和 Discord 事件流程 - [src/yarix/cogs/admin.py](src/yarix/cogs/admin.py) - 面板和 slash commands - [src/yarix/moderation.py](src/yarix/moderation.py) - 审核 pipeline 和操作流程 - [src/yarix/components_v2.py](src/yarix/components_v2.py) - Components V2 布局 - [src/yarix/ocr_engine.py](src/yarix/ocr_engine.py) - OCR 封装 - [src/yarix/pipeline.py](src/yarix/pipeline.py) - 附件分析 pipeline - [src/yarix/yara_engine.py](src/yarix/yara_engine.py) - YARA 验证和匹配 - [examples](examples) - 示例资源、图像和捆绑的规则引用 ## 开发指南 运行测试: ``` pytest ``` 使用 Ruff 进行 Lint: ``` ruff check . ``` ## 最简设置检查清单 1. 安装 Python `3.11+` 2. 创建并激活 `.venv` 3. 运行 `python -m pip install -e .` 4. 将 `.env.example` 复制到 `.env` 5. 设置 `YARIX_DISCORD_TOKEN` 6. 使用 `python -m yarix` 启动 bot 7. 打开 `/automod panel` 8. 设置日志频道 9. 打开 `/rules import-file` 或 `/rules panel` 10. 导入并配置您的规则 ## 故障排除 ### `python -m yarix` 提示 `No module named yarix` 项目未安装到活动的虚拟环境中。 运行: ``` python -m pip install -e . ``` ### OCR 超时 配置的 OCR 超时时间对于机器或图像批次来说太短。 从高级分析面板增加 OCR 超时时间,然后重试。 ### 命令未出现 请确保: - bot 正在运行 - slash commands 在启动时成功同步 - `YARIX_COMMAND_GUILD_ID` 已正确设置为测试 guild 同步 ### 数据库不存在 这在全新安装时是正常的。Yarix 会在首次启动时自动创建它。 ## 安全指南 有关 Yarix 特定的 YARA 规则设计、受支持的外部变量、import 预设和规则编写指南,请参阅 [SECURITY.md](SECURITY.md)。
标签:Discord机器人, DNS信息、DNS暴力破解, OCR图文识别, Python, SQLite, YARA规则, 内容审核, 反垃圾, 无后门, 逆向工具