feat: Rust 2024 kernel (serenity 0.12.5+poise 0.7, sqlx 0.9, tokio 1.53) - OTHER + roles without emojis, verify auto on boot, i18n EN, welcome 40, tickets, voice temp, fmt/clippy 0, userbot inspect
This commit is contained in:
parent
c3b0c2f976
commit
a2b2c41654
124 changed files with 1596 additions and 2896 deletions
70
ROADMAP.md
Normal file
70
ROADMAP.md
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# ROADMAP - Loki Blog Bot (Rust kernel)
|
||||
|
||||
> Цель: не клон `discord-bot` (экономика/музыка/левел), а бот для **блога/портфолио** - чистый, KISS, ≤200 строк/файл, ≤4 файла/папку.
|
||||
|
||||
---
|
||||
|
||||
## Сервер блога - желаемая структура Discord
|
||||
|
||||
```
|
||||
📁 INFO #rules, #welcome, #announcements, #blog-feed (RSS → webhook), #changelog
|
||||
📁 COMMUNITY #general, #ideas, #showcase (юзеры постят проекты), #feedback
|
||||
📁 SUPPORT #open-ticket, #faq
|
||||
📁 VOICE create-voice (temp), afk
|
||||
📁 STAFF (🔒) #mod-logs, #bot-logs
|
||||
```
|
||||
|
||||
Роли: `@Verified` (кнопка в #welcome), `@Blogger`, `@Support`, `@Staff`, `@Muted`.
|
||||
|
||||
---
|
||||
|
||||
## Phase 1 - Ядро ✅ (скелет готов)
|
||||
- [x] Rust 1.82, tokio, serenity 0.12 + poise 0.6 (slash + prefix `!`)
|
||||
- [x] `config/loader` dotenv → BotConfig, `db/pool` WAL + FK=ON (фикс C6 старого бота)
|
||||
- [x] `db/migration` idempotent транзакции (фикс C5)
|
||||
- [x] `core/lifecycle` trait, `core/bot` ReadyEvent + graceful shutdown
|
||||
- [x] `feature/help|info|admin` - `!ping`, `!serverinfo`, `!shutdown` (owner)
|
||||
- [x] `ds-setup` CLI: `inspect` / `bootstrap --dry-run/--apply` (BOT token, user-token с ворнингом)
|
||||
|
||||
**Запуск:**
|
||||
```bash
|
||||
cp .env.example .env # вставь DISCORD_BOT_TOKEN, GUILD_ID
|
||||
cargo run --bin bot
|
||||
cargo run --bin ds-setup -- inspect --guild-id 123
|
||||
cargo run --bin ds-setup -- bootstrap --guild-id 123 --dry-run
|
||||
```
|
||||
|
||||
## Phase 2 - Верификация и доступ (guild 1509503154708811837, next)
|
||||
- [ ] **Verify (embed+✅)** - `#✅|verify` read-only (`@everyone: VIEW ✅, SEND ❌, ADD_REACTIONS ✅`), embed + `✅` реакция → выдача `✅ Verified` (1509503647480811610), бот роль выше Verified, `GUILD_MESSAGE_REACTIONS` + partials. Кнопка - альтернатива, но делаем реакцию как просил. Фикс F3: проверка `MANAGE_ROLES`.
|
||||
- [ ] `!mute/!unmute/!warn/!purge/!slowmode` - атомарные транзакции, без `UndeclaredThrowableException` (фикс C1)
|
||||
- [ ] Logging в #mod-logs (join/leave, edit/delete, mod actions)
|
||||
- [ ] RateLimiter + `core/queue` Semaphore 100 (уже заготовка)
|
||||
|
||||
## Phase 3 - Блог-фичи (главное отличие от старого бота)
|
||||
- [ ] RSS/Telegram → #blog-feed (webhook, `reqwest` + `feed-rs`)
|
||||
- [ ] `!post` - анонс поста (embed с cover, линк)
|
||||
- [ ] Showcase: треды в #showcase, реакции ⭐
|
||||
- [ ] GitHub webhook → #changelog
|
||||
- [ ] Ticket (кнопки в #open-ticket → приватный канал/тред в SUPPORT, overwrites за 1 операцию, claim, transcript → #ticket-logs) - см. ARCHITECTURE.md
|
||||
|
||||
## Phase 4 - Комьюнити
|
||||
- [ ] Welcome embed, counters (member count в канале)
|
||||
- [ ] Polls в #ideas
|
||||
- [ ] Scheduler (напоминания)
|
||||
- [ ] Temp voice (`#create-voice` → временный канал)
|
||||
|
||||
## Phase 5 - Опционально (AI)
|
||||
- [ ] AI FAQ (DeepSeek/GPT) в #faq - только по базе знаний блога
|
||||
- [ ] Auto-mod (спам/ссылки)
|
||||
|
||||
---
|
||||
|
||||
## Уроки старого бота - что НЕ повторяем
|
||||
F1,F2,F4 - экономика: атомарные `UPDATE ... WHERE cash>=?`, daily `WHERE last_daily != today`.
|
||||
F8/C1 - не блокировать gateway: все DB/HTTP вне EventHandler, `tokio::spawn`, `sqlx` async.
|
||||
C6 - `foreign_keys=ON` через `SqliteConnectOptions::foreign_keys(true)`, не одним `PRAGMA`.
|
||||
M1 - `destroy()` на `ScheduledExecutorService` → в Rust `JoinHandle::abort` / `pool.close().await`.
|
||||
|
||||
## Качество
|
||||
`cargo fmt --check`, `cargo clippy -- -D warnings`, `cargo test`, `cargo audit`. Лимит 200 строк - `rustfmt max_width=100`.
|
||||
Каждый `feature/*` ≤4 файла, >150 строк → дробить (`service/`, `repository/`).
|
||||
Loading…
Add table
Add a link
Reference in a new issue