“Discord 的原生搜索功能不仅慢,而且经常遗漏关键信息。更重要的是,你无法对历史数据进行深度分析。”
"discrawl 的出现,就是为了让你的 Discord 服务器数据真正属于你——本地存储、本地索引、本地查询。”
discrawl 是一个用 Go 编写的高性能工具,它能将 Discord 公会(Server)的数据完整镜像到本地的 SQLite 数据库中。一旦数据落地,你就可以利用强大的 FTS5 全文搜索引擎 进行毫秒级文本检索,甚至直接使用 SQL 进行复杂的数据分析,而无需再依赖 Discord 那捉襟见肘的云端搜索。
🚀 核心特性:为什么你需要 discrawl?
1. 🗄️ 本地化数据主权
- 完全离线可用:所有频道、子区、成员、消息历史均同步至本地
discrawl.db。即使断网,也能随时查阅历史记录。 - 隐私安全:数据仅存储在你的机器上,不经过任何第三方云服务。
- 正规协议:基于 Bot Token 运行,完全符合 Discord API 规范,绝不使用 高风险的用户 Token Hack 手段,账号安全有保障。
2. ⚡ 极速全文搜索 (FTS5)
- 毫秒级响应:内置 SQLite FTS5 索引,搜索千万级消息也只需瞬间。
- 智能提取:不仅搜索消息文本,还能提取并索引 小文本类附件、嵌入内容 (Embeds) 和 回复引用。
- 结构化查询:支持按作者、频道、时间范围、提及对象(用户/角色)进行组合筛选。
3. 🔄 实时同步与自愈
- Gateway 监听:运行
tail模式后,工具会监听 Discord Gateway 事件,新消息实时入库。 - 定期修复:内置周期性修复循环,自动补全因网络波动丢失的数据块,确保数据完整性。
4. 🔌 OpenClaw 生态无缝集成
- 配置复用:如果你已经在使用 OpenClaw,discrawl 可以直接读取
~/.openclaw/openclaw.json中的 Discord 配置,无需重复设置 Token。 - 多公会支持:架构设计原生支持多公会镜像,同时保留简单的单公会默认体验。
🛠️ 快速开始:5 分钟构建本地知识库
前置条件
- Go 1.26+ (用于源码编译) 或 Homebrew (macOS/Linux)
- Discord 机器人 Token (需开启
Server Members Intent和Message Content Intent)
第一步:安装
源码编译:
git clone https://github.com/steipete/discrawl.git
cd discrawl
go build -o bin/discrawl ./cmd/discrawl
Homebrew 安装:
brew tap steipete/tap
brew install steipete/tap/discrawl
第二步:配置与初始化
方案 A:复用 OpenClaw 配置 (推荐)
如果你已配置过 OpenClaw,只需一行命令:
bin/discrawl init --from-openclaw ~/.openclaw/openclaw.json
方案 B:纯环境变量设置
export DISCORD_BOT_TOKEN="你的机器人令牌"
bin/discrawl init
init 命令会自动发现机器人可访问的公会,并生成 ~/.discrawl/config.toml。
第三步:健康检查与全量同步
# 检查配置、Token 权限及数据库连接
bin/discrawl doctor
# 开始全量同步 (多线程并行,自动调整并发数)
bin/discrawl sync --full
第四步:实时监听 (可选)
让工具在后台运行,实时捕获新消息:
bin/discrawl tail
# 或指定每 30 分钟进行一次修复性同步
bin/discrawl tail --repair-every 30m
💡 实战用法:像黑客一样查询数据
1. 全文搜索 (Search)
# 基础搜索
bin/discrawl search "panic: nil pointer"
# 组合筛选:在 #billing 频道,搜索 steipete 发送的包含 "invoice" 的消息
bin/discrawl search --channel billing --author steipete "invoice"
# 输出 JSON 格式,方便脚本处理
bin/discrawl --json search "websocket closed"
2. 消息列表 (Messages)
# 查看 #maintainers 频道过去 7 天的所有消息
bin/discrawl messages --channel maintainers --days 7 --all
# 查看某用户最近 50 条消息
bin/discrawl messages --channel maintainers --author steipete --limit 50
# 强制先同步最新数据再查询
bin/discrawl messages --channel maintainers --last 100 --sync
3. 提及分析 (Mentions)
# 查找过去 7 天内所有提及 @steipete 的消息
bin/discrawl mentions --target steipete --type user --days 7
# 查找所有提及 @Admin 角色的消息
bin/discrawl mentions --target Admin --type role
4. 直接 SQL 查询 (Advanced)
这是 discrawl 最强大的功能。你可以直接对本地数据库执行任意只读 SQL:
# 统计总消息数
bin/discrawl sql 'select count(*) as messages from messages'
# 按公会统计消息分布
echo 'select guild_id, count(*) from messages group by guild_id' | bin/discrawl sql -
# 找出最活跃的前 10 个用户
bin/discrawl sql 'select author_id, count(*) as cnt from messages group by author_id order by cnt desc limit 10'
5. 成员与频道管理
# 搜索成员 (支持模糊匹配名称及离线资料)
bin/discrawl members search "peter"
# 查看频道列表
bin/discrawl channels list
🔒 安全与权限说明
discrawl 严格遵循最小权限原则,但为了完整功能,你的机器人需要以下权限:
- 意图 (Intents):
SERVER MEMBERS INTENT(用于同步成员列表)MESSAGE CONTENT INTENT(用于读取消息内容)
- 频道权限:
View ChannelsRead Message History
注意:如果没有这些权限,同步将不完整或失败。请在 Discord Developer Portal 中仔细配置。
📊 数据存储结构
默认情况下,discrawl 将所有数据存储在用户主目录下:
- 配置:
~/.discrawl/config.toml - 数据库:
~/.discrawl/discrawl.db(SQLite + FTS5) - 缓存:
~/.discrawl/cache/ - 日志:
~/.discrawl/logs/
这种结构清晰、独立,便于备份和迁移。















