Перейти к содержимому

AutoMessage [1.21]

⚡ AutoMessage — высокопроизводительный плагин для полностью настраиваемых автоматических сообщений по всему серверу.

FabricForgePaperPurpur
Загрузчики
FabricForgePaperPurpur
Скачиваний на Modrinth
12,7 тыс.
Подписчиков на Modrinth
45
версий
17
Обновлён
11 октября 202611 окт.
Опубликован
в 2023
Auto bossbar message feature preview · свайп

Коротко о моде

Работает на Fabric, Forge, Paper и Purpur
Для Minecraft 1.17–26.3
Последняя версия — 3.0.1 от 11 октября 2026
Лицензия GPL-3.0-only — бесплатно
Где нужен
В игренеизвестноНа серверенеизвестно

Автор не указал, где нужен мод

Версии игры1.17–26.3
Описание переведено автоматическиПоказать оригинал (EN)

AutoMessage — нужное сообщение, нужному игроку, в нужный момент

Последний релиз Статус сборки Java 21 или новее; Java 25 для Minestom Minecraft от 1.21 до 26.2 Шесть целевых платформ

Загрузки Modrinth Загрузки SpigotMC Доступно на Hangar

Не очередной чат-ротатор. Полноценный движок объявлений.
Адресные, локализованные и привязанные к событиям рассылки для современных серверов и сетей Minecraft.

6 платформ  ·  8 способов показа  ·  8 правил аудитории  ·  3 триггера событий  ·  3 языка из коробки  ·  один рендер на язык  ·  без базы данных

🧭 Зачем нужен AutoMessage

⚙️ Установка и настройка

📖 Справочник

📣 Рассылки должны привлекать внимание

Игроки привыкают игнорировать объявления, когда каждое сообщение приходит всем подряд. AutoMessage делает общение сервера осознанным: у каждого потока своё расписание, каждое сообщение само выбирает аудиторию, а текст приходит на том языке, на котором игрок действительно играет — из одного общего ядра, работающего на Bukkit, Folia, Sponge, Velocity, Fabric и Minestom.

Три поверхности объявлений в игре одновременно: отсчёт в боссбаре вверху экрана, полноэкранный титул посередине и строка чата под ним

Один набор объявлений в игре на одном сервере: отсчёт в боссбаре, полноэкранный титул и строка чата.

Полное объявление, от начала до конца

Поприветствуй вернувшихся ветеранов через три секунды после входа — не по таймеру, не новичков и на их родном языке. Всё это описывают два файла:

# scheduledMessages.yml - кто получает и когда
messages:
  - name: welcome-back
    trigger:
      type: JOIN
      delay: 3s
    rules:
      - type: PLAYTIME
        min: 10h
# lang/en.yml - что говорится
announcements:
  welcome-back:
    - chat: "<gray>Welcome back, <aqua>{PLAYER}<gray>."
      sound: "entity.player.levelup MASTER 1.0 1.2"

И вот что сервер делает с ними:

Два игрока заходят. Через три секунды ветеран с 240 часами игры проходит правило по времени и получает приветствие со звуком повышения уровня; новичок с двенадцатью минутами игры не получает ничего.

Это весь набор функций в миниатюре: событие вместо часов, аудитория вместо всех и текст, который живёт рядом со всеми остальными переводами.

⚖️ Больше, чем ротация списка

Слоган — не маркетинг. Ротатор отвечает на один вопрос — что мне сказать дальше? — и отправляет ответ всем, на одном языке, по одним часам.

Обычный ротаторAutoMessage
Кто получаетВсе онлайнПрава, группа, мир, число онлайн, время игры — комбинируются через ANY_OF, NONE_OF, NOT
Когда срабатываетОдин глобальный интервалРасписание для каждого канала плюс триггеры JOIN, FIRST_JOIN и перезаряжаемый PLAYER_COUNT
Как выглядитСтрока чатаЧат, экшенбар, титул, субтитул, боссбар и звук, объединённые в одно объявление
Что говоритОдин текст для всехРодной язык игрока с запасным вариантом для каждого сообщения
Где работаетОдин тип сервераBukkit, Folia, Sponge, Velocity, Fabric и Minestom, каждый — нативный артефакт

Детали под капотом

