This document defines how FAQs are stored, identified, and managed inside OmegaBot.
The goal is to keep FAQs:
- Easy to manage
- Safe for Discord limits
- Auditable
- Persisted in SQLite with the rest of OmegaBot state
FAQs are stored in SQLite in the faqs table.
The database is the single source of truth for FAQ entries. FAQ tags are stored
as JSON text inside the tags column, but the store itself is not file-backed.
Each FAQ entry follows this schema:
type FaqEntry = {
key: string;
title: string;
body: string;
tags: string[];
createdAt: string;
updatedAt: string;
createdBy: string;
updatedBy: string;
usageCount: number;
};
type FaqStore = {
version: 1;
entries: Record<string, FaqEntry>;
};- Lowercase only
- Letters, numbers, and dashes only
- No spaces
- Immutable once created
- Max length: 48 characters
| Field | Limit |
|---|---|
| title | 80 chars |
| body | 4000 chars |
| tags | 10 max |
/faq addvalidates input and initializes metadata/faq getincrements usage count/faq listshows keys + titles/faq removedeletes entry (permission-gated)
- Database storage
- Search
- Role-based visibility
- Audit history
FAQs are treated as shared operational knowledge.