Как настроить награды за голосование (Votifier, VotingPlugin и другие)

Установите сопутствующий плагин, настройте Votifier для мгновенной доставки наград, либо подключите к этому сайту VotingPlugin, SuperVotes или SuperbVote - с теми самыми значениями, которых этот сайт действительно ожидает.

Любому плагину наград нужны от вас две вещи: способ узнать, что голос был подан, и что-то, что запустится, когда это произойдёт. В этой статье разберём оба варианта - сопутствующий плагин, который публикует этот сайт, Votifier для мгновенной доставки, и что делать, если у вас уже установлен VotingPlugin, SuperVotes или другой плагин наград.

Вариант A: плагин VoxelRank (рекомендуется)

Сопутствующий плагин напрямую общается с API этого сайта. Votifier не требуется - плагин работает, периодически опрашивая сервер на предмет неполученных голосов, поэтому он работает даже за NAT и наверстывает всё, что было пропущено, пока сервер был выключен. Votifier тоже доступен - как опциональное дополнение для мгновенной доставки (см. Вариант B).

  1. Скачайте jar-файл из вашей Панели управления (на карточке вашего сервера появляется кнопка загрузки, как только собрана сборка), либо напрямую с /download/plugin.
  2. Поместите его в plugins/ и один раз запустите сервер. Это создаст plugins/VotingSite/config.yml.
  3. Откройте страницу Изменить вашего сервера → вкладку Награды и голосование и скопируйте показанный там Ключ API.
  4. Вставьте его в site.api-key в config.yml (заодно проверьте, что site.url указывает на этот сайт), затем выполните /votingsite reload.
  5. Решите, как голоса должны до вас доходить, настроив mode в config.yml:
    • poll (по умолчанию) - плагин сам забирает неполученные голоса. Больше ничего устанавливать не нужно.
    • votifier - сайт отправляет каждый голос в момент его подачи. Требует NuVotifier или другой Votifier-listener (Вариант B ниже).
    • both - push через Votifier с опросом в качестве подстраховки, без дублей благодаря id голоса.
  6. Заполните rewards.commands (а если нужно, ещё milestones и vote-party) командами консоли, которые должны выполняться при голосовании.
  7. Проверьте: /votingsite testvote <player> симулирует голос без ожидания настоящего. /votingsite status показывает режим, принимается ли ключ API и сколько голосов уже доставлено.

Игроки получают свою ссылку для голосования и счётчик голосов через /voxelrank vote - а не через /vote, которую этот плагин намеренно никогда не занимает (два плагина, борющихся за одну и ту же команду - это именно то, из-за чего награда незаметно перестаёт работать, см. соответствующую заметку в config.yml).

Вариант B: мгновенная доставка через NuVotifier

Пропустите этот раздел, если режим poll вас вполне устраивает - он не обязателен. Добавьте его, когда важны те несколько минут задержки опроса, или когда вы предпочитаете отдельный плагин наград вместо встроенного на этом сайте.

NuVotifier - это активно поддерживаемый форк оригинального Votifier: сам оригинальный проект сегодня практически не поддерживается, поэтому «установить Votifier» на практике означает установить NuVotifier (или совместимый форк вроде VotifierPlus).

  1. Поместите jar-файл NuVotifier в plugins/ и перезапустите сервер. На сервере Bukkit/Spigot/Paper он сохраняет классическое имя папки plugins/Votifier/ ради обратной совместимости - это собственная папка NuVotifier, а не остаток от старого плагина - и при первом запуске создаёт в ней config.yml и пару ключей в rsa/.
  2. Получите свои учётные данные из plugins/Votifier/config.yml: токен v2 (рекомендуется) генерируется автоматически под ключом default в разделе tokens: - скопируйте его как есть. Если предпочитаете старый способ, публичный ключ v1 находится в plugins/Votifier/rsa/public.key; соответствующий private.key держите в той же папке на сервере и никогда никому не передавайте.
  3. Проверьте port, на котором слушает NuVotifier (по умолчанию 8192), и убедитесь, что он открыт в вашем файрволе или панели хостинга - это отдельный порт от обычного порта Minecraft, и большинство хостингов не открывают его автоматически.
  4. На странице Изменить вашего сервера → вкладке Награды и голосование укажите хост Votifier (адрес вашего сервера) и этот порт, затем вставьте токен v2 или ключ v1 из шага 2. Если заполнены оба, используется только один - приоритет у v2.
  5. Нажмите Отправить тестовое голосование прямо на этой вкладке. Это отправит настоящий пакет Votifier на хост/порт/ключ/токен, которые сейчас указаны в форме - предварительно ничего сохранять не нужно - и сразу покажет, принял ли его NuVotifier. Если не получилось, собственный консольный лог NuVotifier (по умолчанию debug: true) покажет, дошло ли соединение до плагина вообще, что быстро отличает «неверный ключ» от «заблокированного порта».
  6. Сохраните, затем подайте настоящий голос и убедитесь, что награда приходит сразу, а не при следующем опросе.

Под капотом этот сайт отправляет стандартное рукопожатие VOTIFIER 2 с JSON-payload, подписанным HMAC, если задан токен v2, а иначе откатывается к классическому блоку v1, зашифрованному RSA - тот же протокол, который уже понимает любой Votifier-совместимый listener, ничего специфичного для этого сайта.

Уже используете VotingPlugin?

Если на вашем сервере уже работает VotingPlugin, устанавливать наш плагин не нужно - и вручную добавлять туда этот сайт тоже не нужно, потому что для него в VotingPlugin есть поддерживаемый пресет.