🔀 Четыре стратегии ротации

SHUFFLE, SEQUENTIAL, RANDOM или взвешенная — выбирается для каждого канала. Shuffle раздаёт всю колоду, прежде чем что-то повторится.
🧩 Конфигурация под среду выполнения

Прокси никогда не видит правило мира или триггер первого входа. Опции, которые платформа не может выполнить, не пишутся в файл, а не пишутся и игнорируются.
👁 Предпросмотр перед публикацией

`/automessage view ` показывает настоящее локализованное сообщение только тебе, игнорируя правила аудитории.
↗ За пределами сервера

Зеркалирование содержимого чата в вебхук Discord с удалением плейсхолдеров только для игроков и отключёнными автоматическими упоминаниями.
♻ Перезагрузка, а не рестарт

/automessage reload применяет расписания, сообщения и языки на месте — включая файл перевода, добавленный во время работы сервера.
🪶 Лёгкий путь отправки

Без базы данных. Пустой сервер завершается досрочно, плейсхолдеры сканируются один раз на сообщение, а не один раз на объявление, и все, читающие один и тот же текст на одном языке, обслуживаются одним рендером.

🎯 Охватите именно тех, кто должен это услышать

Правила комбинируются. Каждое правило верхнего уровня должно пройти, а ANY_OF, NONE_OF и NOT вкладываются внутрь них, когда аудитории нужно больше, чем просто И.

Двенадцать игроков онлайн; правило, требующее разрешение rank.vip и минимум десять часов игры, выбирает пятерых из них, остальные остаются тёмными

Те же правила применяются к сообщению, отправленному по событию, поэтому приветствие при входе, ограниченное разрешением, никогда не дойдёт до того, у кого его нет, просто потому что он зашёл на сервер.

⚡ Срабатывай по событию, а не по таймеру

Сообщение с триггером полностью покидает ротацию своего канала и ждёт, пока что-то произойдёт.

Три дорожки: канал, срабатывающий по пятиминутному периоду, триггер входа, срабатывающий через три секунды после подключения игрока, и веха по количеству игроков, срабатывающая один раз при ста онлайн и перезаряжающаяся только после того, как количество упадёт ниже

PLAYER_COUNT стоит прочитать дважды: он срабатывает один раз при росте и перезаряжается только после того, как сервер опустится ниже порога, так что население, колеблющееся на границе, не объявляет одну и ту же веху каждый раз, когда кто-то заходит.

🪶 Почти ничего не стоит вашему серверу

Форматирование — самая дорогая часть объявления. Цвета, градиенты, текст при наведении и плейсхолдеры — всё это нужно разобрать, прежде чем хоть один символ дойдёт до кого-либо, и очевидный способ сделать это — по разу для каждого игрока, который его получает. Пятьсот игроков онлайн означают, что одно и то же предложение собирается пятьсот раз, чтобы сказать одну вещь, в главном потоке, пока остальной тик ждёт своей очереди.

AutoMessage собирает его один раз на язык и передаёт готовый результат всем, кто его читает.

Одно объявление доходит до 500 игроков. Форматирование по разу на игрока означает 500 разборов одного и того же текста и стоит 5.16 мс, около десятой части тика сервера. AutoMessage форматирует один раз на язык и стоит 0.34 мс.

Форматирование на игрокаAutoMessage
Разборов на объявлениеОдин на игрока, то есть 500Один на язык, который действительно читают
Время в главном потоке5.16 мс0.34 мс
Доля от тика в 50 мс~10%, каждое объявление~0.7%

Это в 15 раз меньше времени главного потока на объявление, измерено на реальном пути отправки при 500 зрителях онлайн — а не на микробенчмарке одной функции. Остаётся лишь передать готовый текст каждому соединению, чего не избежать ни одному плагину.

Экономия растёт с количеством игроков, и настройка ничего вам не стоит: нет кэша, который нужно подбирать по размеру, нет параметра для тюнинга и не нужно ни от чего отказываться.

Он никогда не меняет корректность на скорость. Сообщение, которое читается по-разному для каждого игрока — называющее {PLAYER} или содержащее любой токен PlaceholderAPI — всё равно собирается для каждого из них, потому что только расширение за этим токеном знает, увидят ли два игрока одно и то же. Группировка применяется ровно там, где текст действительно идентичен, и нигде больше.

