gl0bal01/discord-osint-assistant
GitHub: gl0bal01/discord-osint-assistant
一个基于 Discord 的自托管开源情报收集与分析机器人,通过标准化的 slash 命令将多源数据调查工具整合进统一的协作接口。
Stars: 5 | Forks: 0
# Discord OSINT 助手
[](https://github.com/gl0bal01/discord-osint-assistant/actions/workflows/ci.yml)
[](LICENSE)
[](https://doi.org/10.5281/zenodo.15741849)
Discord OSINT Assistant 是一个自托管的 Discord 情报机器人,专为开源情报 (OSINT) 调查设计。它将 32 种调查工作流转化为 Discord slash 命令,用于侦察、归属分析、数据富集和综合分析。
## 两分钟速览
```
git clone https://github.com/gl0bal01/discord-osint-assistant.git
cd discord-osint-assistant
bun install # or: npm install
cp .env.example .env # set DISCORD_TOKEN and CLIENT_ID
bun run deploy
bun run start
```
## 为什么开发这个项目
- 为在 Discord 中工作的团队标准化 OSINT 工作流
- 减少调查人员和分析师的设置开销
- 将操作控制(验证、权限、速率限制)与命令执行紧密结合
- 在统一的命令接口背后集成基于 API 和基于 CLI 的数据源
## 功能特性
- 跨越身份、网络、媒体、区块链、交通、商业、分析和运营工作流的 31 个 slash 命令
- `/bob-chat` 支持多模型聊天、代码生成、OSINT 分析和语音转文本转录
- 可选集成第三方 API 和本地外部工具
- 针对进程执行和 URL 处理的聚焦安全的 runtime 控件
- 支持 container 化部署及 CI 验证
## 架构
```
flowchart LR
U[Discord User] --> S[Slash Command]
S --> B[Bot Command Handler]
B --> V[Input Validation and Permission Gate]
V --> A[API Integrations]
V --> C[External CLI Tools]
A --> F[Normalized Output]
C --> F
F --> R[Discord Response]
```
## 命令目录
该机器人目前提供涵盖 8 个功能领域的 32 个命令。在 Discord 中运行 `/bob-help` 可以实时列出所有命令及其描述。
### 身份与社交
`/bob-sherlock`, `/bob-maigret`, `/bob-linkook`, `/bob-ghunt`, `/bob-generate-usernames`, `/bob-nuclei`
### 域名与网络
`/bob-dns`, `/bob-whoxy`, `/bob-hostio`, `/bob-recon-web`, `/bob-redirect-chain`, `/bob-favicons`
### 图像与媒体
`/bob-exif`, `/bob-rekognition`
### 区块链
`/bob-blockchain`, `/bob-blockchain-detect`
### 交通
`/bob-aviation`, `/bob-airport`, `/bob-flight-number`, `/bob-vessels`
### 商业情报
`/bob-pappers`, `/bob-vpic`, `/bob-nike`
### 分析
`/bob-chat`, `/bob-jwt`, `/bob-xeuledoc`, `/bob-extract-links`, `/bob-dork`
### `/bob-chat` 子命令
#### `ask`
支持可选上下文预设的通用 AI 助手。
| 参数 | 必填 | 描述 |
|-----------|----------|-------------|
| `message` | **是** | 你的问题或请求(最多 2000 字符) |
| `model` | 否 | `qwen3-vl-flash` (默认), `gpt-5.4-mini`, `sonar-reasoning-pro`, `grok-4-fast-reasoning` |
| `context` | 否 | `general` (默认), `osint`, `data`, `investigation`, `technical`, `report` |
**示例**
```
/bob-chat ask message:"Analyze this breach data for patterns" model:sonar-reasoning-pro context:osint
```
#### `code`
生成用于 OSINT 自动化和数据分析的代码。
| 参数 | 必填 | 描述 |
|--------------|----------|-------------|
| `request` | **是** | 描述你需要的代码(最多 2000 字符) |
| `language` | 否 | `python` (默认), `javascript`, `bash`, `powershell`, `sql`, `other` |
| `model` | 否 | `qwen3-coder-plus` (默认), `claude-sonnet-4-6`, `gemini-3.1-pro-preview`, `gpt-5.4`, `grok-code-fast-1` |
| `new-context`| 否 | 开始新的代码对话(默认为 `false`) |
**示例**
```
/bob-chat code request:"Script that fetches subdomains from crt.sh" language:python model:qwen3-coder-plus
```
#### `analyze`
对发现或原始数据进行结构化的 OSINT 分析。
| 参数 | 必填 | 描述 |
|-----------------|----------|-------------|
| `data` | **是** | 要分析的数据或发现(最多 2000 字符) |
| `analysis-type` | 否 | `summary` (默认), `pattern`, `threat`, `link`, `timeline`, `risk` |
**示例**
```
/bob-chat analyze data:"IP 198.51.100.5 contacted our honeypot 42 times using user-agent 'Mozilla/5.0 CustomBot'" analysis-type:threat
```
**分析类型**
- `pattern` – 模式识别和异常检测
- `threat` – 威胁评估和安全影响
- `link` – 关系和连接映射
- `timeline` – 基于事件的时间线重建
- `risk` – 风险评估
- `summary` – 高层级摘要和关键洞察
#### `transcribe`
通过 1min.ai 音频模型进行语音转文本。
| 参数 | 必填 | 描述 |
|--------------|----------|-------------|
| `audio-url` | **是** | 由 1min.ai Asset API 返回的资源路径 (例如 `fileContent.path`) |
| `stt-model` | 否 | `qwen3-asr-flash` (默认) 或 `phone_call` |
| `language` | *条件性* | 使用 `phone_call` 时**必填** (BCP-47 格式,例如 `en-US`, `vi-VN`, `zh-CN`)。对 `qwen3-asr-flash` 为可选 (例如 `en`, `zh`, `ja`;省略时自动检测) |
| `enable-itn` | 否 | 仅限 Qwen3:启用逆向文本标准化 (默认为 `false`) |
**转录工作流**
1. 将你的音频文件上传到 1min.ai Asset API (`POST /api/assets`)。
2. 复制返回的资源路径 (通常在 `fileContent.path` 中)。
3. 使用该路径运行 slash 命令。
**示例 – Qwen3 ASR Flash (自动检测语言)**
```
/bob-chat transcribe audio-url:"https://cdn.1min.ai/.../recording.wav"
```
**示例 – Qwen3 ASR Flash (指定语言 + ITN)**
```
/bob-chat transcribe audio-url:"https://cdn.1min.ai/.../recording.wav" language:en enable-itn:true
```
**示例 – Phone Call 模型**
```
/bob-chat transcribe audio-url:"https://cdn.1min.ai/.../call.wav" stt-model:phone_call language:en-US
```
#### `reset`
清除对话上下文,以便下一次交互重新开始。
| 参数 | 必填 | 描述 |
|-----------|----------|-------------|
| `model` | 否 | `all` (默认), `chat`, `code`, `analysis` |
**示例**
```
/bob-chat reset model:code
```
### 运维操作
`/bob-monitor`, `/bob-health`, `/bob-upload`, `/bob-help`
### `/bob-upload`
将 Discord 附件上传到 1min.ai Asset API,以便 AI 功能(例如 `/bob-chat transcribe`)可以引用它。
| 参数 | 必填 | 描述 |
|-----------|----------|-------------|
| `file` | **是** | 要上传的文件(最大 50 MB) |
**支持的文件类型**
- 图像:PNG, JPEG, WEBP, GIF, SVG
- 文档:PDF, DOC, DOCX, TXT
- 数据:JSON, CSV, XML
- 音频:WAV, MP3, OGG, M4A (用于转录)
**示例**
```
/bob-upload file:
```
**响应字段**
- **Asset Path** (`fileContent.path`) — 你在 `/bob-chat transcribe` 中传递给 `audio-url` 的值
- **UUID** — 上传资源的唯一标识符
- **Direct URL** — 完整的 S3 位置 (需要身份验证)
**转录工作流**
1. 运行 `/bob-upload` 并附加你的音频文件。
2. 从响应中复制 **Asset Path**。
3. 运行 `/bob-chat transcribe audio-url:`。
### `/bob-ghunt` 身份验证
GHunt 需要有效的 Google 会话才能执行查询。该机器人可以检测登录状态,并直接从 Discord 接受新的凭据。
| 操作 | 参数 | 描述 |
|-----------|-----------|-------------|
| `type:check-login` | — | 验证 GHunt 凭据是否存在且有效 |
| `type:login` | `query` 或 `token` | 从 GHunt Companion 保存新的 base64 token |
| `type:email` | `query` | 查询电子邮件地址 |
| `type:gaia` | `query` | 查询 Gaia ID |
| `type:drive` | `query` | 分析 Google Drive 文件/文件夹 URL |
| `type:geolocate` | `query` | 对 BSSID 进行地理定位 (`XX:XX:XX:XX:XX:XX`) |
| `type:spiderdal` | `query` | 使用 Digital Asset Links 查找资产 |
**如何进行身份验证**
1. 安装 [GHunt Companion](https://github.com/mxrch/GHunt/tree/master/gc-assets) 浏览器扩展 (Firefox 或 Chrome)。
2. 在浏览器中登录你的 Google 账号。
3. 点击扩展图标并复制 base64 字符串。
4. 运行登录命令:
/bob-ghunt type:login query:
**检查你的会话**
```
/bob-ghunt type:check-login
```
**执行查询**
```
/bob-ghunt type:email query:target@gmail.com
```
**环境变量**
- `GHUNT_CREDS_PATH` — 凭据文件的自定义路径 (默认: `~/.malfrats/ghunt/creds.m`)
## 前置条件
- Node.js 20+
- Discord 机器人应用和 token
- Bun (可选)
- Docker (可选)
## 安装说明
请参阅[两分钟速览](#in-two-minutes)下统一的克隆/安装/部署/启动代码片段。推荐使用 Bun;`npm` 也可用于运行所有脚本。
### Docker
```
cp .env.example .env
docker compose up -d # or: make up
```
## 配置
将 `.env.example` 复制到 `.env` 并至少配置以下内容:
- `DISCORD_TOKEN`
- `CLIENT_ID`
可选集成可解锁更多命令:
- API 服务,如 Whoxy, DNSDumpster, Host.io, AviationStack 和 AWS Rekognition
- 外部 CLI 工具,如 Sherlock, Maigret, Nuclei, ExifTool, GHunt, xeuledoc, Linkook 和 jwt_tool
如果缺少可选依赖项,相关命令将返回描述性的 runtime 错误。
## 日志记录
该机器人使用 [pino](https://getpino.io/) 进行结构化的 JSON 日志记录。
| 变量 | 默认值 | 接受的值 |
|-------------|---------|------------------------------------------|
| `LOG_LEVEL` | `info` | `trace`, `debug`, `info`, `warn`, `error`, `fatal` |
在开发环境中(非生产环境且为交互式 TTY 时),日志会通过 `pino-pretty` 进行美化输出。在生产环境中,原始 JSON 会写入到 stdout,供日志聚合器提取。
敏感字段(`token`, `authorization`, `password`, `api_key`, `headers.authorization`, `headers.cookie`)在输出前会自动脱敏为 `[REDACTED]`。
## 安全性
该项目针对用户提供的输入执行调查,并默认应用防御性控制。
- 使用受限制的子进程环境进行参数数组进程执行
- 对支持 URL 的命令提供 SSRF 保护
- 用于用户名、域名、URL、电子邮件和 IP 地址的集中验证器
- 对高影响命令进行权限门控
- 每用户速率限制和每日使用量控制
详情请参阅 [SECURITY.md](SECURITY.md)。
## 开发说明
```
bun run dev # nodemon hot-reload
bun run test # vitest
bun run lint # eslint
bun run smoke # quick boot/health probe
```
Slash 命令注册(`deploy`, `deploy:global`, `clear`, `clear:global`, `clear:all`, `clear:list`)及其他脚本位于 `package.json` 中。运行不带参数的 `bun run` 即可查看所有内容。
贡献指南可在 [CONTRIBUTING.md](CONTRIBUTING.md) 中找到。
## 部署
该机器人在遇到 `uncaughtException` 或 `unhandledRejection` 时会以退出代码 1 退出,因此必须在能够在失败时重新启动的监督程序下运行。`Makefile` 封装了两种支持的运行方式。
### systemd (推荐)
仓库在 `deploy/discord-osint-assistant.service` 中提供了一个单元文件,配置了 `Restart=always` 和完整的沙箱环境。
```
make install # creates botuser, copies repo to /opt, installs unit, enables service
make restart # restart after code update
make update # git pull + bun install + restart
make logs-tail # follow journald
```
使用 `make INSTALL_DIR=/srv/bot install` 覆盖安装路径。运行 `make help` 列出所有可用目标。
### Docker Compose
```
make up # build + start (or: docker compose up -d --build)
make dlogs # follow logs
make dhealth # show healthcheck state
make down # stop and remove
```
容器以只读方式运行,配置了 `cap_drop: ALL`,为 `/app/temp` 提供了 tmpfs,并内置了健康检查 (`scripts/healthcheck.js`)。
不支持 PM2 — 它需要可写的 `~/.pm2` 目录,这与强化后的 `read_only` 容器以及 systemd 的 `ProtectHome=true` 配置相冲突。
## 许可证
MIT。详情请参阅 [LICENSE](LICENSE)。
标签:Discord机器人, GNU通用公共许可证, MITM代理, Node.js, 代码示例, 实时处理, 数据分析, 数据泄露, 网络调试, 自动化, 自定义脚本, 请求拦截