diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..059c450 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,47 @@ +--- +name: Сообщение об ошибке +about: Создайте отчет об ошибке, чтобы помочь нам улучшить плагин +title: '[BUG] ' +labels: bug +assignees: '' +--- + +## Описание ошибки +Четкое и краткое описание того, что произошло. + +## Шаги для воспроизведения +1. Перейти к '...' +2. Выполнить команду '...' +3. Увидеть ошибку + +## Ожидаемое поведение +Четкое и краткое описание того, что вы ожидали увидеть. + +## Скриншоты +Если применимо, добавьте скриншоты для объяснения проблемы. + +## Информация о сервере +- Версия Minecraft: [например, 1.21.1] +- Версия сервера: [например, Paper 1.21.1-116] +- Версия плагина: [например, 1.5.5] +- Версия Java: [например, Java 21] + +## Установленные плагины +Список других плагинов на сервере (особенно те, которые могут взаимодействовать с чатом): +- PlaceholderAPI +- LuckPerms +- ... + +## Логи +``` +Вставьте сюда релевантные логи из console или latest.log +``` + +## Конфигурация +Если проблема связана с конфигурацией, вставьте релевантные части: +```yaml +# config.yml или другой конфиг +``` + +## Дополнительный контекст +Любая другая информация о проблеме. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..a6f6126 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,49 @@ +--- +name: Запрос новой функции +about: Предложите идею для этого проекта +title: '[FEATURE] ' +labels: enhancement +assignees: '' +--- + +## Описание функции +Четкое и краткое описание того, что вы хотите добавить. + +## Проблема, которую это решает +Опишите проблему, которую решает эта функция. Например: "Я всегда расстраиваюсь, когда [...]" + +## Предлагаемое решение +Четкое и краткое описание того, что вы хотите видеть. + +## Альтернативы +Четкое и краткое описание любых альтернативных решений или функций, которые вы рассматривали. + +## Примеры использования +Как бы вы использовали эту функцию? Приведите примеры команд, конфигурации и т.д. + +```yaml +# Пример конфигурации +new-feature: + enabled: true + option: value +``` + +``` +# Пример команды +/newcommand <аргумент> +``` + +## Приоритет +- [ ] Критично - без этого плагин не работает должным образом +- [ ] Высокий - значительно улучшит функциональность +- [ ] Средний - было бы хорошо иметь +- [ ] Низкий - небольшое улучшение + +## Готовность помочь +- [ ] Я могу помочь с реализацией (Pull Request) +- [ ] Я могу помочь с тестированием +- [ ] Я могу помочь с документацией +- [ ] Я только предлагаю идею + +## Дополнительный контекст +Добавьте любой другой контекст или скриншоты о запросе функции здесь. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..75aed60 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,31 @@ +--- +name: Вопрос +about: Задайте вопрос о плагине +title: '[QUESTION] ' +labels: question +assignees: '' +--- + +## Ваш вопрос +Четко сформулируйте ваш вопрос. + +## Что вы уже пробовали +Опишите, что вы уже пытались сделать для решения вопроса: +- [ ] Прочитал документацию в README.md +- [ ] Проверил существующие issues +- [ ] Проверил конфигурационные файлы +- [ ] Попробовал поискать в интернете + +## Контекст +Предоставьте любой релевантный контекст: +- Версия плагина: +- Версия сервера: +- Что вы пытаетесь сделать: + +## Конфигурация (если применимо) +```yaml +# Вставьте релевантную часть конфигурации +``` + +## Дополнительная информация +Любая другая информация, которая может помочь ответить на ваш вопрос. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..f2d91ab --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,49 @@ +# Pull Request + +## Описание изменений +Четкое и краткое описание того, что делает этот PR. + +Fixes #(issue номер) + +## Тип изменений +Отметьте релевантные пункты: +- [ ] Исправление ошибки (bug fix) +- [ ] Новая функция (feature) +- [ ] Критическое изменение (breaking change) +- [ ] Обновление документации +- [ ] Рефакторинг кода +- [ ] Улучшение производительности +- [ ] Обновление зависимостей + +## Как это было протестировано? +Опишите тесты, которые вы провели для проверки ваших изменений: +- [ ] Тестирование на локальном сервере +- [ ] Тестирование с другими плагинами +- [ ] Юнит-тесты +- [ ] Интеграционные тесты + +**Конфигурация тестирования**: +- Версия Minecraft: +- Версия сервера: +- Версия Java: + +## Чеклист +- [ ] Мой код следует стилю этого проекта +- [ ] Я провел самопроверку своего кода +- [ ] Я прокомментировал свой код, особенно в сложных местах +- [ ] Я внес соответствующие изменения в документацию +- [ ] Мои изменения не генерируют новых предупреждений +- [ ] Я добавил тесты, которые доказывают, что мое исправление эффективно или что моя функция работает +- [ ] Новые и существующие юнит-тесты проходят локально с моими изменениями +- [ ] Любые зависимые изменения были объединены и опубликованы в downstream модулях + +## Скриншоты (если применимо) +Добавьте скриншоты для демонстрации изменений. + +## Дополнительный контекст +Добавьте любой другой контекст о PR здесь. + +## Связанные issues +Список связанных issues: +- Closes # +- Related to # diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..6b593bb --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,41 @@ +# Кодекс поведения участников + +## Наше обязательство + +Мы, как участники и сопровождающие проекта, обязуемся сделать участие в нашем проекте и сообществе свободным от домогательств для всех, независимо от возраста, телосложения, видимой или невидимой инвалидности, этнической принадлежности, половых характеристик, гендерной идентичности и самовыражения, уровня опыта, образования, социально-экономического статуса, национальности, внешности, расы, религии или сексуальной идентичности и ориентации. + +## Наши стандарты + +Примеры поведения, которое способствует созданию позитивной среды: + +* Использование приветливого и инклюзивного языка +* Уважение различных точек зрения и опыта +* Конструктивное принятие критики +* Фокус на том, что лучше для сообщества +* Проявление эмпатии к другим участникам сообщества + +Примеры неприемлемого поведения: + +* Использование сексуализированного языка или образов +* Троллинг, оскорбительные/уничижительные комментарии, личные или политические атаки +* Публичные или приватные домогательства +* Публикация личной информации других людей без явного разрешения +* Другое поведение, которое может быть обоснованно расценено как неуместное в профессиональной среде + +## Наши обязанности + +Сопровождающие проекта несут ответственность за разъяснение стандартов приемлемого поведения и должны предпринимать соответствующие и справедливые корректирующие действия в ответ на любые случаи неприемлемого поведения. + +Сопровождающие проекта имеют право и обязанность удалять, редактировать или отклонять комментарии, коммиты, код, правки вики, issues и другие вклады, которые не соответствуют этому Кодексу поведения, или временно или постоянно блокировать любого участника за другое поведение, которое они считают неуместным, угрожающим, оскорбительным или вредным. + +## Область применения + +Этот Кодекс поведения применяется как в пространствах проекта, так и в публичных пространствах, когда человек представляет проект или его сообщество. Примеры представления проекта или сообщества включают использование официального адреса электронной почты проекта, публикацию через официальный аккаунт в социальных сетях или выступление в качестве назначенного представителя на онлайн или оффлайн мероприятии. + +## Применение + +О случаях оскорбительного, домогательского или иного неприемлемого поведения можно сообщить, связавшись с командой проекта через [Issues](https://codeberg.org/loki5512344/Lochat/issues). Все жалобы будут рассмотрены и расследованы, и результатом будет ответ, который считается необходимым и соответствующим обстоятельствам. Команда проекта обязана сохранять конфиденциальность в отношении лица, сообщившего об инциденте. + +## Атрибуция + +Этот Кодекс поведения адаптирован из [Contributor Covenant](https://www.contributor-covenant.org), версия 2.0, доступная по адресу https://www.contributor-covenant.org/version/2/0/code_of_conduct.html diff --git a/README.md b/README.md index 09023c4..d10b972 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LoChat - Advanced Chat Plugin -Продвинутый чат плагин для Paper/Folia серверов с градиентными никами, модерацией и гибкой системой конфигурации. +Мощный чат плагин для Paper/Folia серверов с градиентными никами, продвинутой модерацией и гибкой конфигурацией. ## Сборка и локальный тестовый сервер @@ -8,7 +8,7 @@ ./gradlew runServer ``` -Gradle задача `runServer` ([run-paper](https://github.com/jpenilla/run-paper)) скачивает Paper 1.21.4, собирает JAR плагина и кладёт его в `run/plugins`. Первый запуск долгий из-за загрузки. Остановка через `stop` в консоли сервера. +Gradle задача `runServer` ([run-paper](https://github.com/jpenilla/run-paper)) скачивает Paper 1.21.1, собирает JAR плагина и кладёт его в `run/plugins`. Первый запуск долгий из-за загрузки. Остановка через `stop` в консоли сервера. ## Основные возможности @@ -142,7 +142,7 @@ cd Lochat ### Обязательные - Java 21+ -- Paper 1.20.1+ или Folia +- Paper 1.21.1+ или Folia ### Опциональные - PlaceholderAPI - для плейсхолдеров @@ -351,8 +351,8 @@ public class MyFilter implements MessageFilter { ## Известные проблемы -- Градиенты могут не отображаться в некоторых версиях клиента -- Фильтры могут блокировать легитимные сообщения (настраивается) +- Градиенты могут некорректно отображаться в старых версиях клиента (< 1.16) +- Некоторые фильтры могут блокировать легитимные сообщения (настраивается в `config/filters.yml`) ## Статистика проекта @@ -363,7 +363,11 @@ public class MyFilter implements MessageFilter { ## Вклад в проект -Проект находится в активной разработке. Pull requests приветствуются. +Мы приветствуем вклад в развитие проекта! Перед началом работы ознакомьтесь с: +- [Code of Conduct](CODE_OF_CONDUCT.md) - правила поведения в сообществе +- [Security Policy](SECURITY.md) - политика безопасности + +### Как внести вклад 1. Fork репозитория 2. Создайте ветку для фичи (`git checkout -b feature/amazing-feature`) @@ -371,6 +375,15 @@ public class MyFilter implements MessageFilter { 4. Push в ветку (`git push origin feature/amazing-feature`) 5. Откройте Pull Request +### Типы вклада + +- 🐛 Исправление багов +- ✨ Новые функции +- 📝 Улучшение документации +- 🎨 Улучшение UI/UX +- ⚡ Оптимизация производительности +- 🔒 Улучшение безопасности + ## Лицензия GNU General Public License v3.0 - см. файл [LICENSE](LICENSE) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..8a0d68c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,116 @@ +# Политика безопасности + +## Поддерживаемые версии + +Мы активно поддерживаем следующие версии плагина: + +| Версия | Поддержка | +| ------ | ----------------- | +| 1.5.x | :white_check_mark: | +| 1.4.x | :x: | +| < 1.4 | :x: | + +## Сообщение об уязвимости + +Если вы обнаружили уязвимость в безопасности, пожалуйста, **НЕ** создавайте публичный issue. + +### Как сообщить + +1. Создайте приватный issue через [Security Advisory](https://codeberg.org/loki5512344/Lochat/issues) +2. Опишите уязвимость максимально подробно: + - Тип уязвимости (SQL injection, XSS, command injection и т.д.) + - Шаги для воспроизведения + - Потенциальное влияние + - Предлагаемое решение (если есть) + +### Что ожидать + +- **Подтверждение получения**: в течение 48 часов +- **Первоначальная оценка**: в течение 7 дней +- **Исправление**: в зависимости от серьезности (критические - 1-3 дня, высокие - 7-14 дней) +- **Публичное раскрытие**: после выпуска патча + +## Известные проблемы безопасности + +### Текущие + +Нет известных критических уязвимостей. + +### Исправленные + +- **v1.5.0**: Исправлена возможность обхода фильтра мата через Unicode символы +- **v1.4.5**: Исправлена SQL injection в системе мутов +- **v1.4.0**: Исправлена возможность выполнения команд через кастомные команды + +## Рекомендации по безопасности + +### Для администраторов серверов + +1. **Регулярно обновляйте плагин** до последней версии +2. **Ограничьте права**: + - Не давайте `lochat.admin` обычным игрокам + - Используйте `lochat.bypass.*` только для доверенных модераторов +3. **Настройте фильтры**: + - Включите все фильтры в `config/filters.yml` + - Регулярно обновляйте `badwords.txt` +4. **Мониторинг**: + - Проверяйте логи на подозрительную активность + - Используйте `/chatspy` для контроля личных сообщений + +### Для разработчиков + +1. **Валидация входных данных**: + - Всегда проверяйте пользовательский ввод + - Используйте prepared statements для SQL +2. **Безопасность API**: + - Не доверяйте данным из внешних источников + - Проверяйте права доступа перед выполнением операций +3. **Конфигурация**: + - Не храните чувствительные данные в конфигах + - Используйте переменные окружения для секретов + +## Безопасные практики использования + +### Discord Webhook + +```yaml +# ❌ Плохо - webhook в публичном конфиге +discord: + webhook-url: "https://discord.com/api/webhooks/123456789/abcdefg" + +# ✅ Хорошо - webhook через переменную окружения +discord: + webhook-url: "${DISCORD_WEBHOOK_URL}" +``` + +### Фильтры + +```yaml +# ✅ Рекомендуемая конфигурация +filters: + swear-filter: + enabled: true + block-unicode-bypass: true + block-space-bypass: true + + spam-filter: + enabled: true + max-messages: 3 + time-window: 5 + + url-filter: + enabled: true + whitelist-mode: true + allowed-domains: + - "yourdomain.com" +``` + +## Контакты + +Для вопросов по безопасности: +- Issues: https://codeberg.org/loki5512344/Lochat/issues +- Email: loki@lokili.xyz + +## Благодарности + +Мы благодарим всех, кто ответственно сообщает об уязвимостях и помогает сделать проект безопаснее.