feat: remove AnimalApi cache + !ratingoverview for super-admin

- AnimalApi: drop Caffeine URL cache (30s TTL made !neko return the same photo)
- RatingsRepository.getExtremeRating(guild, type, excluded, highest) with NOT IN
- !ratingoverview (super-admin only): per-category max/min, excluding bots + super-admin
- RatingsRepositoryTest: 7 new tests for getExtremeRating
This commit is contained in:
loki5512344 2026-08-19 14:36:12 +02:00
parent bf14e03b21
commit ec25d9e8d3
Signed by: boba
GPG key ID: 253067914055423B
6 changed files with 242 additions and 35 deletions

32
TODO.md
View file

@ -253,7 +253,7 @@ feature/economy/
- [x] Красивые level-up embed с прогресс-баром
### Приоритет 3
- [ ] Статистика сервера — графики, CSV export
- [x] Статистика сервера — графики, CSV export — ✅ `!serverstats [csv|chart]`
---
@ -263,15 +263,15 @@ feature/economy/
- [x] `!catperson` / `!dogperson` / `!foxperson` — «Какой ты кот/пёс/лис»: % + роль + картинка (детерминировано ID)
- [x] `!shibe` / `!birb` — картинки шиба-ину и птичек
- [x] `!neko` / `!waifu` / `!catboy` — аниме-картинки (неко, вайфу, кошко-мальчик)
- [ ] Факты: `!catfact` / `!dogfact` — факт + картинка (catfact.ninja, dog facts API)
- [ ] `!joke` — анекдоты (jokeapi.dev, категории Any/Programming/Misc)
- [ ] `!chuck` — цитаты Чака Норриса (api.chucknorris.io)
- [ ] `!inspire` — мотивационные цитаты (zenquotes.io)
- [ ] `!apod` — астрономическая картинка дня NASA (api.nasa.gov, бесплатный ключ)
- [ ] `!iss` — где сейчас МКС (api.wheretheiss.at)
- [ ] `!space` — кто сейчас в космосе (open-notify.org)
- [ ] `!xkcd` — свежий стрип (xkcd.com/api)
- [ ] `!meme <subreddit>` — расширить мем по сабреддиту
- [x] Факты: `!catfact` / `!dogfact` — факт + картинка (catfact.ninja, dog facts API)
- [x] `!joke` — анекдоты (jokeapi.dev, категории Any/Programming/Misc)
- [x] `!chuck` — цитаты Чака Норриса (api.chucknorris.io)
- [x] `!inspire` — мотивационные цитаты (zenquotes.io)
- [x] `!apod` — астрономическая картинка дня NASA (api.nasa.gov, DEMO_KEY)
- [x] `!iss` — где сейчас МКС (api.wheretheiss.at)
- [x] `!space` — кто сейчас в космосе (open-notify.org)
- [x] `!xkcd` — свежий стрип (xkcd.com/api)
- [x] `!meme <subreddit>` — расширить мем по сабреддиту
---
@ -296,6 +296,7 @@ feature/economy/
### Оптимизации (2026-08-19)
- [x] `AnimalApi` — Caffeine-кэш успешных URL (TTL 30 с): повторные `!neko`/`!catboy`/зоо-викторины отвечают мгновенно
- [x] `AnimalApi` — кэш полностью убран (2026-08-19): из-за него `!neko` 30с отдавал одну и ту же фотку
- [x] `MemeCommand` — HttpURLConnection (без таймаутов, мог висеть) → OkHttp 6с/8с
- [ ] `Database` — включить `PRAGMA journal_mode = WAL` (сейчас нет — блокировки при конкурентной записи)
- [ ] NekosLifeApi — таймауты/ретраи вынести в конфиг (10с → 8с, retry 3 → 2)
@ -462,15 +463,16 @@ feature/economy/
- [ ] F14: MetricsCollector.java — разбить по типам метрик
- [ ] F15: WarnCommand.java — вынести auto-mute в отдельный сервис
- [x] F16: BotInitializer.java — вынести фабрики ботов — ✅ 162→135 строк
- [x] F02-04: QueueSlashHandler, MusicBotControlHandler, QueueCommands — вынести общие части — ✅ вынесены при реорге music
- [ ] Остальные: разбить по SOLID
### Этап 11: ≤6 файлов в папке
- [ ] P1: Entertainment команды — группировать по смыслу (coin/dice → `random/`, gay/iq/pp → `rating/`)
- [ ] P2: Social команды — объединить в `SocialCommand` с параметром
- [ ] P4: Level — разбить на commands/, service/, repository/
- [ ] P5: Moderation — разбить по поддоменам (commands/punish, commands/utils, warn)
- [ ] P6: Music — разбить на commands/, player/, lavalink/
- [x] P1: Entertainment команды — уже сгруппированы (choice/, random/; rating-команды в feature/rating/)
- [x] P2: Social команды — уже объединены (SocialCommand + 3 отдельных), 4 файла
- [x] P4: Level — уже разбит на commands/, service/, repository/, domain/
- [x] P5: Moderation — уже разбит по поддоменам (punish, utils, warn, caselookup, log, repository)
- [x] P6: Music — ✅ commands/filter|control|queue, listener/bot|select, manage/player|filter, util/embed|voice|query (все папки ≤6)
### Этап 12: Тесты