Выполните это в игре как оператор (или с правом VotingPlugin.Commands.AdminVote.VotePresets):

/av VotePresets

VotingPlugin скачивает актуальный список пресетов из собственного репозитория VotingPlugin-Presets, даёт выбрать один - VoxelRank среди них есть - а затем запрашивает значения, которые нужны этому пресету: отображаемое имя, URL голосования вашего объявления, задержку между голосами и тому подобное. Либо сразу перейдите к делу со своей собственной ссылкой для голосования:

/av VotePresets https://voxelrank.com/server/your-slug/vote

Указывайте https://; VotingPlugin автоматически сопоставляет имя хоста с нужным пресетом, вместо того чтобы заставлять вас искать его в списке.

В любом случае он записывает или обновляет соответствующую запись под VoteSites: в VoteSites.yml - ServiceSite, VoteURL, разумные значения задержки по умолчанию, а также заглушку отображаемого предмета или сообщение с благодарностью, если у сайта их ещё нет - а затем перезагружает сайты для голосования за вас. Всё остальное, что уже есть в файле, остаётся нетронутым. Сделайте резервную копию VoteSites.yml, если меняете уже настроенную конфигурацию, а не добавляете новую, и проверьте, что было записано - особенно награды, ведь пресет - это отправная точка, а не готовая конфигурация - прежде чем рекламировать это игрокам.

VotingPlugin по-прежнему нуждается в собственном подключении Votifier, чтобы реально получать голоса - направьте его на ту же настройку NuVotifier из Варианта B выше. Также ему нужно, чтобы сервер мог достучаться до GitHub (raw.githubusercontent.com) для загрузки пресетов вообще; если /av VotePresets сообщает об отсутствии доступных пресетов, это проблема сети или файрвола на сервере, а не отсутствующий пресет. /av gui, либо прямое редактирование VoteSites.yml, по-прежнему работают как запасной вариант - ServiceSite должен звучать точно как VoxelRank.com, что можно подтвердить командой /av servicesites после реального или административного тестового голоса.

Другие плагины наград

Используете что-то более лёгкое, чем VotingPlugin? SuperVotes и SuperbVote - оба лёгкие Votifier-listener'ы с собственными системами vote-party и команд наград. Ни один из них не отслеживает пресеты по сайтам, как это делает VotingPlugin - направьте любой из них на тот же хост, порт и токен v2 (или ключ v1) Votifier с вкладки Награды и голосование выше и настройте его награды так же, как для любого другого голосования.

Решение проблем

  • При /votingsite testvote ничего не происходит. Сначала проверьте /votingsite status - если ключ API не принимается, голосам (реальным или тестовым) некуда идти. Скопируйте его заново со страницы Изменить и убедитесь, что в конце нет лишнего пробела.
  • Push от Votifier никогда не приходит, но опрос работает. Обычно блокируется именно порт Votifier, а не API - большинство хостингов по умолчанию открывают исходящий HTTP-трафик, но не произвольный дополнительный входящий порт. mode: both (или запуск listener'а другого плагина наград отдельно) - разумный постоянный запасной вариант вместо борьбы с файрволом.
  • Награда срабатывает, но в игре ничего не появляется. Команды наград выполняются с консоли, поэтому команда, которая работает только если её ввёл игрок (без прав, без op), тихо провалится. Сначала проверьте точную команду из консоли.
  • VotingPlugin пишет в лог "invalid service site" или никогда не сопоставляет голос. Значение ServiceSite должно совпадать посимвольно, кроме регистра. Проверьте его командой /av servicesites, а не угадывайте по доменному имени этого сайта.
  • /av VotePresets сообщает об отсутствии доступных пресетов, или URL ничему не соответствует. Список пресетов скачивается с GitHub во время выполнения, так что почти всегда дело в собственной сети сервера - файрвол, прокси, DNS или сбой GitHub - блокирующей raw.githubusercontent.com, а не в том, что VoxelRank убрали из списка. Совпадение по URL также требует полного адреса, включая https://; голые имена хостов не распознаются.
  • Настройки на вкладке Награды и голосование как будто не сохраняются. Они применяются только к подтверждённому объявлению - см. фильтр Заявлен в списке серверов. Импортированная неподтверждённая заглушка ещё не имеет владельца, для которого можно настраивать награды; сначала подтвердите её.

Быстрые ответы

Нужен ли мне вообще Votifier?

Нет. Режим poll (по умолчанию для плагина VoxelRank) работает без установки чего-либо ещё - Votifier лишь сокращает задержку между голосом и наградой и является единственным путём, если вы предпочитаете вместо этого использовать VotingPlugin, SuperVotes или SuperbVote.

Могу ли я использовать наш плагин и VotingPlugin одновременно?

Не для одной и той же награды - выберите один плагин, который будет реально выполнять команды награды, иначе голос может быть оплачен дважды. Сам Votifier может уведомлять сразу несколько listener'ов, так что это правило «не настраивайте одну и ту же награду дважды», а не техническое ограничение.

Мой хостинг не даёт открыть дополнительные порты для Votifier.

Используйте режим poll с плагином VoxelRank. Он делает только исходящие запросы, так что открывать ничего не нужно. У VotingPlugin и похожих плагинов наград нет аналога режима опроса - им нужен входящий порт Votifier.

Нужна помощь?

Застряли на каком-то из шагов выше, или что-то не совпадает с тем, что реально отправляет ваш сервер? Свяжитесь с нами - самые быстрые способы задать вопрос о голосах и наградах перечислены прямо там.