Ещё три места, где путь отправки отказывается делать лишнюю работу:

  • Плейсхолдеры сканируются один раз на сообщение, а не один раз на объявление. Какие токены содержит сообщение, определяется текстом, поэтому это вычисляется при чтении файлов и запоминается до перезагрузки — вместо того чтобы выводиться заново каждый раз, когда срабатывает канал.
  • Пустой сервер замыкается накоротко. Никого онлайн — значит, никакого выбора, никакого форматирования и никакой работы.
  • Ничто не трогает диск во время объявления. Ни базы данных, ни записей игроков, ни I/O на горячем пути.

🌐 Один движок. Шесть сред выполнения

AutoMessage использует общее платформенно-нейтральное ядро и небольшой адаптер среды выполнения для каждого типа сервера. Это значит, что поведение остаётся привычным, а планирование, зрители, права и хуки жизненного цикла остаются нативными для нижележащей платформы.

Одно платформенно-нейтральное ядро, подключённое к шести артефактам: Bukkit, Folia, Sponge, Velocity, Fabric и Minestom

АртефактСреда выполненияПоддерживаемая линейкаJavaПримечания по платформе
BukkitSpigot, Paper, Purpur и другие серверы на базе BukkitMinecraft 1.21–26.221+Полный набор функций; опциональная интеграция с PlaceholderAPI
FoliaFoliaMinecraft 1.21–26.221+Отдельное региональное планирование; опциональная интеграция с PlaceholderAPI
SpongeSponge API 17Minecraft 1.21.1021+Полный набор функций, кроме PlaceholderAPI
VelocityПрокси Velocity 3.5.1Среда выполнения прокси21+Нет мира, времени игры, первого входа и возможностей PlaceholderAPI
FabricВыделенный сервер FabricMinecraft 1.21.1121+Серверный мод; требуется Fabric API; нет PlaceholderAPI
MinestomВстроенная библиотека MinestomПротокол 1.21.1125+Библиотека в classpath; нет мира, времени игры, первого входа и PlaceholderAPI; правила прав/групп требуют вашего колбэка

[!NOTE] Java 21 — это минимальная версия байткода для плагинов, а не обещание, что каждая версия сервера Minecraft работает на Java 21. Используйте JVM, требуемую вашим сервером; сам Minestom требует Java 25.

Каждый артефакт создаёт конфигурацию с учётом платформы. Опции, которые среда выполнения не может соблюсти, опускаются, а не генерируются и молча игнорируются.

Один и тот же сгенерированный файл на Paper и на прокси Velocity: правило мира, правило времени игры, триггер первого входа, плейсхолдер мира, примечание о PlaceholderAPI и пример времени игры отсутствуют в файле прокси

А как же Quilt?

Отдельного артефакта для Quilt нет. Quilt умеет читать метаданные Fabric, но эта ветка не заявляет протестированную версию Quilt. Считайте jar-файл Fabric на Quilt экспериментальным и принесите совместимый Fabric API сами.

🗂 Модель конфигурации

AutoMessage разделяет когда, кто и что. Добавление языка никогда не требует копирования правил планирования, а изменение интервала канала никогда не затрагивает текст сообщения.

flowchart LR
    schedule["config.yml<br/>КОГДА<br/>каналы · периоды · селекторы"]
    audience["scheduledMessages.yml<br/>КТО<br/>правила · веса · триггеры"]
    content["lang/*.yml<br/>ЧТО<br/>локализованные уведомления MiniMessage"]
    minecraft["Minecraft<br/>ВЫВОД ИГРОКУ"]
    discord["discordWebhook.yml<br/>ОПЦИОНАЛЬНОЕ ЗЕРКАЛО"]

    schedule --> audience --> content --> minecraft
    content -. "текст чата" .-> discord

    classDef config fill:#11182d,stroke:#8b7cf6,color:#eef0ff,stroke-width:1px;
    classDef output fill:#0d2028,stroke:#45d7e8,color:#ecfeff,stroke-width:1px;
    class schedule,audience,content config;
    class minecraft,discord output;
