feat: chat channel system (/join /leave /channel)

- config-driven channels in config/channels.yml (global, local, staff, trade) with
  emoji, colors, prefix, radius, cooldowns, permissions and aliases
- Channel record + ChannelConfig loader wired into ConfigManager (reload supported)
- ChannelService (api) + ConcurrentHashMap-backed ChannelServiceImpl, joined in
  ServiceRegistry; default channel join treated as 'not in channel'
- JoinChannelCommand / LeaveChannelCommand / ChannelCommand (+ tab completion),
  registered in CommandManager; plugin.yml commands + permissions
- ChatEventListener routes AsyncChatEvent to the active channel: per-channel
  cooldown, local-radius viewer filtering, channel-aware renderer
- EnhancedChatRenderer supports Channel overload (emojiFor/prefixText/channelColor)
- ChannelServiceImplTest covering join/leave/permissions/aliases
This commit is contained in:
loki5512344 2026-08-09 21:31:11 +02:00
parent 689ab1a9ae
commit a822c91637
Signed by: boba
GPG key ID: 253067914055423B
17 changed files with 821 additions and 12 deletions

11
TODO.md
View file

@ -66,11 +66,12 @@
## 🟡 NEXT: NEW FEATURES
### 1. Channels (like VentureChat / Carbon)
- `/join`, `/leave`, `/channel` — full channel system: global, local, staff, trade, party.
- Per-channel colors, aliases, permissions, cooldowns, spy mode.
- Party chat: private groups `/party`.
- Network channels (Bungee/Velocity) sync.
### 1. Channels (like VentureChat / Carbon) ✅
- `/join`, `/leave`, `/channel` — full channel system: global, local, staff, trade.
- Config-driven channels via `config/channels.yml` (emoji, colors, prefix, radius, cooldowns, permissions, aliases).
- Chat routing: `ChatEventListener` sends to the joined channel; local radius filtering; per-channel cooldown; channel-aware `EnhancedChatRenderer`.
- Party chat: private groups `/party` (future).
- Network channels (Bungee/Velocity) sync (future).
### 2. Anti-swear hardening + filter statistics ✅
- Obfuscation bypass: `SwearNormalizer` (q→р / leet-подстановки, повторы букв «сууука», разделители внутри слова «с.у.к.а» / «с у к а») + tolerant-маскирование в replace-режиме. Single source of truth для Aho-Corasick.