- Added functions to retrieve message location, sticker metadata, and display content in messageCapture.ts. - Updated captureMessage function to store thread information and sticker metadata in the database. - Modified messageStore.ts to support querying messages and attachments by thread ID. - Updated types.ts to include thread_id in AttachmentRecord. - Altered database schema in muxer-queue.ts to add thread_id column to attachments. - Introduced ChannelSummary interface and listWatchableChannels method in voiceController.ts to fetch watchable channels. - Added API endpoint in webserver.ts to retrieve channels for a given guild.
65 lines
2.6 KiB
Markdown
65 lines
2.6 KiB
Markdown
# Backlog Sync Rich Metadata Implementation Plan
|
|
|
|
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
|
|
**Goal:** Fetch prior Discord messages up to 24 hours on startup, persist rich Discord-client-like metadata, and render rich message content in homepage tabs.
|
|
|
|
**Architecture:** Add `messageMetadata.ts` for reusable extraction, `backlogSync.ts` for bounded startup history fetch, reuse existing store/uploader. UI reads metadata JSON and renders stickers, embeds, attachments/replies/thread badges.
|
|
|
|
**Tech Stack:** Bun, TypeScript, discord.js-selfbot-v13, bun:sqlite, Express/WebSocket, vanilla HTML/CSS/JS.
|
|
|
|
---
|
|
|
|
### Task 1: Extract rich message metadata
|
|
|
|
**Files:**
|
|
- Create: `src/moderation/messageMetadata.ts`
|
|
- Modify: `src/moderation/messageCapture.ts`
|
|
|
|
- [ ] Create helper functions: `getMessageLocation`, `getStickerMetadata`, `getEmbedMetadata`, `getAttachmentMetadata`, `getMessageMetadata`, `getDisplayContent`.
|
|
- [ ] Replace duplicate capture helper logic with imports from `messageMetadata.ts`.
|
|
- [ ] Verify: `bun run typecheck`.
|
|
|
|
### Task 2: Make message inserts idempotent
|
|
|
|
**Files:**
|
|
- Modify: `src/moderation/messageStore.ts`
|
|
|
|
- [ ] Change message insert to `INSERT OR IGNORE` so backlog sync and live events do not conflict.
|
|
- [ ] Change attachment insert to `INSERT OR IGNORE`.
|
|
- [ ] Verify: `bun run typecheck && bun run test`.
|
|
|
|
### Task 3: Add backlog sync
|
|
|
|
**Files:**
|
|
- Create: `src/moderation/backlogSync.ts`
|
|
- Modify: `src/index.ts`
|
|
- Modify: `src/config.ts`
|
|
- Modify: `.env.example`
|
|
|
|
- [ ] Add config: `BACKLOG_SYNC_HOURS=24`, `BACKLOG_SYNC_BATCH_SIZE=100`.
|
|
- [ ] Fetch text/thread channels from monitored guild on ready.
|
|
- [ ] For each channel/thread, page `channel.messages.fetch({ limit, before })` until older than cutoff.
|
|
- [ ] Store messages with rich metadata and attachments.
|
|
- [ ] Start sync after registering live capture; run async and log progress.
|
|
- [ ] Verify: `bun run typecheck && bun run test`.
|
|
|
|
### Task 4: Render richer UI
|
|
|
|
**Files:**
|
|
- Modify: `public/index.html`
|
|
|
|
- [ ] Render metadata embeds as embed cards.
|
|
- [ ] Render attachments as inline previews/links in Text tab.
|
|
- [ ] Render reply and thread badges.
|
|
- [ ] Keep sticker rendering.
|
|
- [ ] Verify static JS syntax by typecheck/tests where applicable.
|
|
|
|
### Task 5: Final verification
|
|
|
|
**Files:** all touched files
|
|
|
|
- [ ] Run `bun run typecheck`.
|
|
- [ ] Run `bun run test`.
|
|
- [ ] Verify short DB init with `bun -e 'import("./src/muxer-queue.ts").then((m)=>{const db=m.getDatabase(); db.close(); console.log("sqlite ok")})'`.
|