ФайлОтветственность
config.ymlГлавный переключатель, язык по умолчанию, каналы, задержки запуска, периоды и селекторы
scheduledMessages.ymlНазвания сообщений, привязка к каналам, веса, правила аудитории и триггеры событий
`lang/.yml`Локализованные ответы команд и сами полезные нагрузки объявлений MiniMessage
discordWebhook.ymlОпциональный вебхук Discord, отображаемое имя и аватар

📥 Get AutoMessage

Что нужноГде взять
Актуальная публичная сборка BukkitModrinth · SpigotMC · Hangar
История релизов и списки измененийGitHub Releases
Мультиплатформенные артефакты из этой веткиСобрать все шесть из исходников

[!IMPORTANT] Статус релиза: этот README описывает локальную мультиплатформенную ветку. Текущие публичные страницы всё ещё относятся к прежней линейке релизов, ориентированной на Bukkit. Пока новый релиз на GitHub не опубликует все шесть артефактов, собирайте мультиплатформенные jar-файлы командой ./gradlew dist.

🚀 Быстрый старт

  1. Возьмите артефакт, собранный под вашу среду выполнения. Jar-файлы для платформ намеренно разделены.
  2. Положите его в директорию plugins/ или mods/ вашей платформы. Для Minestom добавьте jar в classpath приложения и используйте билдер, показанный ниже.
  3. Запустите сервер один раз. AutoMessage создаст размеченную конфигурацию и рабочие примеры объявлений.
  4. Отредактируйте config.yml, scheduledMessages.yml и файлы внутри lang/.
  5. Выполните /automessage reload, затем проверьте сообщение командой `/automessage view `.

[!TIP] Начните с созданных файлов. Это не пустые шаблоны: каждое доступное поле объяснено рядом с рабочим примером, а содержимое подстраивается под платформу, которая их создала.

🛠 Создайте своё первое объявление

Пример ниже создаёт независимый поток событий, добавляет в него одно объявление и отображает несколько типов уведомлений из одной локализованной нагрузки.

1. Запланируйте поток

# config.yml
enabled: true
fallbackLanguage: en

channels:
  - name: default
    enabled: true
    initialDelay: 1m
    period: 5m
    selector: SHUFFLE

  - name: events
    enabled: true
    initialDelay: 30s
    period: 15m
    selector: SEQUENTIAL

2. Зарегистрируйте объявление

# scheduledMessages.yml
messages:
  - name: event-night
    channel: events

3. Продумайте, что увидят игроки

# lang/en.yml
announcements:
  event-night:
    - chat:
        - "<dark_gray>[<gold>EVENT<dark_gray>] <gray>The arena opens in <gold>5 minutes<gray>."
        - "<gray>Click <click:run_command:'/warp arena'><hover:show_text:'<yellow>Teleport'><aqua><u>here</u></aqua></hover></click> to join."
      actionbar: "<yellow>Prepare your loadout - the event starts soon"
      title: "<gradient:#ffd166:#ff6b6b><bold>EVENT NIGHT</bold></gradient>"
      subtitle: "<gray>The arena opens in 05:00"
      times: "500ms 3s 500ms"
      bossbar:
        message: "<light_purple>Event countdown"
        duration: 10s
        color: PURPLE
        overlay: PROGRESS
        progress: 0.75
      sound: "block.note_block.pling MASTER 1.0 1.0"

Одно и то же объявление сразу на четырёх поверхностях: отсчёт в боссбаре, заголовок и подзаголовок с градиентом, две строки в чате и экшнбар над хотбаром

Используйте только те части, которые подходят сообщению. Простое объявление в чате может быть одной строкой; демонстрационное объявление может сочетать все поверхности выше.

📖 Справочник

Каналы объявлений и селекторы

У каждого канала своё расписание и независимое состояние селектора:

channels:
  - name: tips
    enabled: true
    initialDelay: 1m
    period: 5m
    selector: SHUFFLE

  - name: promotions
    enabled: true
    initialDelay: 2m
    period: 20m
    selector: WEIGHTED
СелекторПоведение
SHUFFLEПеремешивает порядок и показывает каждое сообщение по разу, прежде чем что-то повторится
SEQUENTIALИдёт строго по настроенному списку
RANDOMВыбирает независимо; одно и то же сообщение может выпасть два раза подряд
WEIGHTEDВыбирает случайно пропорционально weight каждого сообщения

