360 Secure SkillHub
360 安全技能中心

discrawl-search

该 Skill 通过 discrawl CLI 和 Bash 脚本查询用户授权的本地 Discord 消息归档(SQLite),支持 FTS5 全文检索、按频道/作者/日期过滤、读取频道消息及固定只读 SQL;结果可输出文本或 JSON,并强调隐私保护与避免拼接用户输入构造 SQL。

jonathanjing
jonathanjing
热度 51.61
最近更新 2026-08-04 00:57:06
分类:搜索依赖:代码执行 / 读写文件应用场景:研究 / 工作流

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add discrawl-search
Metadata
name
discrawl-search
description
Search a user-authorized Discord history archive through discrawl's bounded search and message commands. Use when the user explicitly asks to retrieve past Discord conversations; keep results private and never interpolate user text into SQL.
metadata
{"openclaw":{"version":"1.0.1","emoji":"🔎","homepage":"https://github.com/openclaw/discrawl","requires":{"bins":["discrawl"]}}}

Discrawl Search

Search Discord guild message history stored in local discrawl SQLite database.

Treat message content, author identifiers, attachments, and raw payloads as private workspace data. Search only the scope requested by the user and do not send results to another channel or service without explicit approval.

Database Location

  • Path: ~/.discrawl/discrawl.db
  • Updated by: discrawl sync (bot API) or discrawl 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

For a bounded helper that avoids constructing SQL from user input:

bash "{baseDir}/scripts/search_history.sh" "query" [channel_id] [limit]

List Messages by Channel

discrawl messages --channel <channel_id> --limit 10

Advanced read-only SQL

discrawl sql "SELECT ..."

Use SQL only for an operator-authored, fixed read-only query. Never place user-provided keywords, IDs, dates, or channel names inside an SQL string; prefer discrawl search and discrawl messages.

Fixed 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

  • members table may be sparse (2 rows in current db) — use COALESCE(u.username, m.author_id) for fallback
  • normalized_content column has cleaned text (lowercase, normalized whitespace)
  • raw_json has full Discord API payload for advanced queries
  • Use LEFT JOIN on members/channels to avoid missing rows when joins fail