Discrawl Search
v1.0.0Search Discord message history via discrawl SQLite database. Use when the user asks about past conversations, previous discussions, historical messages, or a...
Discrawl Search
Search Discord guild message history stored in local discrawl SQLite database.
Database Location
- Path:
~/.discrawl/discrawl.db - Updated by:
discrawl sync(bot API) ordiscrawl sync --source wiretap(Discord Desktop cache)
Quick Commands
Full-Text Search (FTS5)
Search message content with ranking:
discrawl search "query"
Options:
--limit N— max results (default: 20)--channel ID— filter by channel--author ID— filter by author--before "2026-04-01"— date filter--json— JSON output
List Messages by Channel
discrawl messages --channel <channel_id> --limit 10
Raw SQL Queries
discrawl sql "SELECT ..."
Common Query Patterns
Search with Context (Author + Channel Names)
SELECT
m.content,
m.created_at,
COALESCE(u.username, m.author_id) as author,
COALESCE(c.name, m.channel_id) as channel
FROM messages m
LEFT JOIN members u ON m.author_id = u.user_id
LEFT JOIN channels c ON m.channel_id = c.id
WHERE m.content LIKE '%keyword%'
ORDER BY m.created_at DESC
LIMIT 10;
Search Specific Channel History
SELECT content, created_at
FROM messages
WHERE channel_id = '<channel_id>'
AND content LIKE '%keyword%'
ORDER BY created_at DESC
LIMIT 20;
Find User's Past Messages
SELECT m.content, m.created_at, c.name
FROM messages m
JOIN channels c ON m.channel_id = c.id
WHERE m.author_id = '<user_id>'
ORDER BY m.created_at DESC
LIMIT 20;
Search with FTS5 (Best Relevance)
SELECT
m.content,
m.created_at,
fts.rank
FROM message_fts fts
JOIN messages m ON fts.message_id = m.id
WHERE message_fts MATCH 'keyword'
ORDER BY rank
LIMIT 20;
Recent Messages in Channel
SELECT content, created_at
FROM messages
WHERE channel_id = '<channel_id>'
ORDER BY created_at DESC
LIMIT 5;
Key Tables
| Table | Purpose |
|---|---|
messages | All messages (content, created_at, author_id, channel_id) |
channels | Channel metadata (name, topic, kind, guild_id) |
members | User info (username, global_name, nick) |
message_fts | FTS5 virtual table for full-text search |
mention_events | @mentions tracking |
message_attachments | File attachments with text extraction |
Important Notes
memberstable may be sparse (2 rows in current db) — useCOALESCE(u.username, m.author_id)for fallbacknormalized_contentcolumn has cleaned text (lowercase, normalized whitespace)raw_jsonhas full Discord API payload for advanced queries- Use
LEFT JOINon members/channels to avoid missing rows when joins fail
Version tags
discordhistorylatestsearch