SEQUENTIAL и SHUFFLE сохраняют свою позицию при обычной перезагрузке конфигурации. Вес 0 закрепляет сообщение только в канале WEIGHTED; остальные селекторы веса не учитывают.

Правила аудитории

Правила верхнего уровня работают как логическое И. Вкладывай ANY_OF, NONE_OF и NOT, когда аудитории нужна более выразительная логика.

ПравилоСовпадение
PERMISSIONЗрители с правом доступа
GROUPЗрители с `group.`; это проверка прав, а не прямой запрос к LuckPerms/Vault
WORLDЗрители в одном из настроенных миров
PLAYER_COUNTПока живой онлайн находится в заданном диапазоне
PLAYTIMEЗрители, чьё нативное время игры на платформе попадает в заданный диапазон
ANY_OFХотя бы одно вложенное правило
NONE_OFНи одно из вложенных правил
NOTОбратное к одному вложенному правилу
messages:
  - name: vip-event
    channel: events
    rules:
      - type: ANY_OF
        rules:
          - type: PERMISSION
            permission: rank.vip
          - type: PERMISSION
            permission: rank.staff
      - type: PLAYER_COUNT
        min: 10
        max: 100

Правила всё ещё применяются к сообщениям, отправленным по триггеру события. Правила под конкретную платформу создаются только там, где среда выполнения может предоставить нужные данные.

Триггеры событий

Сообщение по триггеру полностью выходит из ротации своего канала по времени:

messages:
  - name: welcome-back
    trigger:
      type: JOIN
      delay: 3s

  - name: first-join-welcome
    trigger:
      type: FIRST_JOIN
      delay: 3s

  - name: one-hundred-online
    trigger:
      type: PLAYER_COUNT
      threshold: 100

PLAYER_COUNT срабатывает один раз при достижении порога и перезаряжается только после того, как онлайн опустится ниже него. FIRST_JOIN недоступен на средах выполнения, которые не предоставляют постоянный сигнал первого входа.

[!NOTE] /automessage enable и /automessage disable управляют каналами по расписанию. Объявления по триггерам событий работают независимо.

Языки и поведение при отсутствии перевода

AutoMessage поставляется с en, pl и de. Добавь другой язык, скопировав файл в `lang/.yml`, переведя его и выполнив `/automessage reload`.

Для игрока с pt_br AutoMessage ищет:

  1. lang/pt_br.yml
  2. lang/pt.yml
  3. fallbackLanguage из config.yml

Отсутствующее объявление откатывается по отдельности, так что новый перевод не обязан быть полным, чтобы приносить пользу.

MiniMessage, плейсхолдеры и части уведомлений

Весь текст использует Kyori MiniMessage, включая цвета, градиенты, оформление, текст при наведении и действия по клику.

Встроенные плейсхолдеры:

Привязанные к игрокуПривязанные к серверу
{PLAYER} · {DISPLAY_NAME} · {UUID} · {WORLD}{ONLINE} · {MAX_PLAYERS} · {DATE} · {TIME}

На Bukkit и Folia установленный PlaceholderAPI определяется автоматически. Стандартные токены %placeholder_name%, содержащие буквы, цифры и подчёркивания, можно использовать вместе со встроенными.

Доступные ключи уведомлений:

КлючЗначение
обычная строка / chatОдна строка чата или список строк
actionbarТекст MiniMessage, отображаемый над хотбаром
title / subtitleСлои заголовка; любой из них можно использовать независимо
timesТри длительности: появление, удержание, исчезновение
hideTitleЯвно очистить текущий заголовок
bossbarСообщение, длительность, цвет, оверлей и необязательный прогресс 0.0–1.0
soundКлюч звука или key source volume pitch

Нужна наглядная отправная точка? Попробуйте внешний EternalCode Notification Generator и адаптируйте сгенерированное уведомление под структуру языкового файла выше.

Формат времени

Каждая длительность принимает явную единицу измерения, и единицы можно комбинировать:

ЕдиницаЗначениеПример
msмиллисекунды500ms
sсекунды30s
mминуты5m
hчасы2h
dдни1d

