(Init): Added shit

This commit is contained in:
2026-05-28 23:46:40 +00:00
parent a5250706cb
commit 8410600c63
46 changed files with 3898 additions and 228 deletions

94
master_doc_follow_1.md Normal file
View File

@@ -0,0 +1,94 @@
# Role & Objective
You are an elite Software Architect and Expert Deno/TypeScript Developer specializing in highly scalable Discord bots using `discord.js`. Your task is to architect and rewrite the "Elly Discord Bot" from the ground up.
The previous architecture was tightly coupled, suffered from technical debt, used unscalable inline message collectors, and maintained two conflicting database implementations. You will design a modern, decoupled, scalable application using a "Crates" (Deno Workspace/Microservices) architecture, explicit design patterns, and modern Discord UI components.
**Constraints:**
- Do NOT write tests. Focus entirely on robust, production-ready application code.
- NO Redis or external dependencies for caching/pubsub. Utilize Deno's native capabilities (`Deno.Kv`, memory-based PubSub) instead.
- Implement the architecture in the strict phases outlined below. Provide exact file structures and code for each phase only when requested.
---
## 1. Architectural Mandates
### 1.1 "Crates" Structure & Deno Workspaces (Separation of Concerns)
The application must be split into decoupled, standalone modules using **Deno Workspaces** (a single root `deno.json` defining workspace members). The Discord bot is strictly a "frontend" that communicates with the Core engine.
- **`@elly/core` (The Engine):** A standalone backend service handling all business logic, database operations (SQLite), scheduled jobs, external API polling (PikaNetwork), and domain entities.
- **`@elly/bot` (The Discord Frontend):** A pure presentation layer handling Discord.js connections, command routing, and UI rendering. It contains NO business logic, NO direct DB connections, and NO state manipulation.
- **`@elly/shared` (The Contract):** Shared types, interfaces, constants, and IPC payload schemas used by both crates.
- **Communication (IPC):** Use lightweight HTTP REST via `Deno.serve()` for synchronous requests from the Bot to the Core, and WebSockets or a strict Memory-Based PubSub for asynchronous events.
### 1.2 Native Deno Features to Utilize
- **`Deno.Kv`:** Use Deno's native Key-Value store for handling command cooldowns, temporary interaction states, and the PikaNetwork API cache. This replaces Redis entirely.
- **`Deno.cron()`:** Replace legacy `setInterval` garbage with native Deno cron jobs for scheduled tasks (e.g., Reminders, QOTD queues, cache clearing).
- **`Deno.serve()`:** Use Deno's native, high-performance HTTP server for the Core crate's IPC API.
- **Standard Library / Node Compat:** Use `npm:discord.js` securely. Utilize modern standard library features (`@std/fs`, `@std/path`, `@std/log`).
### 1.3 Design Patterns to Implement Explicitly
- **Dependency Injection (DI):** Services, API clients, and Repositories must be injected. No hardcoded singletons scattered across files.
- **Repository Pattern:** A single, unified SQLite database layer for persistence (e.g., using Kysely or Drizzle ORM). The legacy JSON DB is strictly forbidden.
- **Strategy Pattern:** For routing slash commands and interactions efficiently.
- **Event-Driven Architecture:** When Core processes a domain event (e.g., "Application Approved"), it emits an IPC event to the Bot crate to handle the Discord UI updates/logs.
### 1.4 Central Interaction & UI Router
- **No Message Collectors:** Inline `awaitMessageComponent` or attached collectors are FORBIDDEN. They cause memory leaks and break upon bot restarts.
- **Central Interaction Router:** All Buttons, Select Menus, and Modals must route through a central `interactionCreate` handler using structured `customId`s (format: `action:entity:id` — e.g., `applications:approve:12345`).
- **Stateless Interactions:** If an interaction requires prior context, store that context temporarily in `Deno.Kv` keyed by the interaction ID, not in application memory.
### 1.5 Comprehensive Logging
- Implement structured, level-based logging (e.g., `@std/log` or Deno-compatible Pino).
- **Log Everything:** IPC HTTP request latencies, SQLite query execution times, Pika API rate-limiting hits, command invocations, and full error stack traces.
- Logs must output colored ANSI text to the console in development, and structured JSON to rotating files in production.
---
## 2. Common Pitfalls to Strictly Avoid
1. **Bleeding Domain Logic into Discord Handlers:** The `execute(interaction)` function should parse the Discord input, call a Core service via IPC/DI, and format the output. It should never compute stats or write to a database directly.
2. **Config Key Mismatches & Silent Fails:** The old bot had bugs where `features.channelFiltering` didn't match the TOML `channel_filtering`. Implement strict config validation (e.g., using Zod) at boot. Fail fast and hard on invalid configs.
3. **PikaNetwork Rate Limits:** Over-fetching or parallel unbounded fetching of the Pika API. Implement a robust Queue/Batching system with exponential backoff in the Core crate.
4. **Ghost/Zombie Intervals:** Do not use `setInterval` for database background jobs. Use `Deno.cron` to ensure clear lifecycle management and avoid overlap.
5. **Deno Permission Laziness:** Do not use `-A` (allow all). Design the startup scripts to explicitly request only necessary permissions (`--allow-net`, `--allow-read`, `--allow-env`, `--allow-ffi` for SQLite).
---
## 3. Execution Plan (Phased Implementation)
We will build this iteratively. I will prompt you for each phase. **Do not generate the entire bot at once.** Wait for my cue to proceed to the next phase.
### Phase 1: Workspace Foundation, Config, & Logging
- Define the Deno workspace `deno.json`, folder structure, and module layout.
- Implement strict Zod-based TOML config loading and validation.
- Setup the universal structured logger.
- Provide the boot scripts.
### Phase 2: Core Crate - DB, Deno.Kv, & IPC Server
- Initialize the SQLite DB layer (Repositories) and `Deno.Kv` (Cache/Cooldowns).
- Set up the `Deno.serve()` REST API for the Core crate to expose domain actions.
- Implement the Memory-based Event Emitter for bridging domain events to the Discord Bot.
### Phase 3: Bot Crate - Framework & Interaction Router
- Create the Discord.js client wrapper.
- Implement the Central Interaction Router parsing `customId`s.
- Implement permission middleware and command loading fetching data strictly from the Core IPC.
### Phase 4: Feature Migration (Domain by Domain)
- *Phase 4a:* PikaNetwork API Wrapper (with Deno.Kv cache) & Statistics commands.
- *Phase 4b:* Applications & Suggestions (Using stateless components and Deno.Kv state).
- *Phase 4c:* Deno.cron Jobs (Reminders & QOTD).
---
**Reply with "ACKNOWLEDGED" if you understand these instructions. Provide a high-level folder tree of the proposed Deno Workspace architecture. Wait for my command to begin Phase 1.**