Плагин [INFO/ADMN/CHAT] rscMessages v0.7.5b — менеджер межсерверных объявлений [1.5.x-1.10.x]

Reality_SC

Старожил
Пользователь
Баллы
123
Ник в Minecraft
Reality_SC
Плагин предназначен для управления именованными списками (lists) текстовых рассылок (сообщений (messages) в чат). Хранит списки и сообщения в MySQL. Простота настройки и интеграции с чем-либо, удобные и интуитивные команды. Поддерживает json-сообщения (сервера 1.7+) и плейсхолдеры (через PlaceholderAPI).

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

Основные функции:
  • Показ сообщений, поделённых тематически (на списки), игрокам на множестве серверов.
  • По каждому списку: отдельные права на получение сообщений (receive), редактирование текста сообщений (edit) и изменение параметров показа (setup).
  • Возможность указать отдельный список, сообщения из которого будут показываться игрокам, если они играют на сервере время, меньшее указанного (являются Новичками — Newbies).
Команды:
  • /rscm list [список] — перечислить доступные Вам списки или сообщения из указанного списка.
  • /rscm info <список> [#] — посмотреть свойства самого списка или отдельного сообщения.
  • /rscm broadcast <список> [#] — инициировать рассылку из указанного списка или конкретного сообщения.
  • /rscm add <список> <текст> — добавить новое сообщение в список.
  • /rscm edit <список> <#> <текст> — заменить текст определённого сообщения на новый.
  • /rscm remove <список> [#] — удалить отдельное сообщение или целый список.
  • /rscm set <список> [#] <свойство> [значение] — установить определённое свойство списку или сообщению.
  • /rscm help [1|2] — страницы помощи по доступным Вам командам.
  • /rscm reload — перечитать config.yml и перезапустить плагин.
Подчёркнутые красные символы есть однобуквенные алиасы для соответствующих команд: l, i, b, a, e, r, s, h.

Права:
  • rscm.receive.<список> — право для получения рассылки сообщений указанного списка.
  • rscm.receive.* — игрок с таким правом будет получать сообщения из всех списков.
  • rscm.edit.<список> — листинг/просмотр свойств/создание/редактирование/удаление/вкл./выкл. сообщений из указанного списка.
  • rscm.setup.<список> — создание/настройка параметров/удаление списка. Включает в себя соответствующее edit-право.
  • rscm.admin — доступ ко всем командам плагина, но не включает в себя rscm.receive.*.
Свойства:
  • Списки имеют следующие свойства:
    • enable (вкл/выкл) — выключен (молчит) или включён (регулярно устраивает рассылки).
    • random (вкл/выкл) — рассылает сообщения по порядку или случайным образом.
    • delay_sec (сек) — период в секундах между ближайшими рассылками из этого списка.
    • prefix (текст) — константа, добавляющаяся перед каждым сообщением.
    • sound (текст) — константа, содержащая название звука, который будет проигран игроку при получении сообщения.
  • Сообщения имеют следующие свойства:
    • enable (вкл/выкл) — участвует ли сообщение в рассылке или нет (скрыто).
В префиксах списков и текстах сообщений можно использовать мои специальные коды цветов и стилей (как в rscPermissions). Сообщения имеют сквозную нумерацию по всем спискам, начиная с 1.

Настройка плагина:
Файл config.yml создаётся автоматически при первом запуске и содержит минимум необходимых настроек:
YAML:
settings:
  # Какой языковой файл использовать? Из коробки идут english и russian
  language: russian
  # Описание соединения с MySQL сервером
  connection:
    # Адрес сервера и название базы данных
    hostname: sql.example.com:3306/minecraft
    # Данные учётной записи на указанном СУБД
    username: minecraft-server
    password: qwertypassword
    # Префиксы, которые будут иметь таблицы lists и messages
    prefixes: rscm_
  # Как часто нужно обновлять данные из БД?
  fetch-interval-sec: 600
  # Дублировать проходящие по серверу рассылки в консоль?
  broadcast-to-console: false
  # Настройка сообщений, которые следует показывать Новичкам:
  for-newbies:
    # Название списка, содержащего сообщения. Новичкам не нужно иметь явно права, чтобы получать их.
    special-list-name: 'Newbies'
    # Интервал времени (сек) с момента первого захода, в течение которого игрок на сервере считается Новичком (604800 = 1 неделя)
    interval-sec: 604800
  # Добавлять префикс списка к сообщению в формате json?
  # (ожидается, что префикс + сообщение вместе дают корректную json-строку)
  add-prefix-to-json: false
  # Отправлять ли статистику использования?
  use-metrics: true
internal:
  version: 7
История изменений:
  • v0.7.5b — Операторы сервера больше не будут получать нежелательные сообщения.
  • v0.7.0b — Новичками теперь считаются не те, кто впервые зашёл на сервер, а кто впервые зашёл на него ранее, чем указанный интервал. за счёт этого плагин опять не использует Listener-ы. Изменения в парсере команд (теперь сложнее убить случайно список). Звуки, проигрываемые игрокам при получении сообщений (можно менять из игры), возможные значения тут.
  • v0.6.8b — интерпретация аргументов вида "#303" как нормальных чисел (т.е. как 303); добавлен инструмент для автоматического обновления (не тестировал); пробовал сделать проигрывание звуков при получении сообщений, но тоже пока не работает.
  • v0.6.4b — добавлена опция config.yml/settings.special-list-for-newbies.
  • v0.6.2b — добавлена поддержка полноценных json-сообщений (для серверов/клиентов, версии которых содержат эту функциональность, т.е. не менее 1.7). В таблицу messages добавлена колонка json, которая сообщает (если значение '1') плагину о наличии json-строки в колонке text. Добавлена опция config.yml/settings.add-prefix-to-json (по умолчанию false), которая разрешает конкатенацию префикса списка и json-строки (list.prefix + message.text должно давать корректную json-строку!). Для формирования корректных строк можно пользоваться сервисами наподобие этого.
    Данная функция требует установленного на сервере ProtocolLib версии не ниже 3.6.4.
  • v0.6.0b — добавлена поддержка плейсхолдеров с помощью плагина PlaceholderAPI. Список возможных заменителей можно найти здесь.
  • v0.5.1b — в таблицу messages добавлена колонка lifetime (типа TIMESTAMP), которая, если не NULL, определяет срок, после которого данное сообщение будет автоматически выключено (enabled установится в 0). Изменять значение из плагина нельзя, только устанавливать скриптами / SQL редакторами. Операторы сервера не получают сообщения из всех списков автоматически (теперь нужно явно указать право rscm.receive.* или конкретное с названием списка).
  • v0.4.4b — информация о сообщении включает сам текст сообщения; в консольном логе указывается, сколько игроков получили сообщения; обновление сообщений из базы происходит в параллельном потоке.
  • v0.4.3b — для получения списка онлайн игроков используется рефлексия, отсюда вернулась совместимость со старыми версиями сервером (1.5.x-1.6.x).
  • v0.4.2b — все текстовые строки вынесены в файлы перевода, сразу поставляются английский и русский; адекватнее реакции на команды; внутренние улучшения.
  • v0.3.7b — исправлены мелкие баги (eg., пустой список с random: true выбрасывал исключения), пересобрано под свежими зависимостями.
  • v0.3.5b — добавлена команда просмотра свойств списков/сообщений, другие исправления.
  • v0.3.2b — добавлена опция, позволяющая вкл/выкл показ сообщений в логе консоли.
  • v0.3.1b — исправлено неправильное выключение плагина (могло влиять на другие всё ещё работающие плагины).
  • v0.3.0b — первоначальная загрузка файла.
Пример №1:
Сервер с городами, главы городов имеют права setup для списков. Списки названы одноимённо с соответствующими городами. Доверенные жители могут иметь права на edit; остальные жители имеют только соответствующий receive. Игроки, не принадлежащие городу, не имеют никаких прав, относящихся к рассылке.
Пример №2:
Список ModeratorNotes с подсказками по командам и т.п. молодым неопытным модераторам, вне зависимости от сервера (если больше одного).
Пример №3:
Список Advert, в который рекламные сообщения попадают при их покупке через ЛК, имея ограниченное время действия (ЛК устанавливает колонку lifetime). Премиумам можно отключить показ рекламы, либо сделать ещё один список, от которого они не спрячутся, но помещение рекламы в него будет дороже.
rscm044b.png
 
Последнее редактирование:
Много используется ивентов?
Другими словами нагрузка меньше чем у AutoMessage?
 
Ни одного эвента, только по одному запланированному на попозже BukkitTask-у на каждый список. Теоретически нагрузку могут создавать только регулярные перечитывания из БД, т.к. пока они в основном потоке, а практически я ещё не имею множества замеров.

Собственно, почему я его накидал — у самого был AutoMessage, но я пытался помочь автору с какими-то кусками, сделать права на редактирование вроде бы по спискам отдельным, но возможно что-то сломал и он до сих пор сам не починил 😁 Короче там было запутано, а мне захотелось дополнительно списки засунуть в БД.
Позавчера начал, сегодня залил на DBO 🙂
 
Последнее редактирование:
Ни одного эвента, только по одному запланированному на попозже BukkitTask-у на каждый список. Теоретически нагрузку могут создавать только регулярные перечитывания из БД, т.к. пока они в основном потоке, а практически я ещё не имею множества замеров.

Собственно, почему я его накидал — у самого был AutoMessage, но я пытался помочь автору с какими-то кусками, сделать права на редактирование вроде бы по спискам отдельным, но возможно что-то сломал и он до сих пор сам не починил 😁 Короче там было запутано, а мне захотелось дополнительно списки засунуть в БД.
Позавчера начал, сегодня залил на DBO 🙂
Теперь подумываю про свою экономику...

Пиши, если что.
Так это ты сломал мой AutoMessage!
 
Так это ты сломал мой AutoMessage!
Если ты — ELCHILEN0, то я 😁 Нет, так нет 😉
Обновлено до v0.3.5b — добавлена команда /rscm info <list> [id].
В предыдущем, пропущенном на РБ релизе, было исправлено неверное отображение выключенных сообщений.
Обновлено до v0.3.7b — исправлен баг с исключением в консоли, обновлены зависимости.

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

Файл прикреплён:
 

Вложения

Последнее редактирование:
Приветствую. Возможно ли добавить, чтобы он сам обновлял список из БД через определенное время, а не только через reload?

Извиняюсь, он есть, не увидел :С
 
Последнее редактирование:
Обновлён до версии v0.4.1b, появилась возможность локализации. Сразу поставляется с английским и русским языками. Чтобы поставить русский язык, в config.yml поменяйте значение переменной settings.language на russian.
Все ссылки в верхнем посту актуальны.
Прошу перенести в Релизы плагинов; буду не против плашки Девелопера.
@Admin, больше по именам никого из управленцев не знаю, сорри.
Обновлён до версии v0.4.2b, только исправления редких некритических исключительных ситуаций.
 
Последнее редактирование модератором:
Собственно. Не пойму одного. Решил проверить рассылку сообщений, получаю ошибку.
upload_2015-3-18_12-23-18.png
 
Решил проверить рассылку сообщений, получаю ошибку.
Что в консоли? Сообщение #2 принадлежит списку tips?
Покажи, если не трудно, реакцию на /rscm list и /rscm list tips.

P.S. Вижу выше, хотя ты и отрезал это картинкой (зачем?), что написано "Такого списка не существует".
 
@Reality_SC,нет, это от другого запроса. Вот список сообщений.
Установил таймер на 900, т.е. 900 секунд, т.е. 15 минут, но сообщения не отправляются.
2dbm0pco.n1m_550968dabb0e0.png
 
@Dan_Romanenkov
Это список tips?
Что происходит в консоли, всё-таки?
Игроки имеют право rscm.receive.tips? Ты, как админ, может прописать себе rscm.receive.* (оно не прописывается автоматически ОПам, чтобы не засорять).
 
@Reality_SC , права есть не только на этот список.
В консоли происходит такое:
2015-03-18 15:48:35 [WARNING] [rscMessages] Task #19 for rscMessages v0.4.2b generated an exception
java.lang.NoSuchMethodError: org.bukkit.Server.getOnlinePlayers()Ljava/util/Collection;
at ru.simsonic.rscMessages.BukkitPluginMain.broadcastMessage(BukkitPluginMain.java:147)
at ru.simsonic.rscMessages.BukkitPluginMain.broadcastList(BukkitPluginMain.java:141)
at ru.simsonic.rscMessages.BukkitPluginMain$1.run(BukkitPluginMain.java:113)
at org.bukkit.craftbukkit.v1_6_R3.scheduler.CraftTask.run(CraftTask.java:58)
at org.bukkit.craftbukkit.v1_6_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:345)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:822)
at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:330)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:777)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:659)
at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
 
Понятно, сервер слишком старый. Они поменяли прототип метода getOnlinePlayers() и теперь он не может его найти. Сейчас подумаю, как решить это, я же всё-таки заявлял поддержку множества версий...
 
Последнее редактирование:
Понятно, сервер слишком старый. Они поменяли прототип метода getOnlinePlayer() и теперь он не может его найти. Сейчас подумаю, как решить это, я же всё-таки заявлял поддержку множества версий...
Сервер на версии 1.6.4. Не такой уж и старый.
 
В ближайшее время сделаю костыль. Не сегодня, но на этой неделе.
Если есть возможность, сегодня могу только принять чей-нибудь Pull Request.
Временно поправил шапку темы =\
 
В ближайшее время сделаю костыль. Не сегодня, но на этой неделе.
Если есть возможность, сегодня могу только принять чей-нибудь Pull Request.
Временно поправил шапку темы =\
Я так понимаю, что ближайшее время еще не наступило?
 
@Dan_Romanenkov, прошу прощения, я действительно забыл.

Вчера залил новую сборку (0.4.3b), сегодня ещё одну (0.4.4b), попробуй, должны работать.
 
Последнее редактирование:
Назад
Верх Низ