1m30s допустимо. Обычное число интерпретируется как секунды. Периоды каналов короче 50ms нормализуются, а среды выполнения на основе тиков в конечном счёте выполняются на границах тиков.

Зеркалирование в Discord через вебхук

Установите enabled: true и укажите URL вебхука Discord в discordWebhook.yml, чтобы зеркалировать запланированные и триггерные объявления.

Интеграция намеренно консервативна:

  • зеркалируются только части чата;
  • MiniMessage преобразуется в обычный текст;
  • используется настроенный резервный язык;
  • серверные плейсхолдеры подставляются, а значения, привязанные к игроку, удаляются;
  • автоматические упоминания в Discord отключены;
  • вебхук должен использовать HTTPS и хост/путь вебхука Discord;
  • ответы с ограничением частоты повторяются с задержкой.

Вебхук включается по желанию и не выполняет исходящих запросов, пока отключён или не имеет допустимого URL. Перезапустите AutoMessage после изменения состояния включения или URL вебхука, чтобы соединение было пересоздано.

Команды и права

КомандаПравоОписание
/automessage enablecommand.automessage.enableВозобновить запланированные каналы объявлений
/automessage disablecommand.automessage.disableПриостановить запланированные каналы объявлений
/automessage reloadcommand.automessage.reloadПерезагрузить расписания, определения сообщений и языки
`/automessage view `command.automessage.viewПредпросмотр одного локализованного сообщения; только для игрока, с автодополнением
/automessage nextcommand.automessage.nextПоказать, что каждый канал объявит следующим и сколько времени до срабатывания, не расходуя его
`/automessage send `command.automessage.sendОтправить следующее объявление этого канала сейчас; его интервал перезапускается с этого момента
/automessage togglecommand.automessage.toggleИгрок отключает объявления для себя или включает обратно; сохраняется между перезапусками
/automessage statscommand.automessage.statsПо каждому каналу: сколько он пронёс, когда вышло последнее и когда ожидается следующее, затем то же самое по каждому сообщению
Встраивание AutoMessage в Minestom

У Minestom нет каталога плагинов. Инициализируй его, помести AutoMessage в classpath и включи библиотеку после инициализации самого Minestom:

MinecraftServer.init();

AutoMessageMinestom autoMessage = AutoMessageMinestom.builder()
        .dataDirectory(Path.of("automessage"))
        .permissions((sender, node) -> myPermissions.check(sender, node)) // optional
        .enable();

// During your server shutdown:
autoMessage.shutdown();

Без колбэка разрешений AutoMessage использует уровень оператора Minestom для защиты своих команд. Правила для разрешений и групп тогда опускаются, потому что среда выполнения не может ответить на них точно.

🔨 Сборка из исходников

Для сборки каждой среды выполнения требуется JDK 25. Из корня репозитория выполни:

./gradlew dist

Задача запускает все проверки, собирает jar для каждой платформы и синхронизирует шесть устанавливаемых артефактов в build/dist:

  • Bukkit
  • Folia
  • Sponge
  • Velocity
  • Fabric
  • Minestom

Если какая-либо проверка не проходит, дистрибутив не создаётся. Обычный ./gradlew build выполняет те же проверки проекта, но оставляет артефакты внутри их отдельных модулей.

💛 Поддержать проект

AutoMessage — бесплатный, открытый и поддерживаемый независимо.

Нашёл проблему?Хочешь внести вклад?Хочешь поддержать разработку?
Открыть отчёт об ошибке или запрос на новую функциюПрочитай руководство по вкладу и открой pull requestGitHub Sponsors · PayPal

Пожалуйста, соблюдай Кодекс поведения проекта во всех сообществах. AutoMessage распространяется под GNU General Public License v3.0.

Если AutoMessage улучшает общение на твоём сервере, поставь репозиторию звезду.
Это помогает другим владельцам серверов узнать о проекте.

Частые вопросы

Как установить AutoMessage [1.21]?

Установите Fabric под свою версию Minecraft, скачайте AutoMessage [1.21] под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть AutoMessage [1.21]?

У AutoMessage [1.21] есть сборки для Minecraft 1.17–26.3.

Лицензия и источник
GNU General Public License v3.0 onlyможно использовать и распространять; изменённые версии — под той же лицензией и с исходным кодом
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее