























11---
22name: discrawl
3-description: "Discord archive: search, sync freshness, DMs, channel slices, SQL counts, and Discrawl repo work."
3+description: "Discord archive: search, sync freshness, DMs, summaries, TUI, repo/release work."
44metadata:
55openclaw:
66homepage: https://github.com/openclaw/discrawl
@@ -16,29 +16,154 @@ metadata:
16161717# Discrawl
181819-Use local Discord archive data before live Discord APIs. Check freshness for recent/current questions:
19+Use local Discord archive data first for Discord questions. Hit Discord APIs
20+only when the archive is stale, missing the requested scope, or the user asks
21+for current external context.
22+23+## Sources
24+25+- DB: platform-native XDG data dir, usually
26+`${XDG_DATA_HOME:-~/.local/share}/discrawl/discrawl.db` on Linux or
27+`~/Library/Application Support/discrawl/discrawl.db` on macOS
28+- Config: platform-native XDG config dir, with legacy fallback to
29+`~/.discrawl/config.toml`
30+- Cache: platform-native XDG cache dir
31+- Logs: platform-native XDG state dir
32+- Git share repo: platform-native XDG data dir
33+- Repo: `openclaw/discrawl`; use `~/GIT/_Perso/discrawl` only after verifying
34+ its remote targets `openclaw/discrawl`, otherwise use a fresh checkout
35+- Preferred CLI: `discrawl`; fallback to `go run ./cmd/discrawl` from the repo
36+ if the installed binary is stale
37+38+## Freshness
39+40+For recent/current questions, check freshness before analysis:
20412142```bash
2243discrawl status --json
44+```
45+46+For precise freshness from the default database:
47+48+```bash
49+# Discrawl uses macOS ~/Library defaults unless XDG_DATA_HOME is explicitly set.
50+case "$(uname -s)" in
51+ Darwin)
52+ db="$HOME/Library/Application Support/discrawl/discrawl.db"
53+ ;;
54+*)
55+ db="${XDG_DATA_HOME:-$HOME/.local/share}/discrawl/discrawl.db"
56+ ;;
57+esac
58+sqlite3 "$db" \
59+"select coalesce(max(updated_at),'') from sync_state where scope like 'channel:%';"
60+```
61+62+Routine diagnostics:
63+64+```bash
2365discrawl doctor
2466```
256726-Refresh only when stale or asked:
68+Desktop-local refresh:
27692870```bash
2971discrawl sync --source wiretap
72+```
73+74+Bot API latest refresh, when credentials are available:
75+76+```bash
3077discrawl sync
3178```
327933-Query with bounded slices:
80+Use `--full` only for deliberate historical backfills:
81+82+```bash
83+discrawl sync --full
84+```
85+86+If SQLite reports busy/locked, check for stray `discrawl` processes before retrying.
87+88+## Query Workflow
89+90+1. Resolve scope: guild, channel, DM, author, keyword, date range.
91+2. Check freshness for recent/current requests.
92+3. Prefer CLI search/messages for slices; use read-only SQL for exact counts.
93+4. Report absolute date spans, counts, channel/DM names, and known gaps.
94+95+Use root or subcommand help for syntax: `discrawl --help`,
96+`discrawl help search`, `discrawl search --help`. Use
97+`DISCRAWL_NO_AUTO_UPDATE=1` for read smokes when you do not want git-share
98+updates.
99+100+Common commands:
3410135102```bash
36103DISCRAWL_NO_AUTO_UPDATE=1 discrawl search --limit 20 "query"
37104discrawl messages --channel '#maintainers' --days 7 --all
38105discrawl dms --last 20
106+discrawl tui --dm
39107DISCRAWL_NO_AUTO_UPDATE=1 discrawl --json sql "select count(*) from messages;"
40108```
4110942-Report absolute date spans, channel/DM names, counts, and known gaps. Use read-only SQL for exact counts/rankings. Never use `--unsafe --confirm` unless the user explicitly requests a reviewed DB mutation.
110+## SQL
111+112+Use `discrawl sql` for exact counts, joins, and ranking queries when normal
113+CLI reads are too coarse. The command is read-only by default, accepts SQL as
114+args or stdin, and supports `--json` for agent parsing.
115+116+Useful examples:
117+118+```bash
119+DISCRAWL_NO_AUTO_UPDATE=1 discrawl --json sql "select count(*) as messages from messages;"
120+DISCRAWL_NO_AUTO_UPDATE=1 discrawl --json sql "select coalesce(nullif(c.name, ''), m.channel_id) as channel, count(*) as messages from messages m left join channels c on c.id = m.channel_id group by m.channel_id order by messages desc limit 20;"
121+DISCRAWL_NO_AUTO_UPDATE=1 discrawl --json sql "select coalesce(nullif(mm.display_name, ''), nullif(mm.global_name, ''), nullif(mm.username, ''), m.author_id) as author, count(*) as messages from messages m left join members mm on mm.guild_id = m.guild_id and mm.user_id = m.author_id group by m.guild_id, m.author_id order by messages desc limit 20;"
122+```
123+124+Never use `--unsafe --confirm` unless the user explicitly asks for a database
125+mutation and the write has been reviewed.
126+127+When the installed CLI lacks a new feature, build or run from a verified
128+`openclaw/discrawl` checkout before concluding the feature is missing.
129+130+## Discord Boundaries
131+132+Bot API sync requires configured Discord bot credentials; do not invent token
133+availability. Desktop wiretap mode reads local Discord Desktop artifacts and
134+must not extract credentials, use user tokens, call Discord as the user, or
135+write to Discord application storage. Wiretap/Desktop cache DMs are local-only
136+and must not be described as part of the published Git snapshot. Git-share
137+snapshots must not include secrets or `@me` DM rows.
138+139+## Verification
140+141+For repo edits, prefer existing Go gates:
142+143+```bash
144+GOWORK=off go test ./...
145+```
146+147+Then run targeted CLI smoke for the touched surface, for example:
148+149+```bash
150+discrawl doctor
151+discrawl status --json
152+DISCRAWL_NO_AUTO_UPDATE=1 discrawl search --limit 5 "test"
153+```
154+155+## ClawSweeper Sandbox
156+157+Use the sandbox reader only:
158+159+```bash
160+discrawl-sandbox search --limit 20 "query"
161+discrawl-sandbox messages --channel clawtributors --days 7 --all
162+discrawl-sandbox status --json
163+```
4316444-Boundaries: bot sync needs configured Discord bot credentials. Wiretap reads local Discord Desktop artifacts only; do not extract user tokens, call Discord as the user, or write to Discord storage. Git-share snapshots must not include secrets or `@me` DM rows.
165+This reader imports `https://github.com/openclaw/discord-store.git` into
166+`/root/clawsweeper-sandbox-workspace/.discrawl/discrawl.db` with
167+`discord.token_source = "none"`. The published Git snapshot is public-channel
168+filtered; do not use `/root/.discrawl/config.toml` or the rich writer DB from
169+sandboxed public Discord sessions.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。