Other

ТЗ Colombino Chat

ColombinoChat — ТЗ

Плагин управления чатами/PM/упоминаниями для сети Colombino (Paper + Velocity). Цель — единая система чатов с MiniMessage, PlaceholderAPI, антиспамом, логированием и сетевым хранением данных.


0) Техническая информация


1) Гайдлайны

1.1 YAML

1.2 Git / коммиты

1.3 Стек библиотек


2) Термины


3) Архитектура и зоны ответственности

3.1 Velocity (прокси)

Отвечает за:

3.2 Paper (бекенд)

Отвечает за:


4) Хранение данных (обязательное)

4.1 Общее правило

Все данные, требующие хранения и/или синхронизации в сети, должны храниться в PostgreSQL.

4.2 Что хранить в БД (минимум)

4.3 Идентификаторы

4.4 БД-слой


5) Уровни чата (Scopes)

5.1 Обязательные scopes

  1. Network Global — межсерверный (Velocity)

  2. Server Global — внутри Paper

  3. World — внутри текущего мира

  4. Plot — внутри текущего плота (PlotSquared)

5.2 Поведение Plot scope

Если игрок не находится на плоту:


6) Переключение чатов и триггеры

6.1 Активный чат (state)

6.2 Команды переключения

Минимальный набор:

Алиасы настраиваемые (пример): /gc, /sc, /wc, /pc.

Команды:

6.3 Триггеры в сообщениях (send-only / switch-and-send)

Примеры:

Требования:

Допускается, что изменение алиасов команд/тегов может не поддерживать hot-reload.

6.4 Приоритет обработки

  1. Команда (если используется команда отправки)

  2. Триггер/префикс в сообщении

  3. Активный scope игрока


7) Форматирование сообщений

7.1 MiniMessage в конфигурации

Во всех текстовых полях с форматированием / hover / click — MiniMessage.

7.2 Плейсхолдеры (встроенные)

Дополнительно:

7.3 PlaceholderAPI


8) MiniMessage в сообщениях игроков и ссылки

8.1 MM в сообщении игрока

8.2 Автокликабельные ссылки (linkify)

Требования:


9) Система упоминаний (Mentions)

9.1 Упоминания

9.2 Звук и кулдаун

9.3 Оффлайн-упоминания (Notifications)

Если игрок упомянут, но оффлайн — создать уведомление:

Команды:

Требования:

9.4 Автокомплит


10) Cross-server PM (Личные сообщения)

Команды:

Требования:

Опционально:


11) Валидация сообщений (Regex)

Конфиг (пример):

validation:
  enabled: true
  regex: "^[!\"@№;%:?*()_=#$^&\\/\\-—+`~;'<>\u005B\u005D{}|,.a-zA-Zа-яА-ЯёЁҐґЄєЇї0-9\\s]+$"

Требования:

Permission bypass:


12) Фильтрация однотипных сообщений (Levenshtein Similarity)

Цель: блокировать спам “почти одинаковыми” сообщениями.

Настройки:

Определение:

Нормализация (настраиваемо):

Permission bypass:


13) Логирование

13.1 Требование по формату и именованию

Формат и ротация логов должны соответствовать формату логов сервера. Хороший пример — дата в имени файла в ISO-формате (YYYY-MM-DD).

13.2 Что логировать

13.3 Где логировать

13.4 Минимальная структура

Должны быть минимум два потока:

Пример (точное имя/папка — по стандарту сервера):


14) Permissions (минимум)

Чаты:

PM:

Сообщения:

Bypass:

Mentions (опционально):

SocialSpy (опционально):


15) Hot Reload

Команда:

Требования:


16) Acceptance Criteria (готовность)

Опциональные интеграции / отложено

A) Реплейсер строк (Text Replacer) — опционально

Фича может быть добавлена позже при необходимости.

Пример конфига:

replacer:
  enabled: true
  mappings:
    ":doge:": "☺"
    ":lol:": "☻"

B) Discord Bridge — отложено

Discord bridge исключён из текущего объёма работ, т.к. требует интеграции с системой верификации и наличия у неё API.

Вернуться к задаче после утверждения: