Перейти к содержанию

🤖 Discord-бот

Tribescore поставляется с сопутствующим Discord-ботом, который переносит соревнование вашего сервера в Discord — живая, автоматически обновляемая таблица лидеров, слэш-команды для поиска любого племени и автоматическая система выявления злоупотреблений, отмечающая подозрительное начисление очков.

Бот подключается напрямую к той же базе данных MySQL/MariaDB, что использует плагин. Он только читает таблицы очков плагина — он никогда не изменяет ваши очки — поэтому его безопасно запускать рядом с работающим сервером.

Возможности

  • Живая таблица лидеров — публикует и автоматически обновляет топ племён в выбранном вами канале, со стрелками движения ▲/▼ между периодами подсчёта.
  • Отрисовка изображением или встраиванием (embed) — показывайте таблицу как классический embed Discord или как отполированный PNG, отрисованный по одному из семи встроенных дизайнов (podium, spotlight, cards, bars, terminal, ark, dark). Шаблоны — это обычный HTML, который вы можете перестилизовать и оформить под свой сервер.
  • Слэш-команды/tribepoints и /getrank позволяют игрокам посмотреть очки и ранг любого племени. Названия команд и сообщения настраиваются.
  • Выявление злоупотреблений — три независимых детектора публикуют оповещения, когда начисление очков выглядит подозрительно, каждое с кнопкой «Игнорировать это оповещение» для подавления ложных срабатываний.
  • Автономный исполняемый файл — распространяется как единый самодостаточный Windows .exe. Не требуется ни браузер, ни дополнительные установки, даже для отрисовки изображений.

Требования

  • Установленный плагин Tribescore, записывающий данные в базу данных MySQL/MariaDB (см. Конфигурацию и Общую конфигурацию).
  • Приложение Discord и токен бота, созданные в Discord Developer Portal.
  • Windows-машина для запуска бота — он может работать где угодно, откуда доступна база данных.

Установка

  1. Скачайте бота из вашей панели управления Bytemart и распакуйте его.
  2. Откройте config.yml и настройте его (см. ниже).
  3. Задайте токен вашего бота и пароль базы данных — либо напрямую в config.yml, либо через переменные окружения LEADERBOARD_BOT_TOKEN и MYSQL_PASSWORD (рекомендуется, чтобы секреты не хранились в файле конфигурации).
  4. Пригласите бота на ваш сервер, дав ему разрешение отправлять сообщения, встраивания (embeds) и вложения в каналы таблицы лидеров и оповещений.
  5. Запустите исполняемый файл. При первом запуске он регистрирует свои слэш-команды и публикует таблицу лидеров.

💡 Если вы переименуете слэш-команду в config.yml, Discord может потребовать, чтобы бот был исключён и заново приглашён, прежде чем изменение вступит в силу.

Конфигурация (config.yml)

Бот настраивается полностью через config.yml. Ключевые настройки:

Настройка Описание
bot-token Токен вашего Discord-бота. Оставьте пустым и задайте вместо него LEADERBOARD_BOT_TOKEN.
period-start Cron-выражение для момента начала нового периода подсчёта (тогда таблица делает снимок движения). См. crontab.guru.
timezone Часовой пояс для планирования и сравнения транзакций — должен совпадать с часовым поясом вашей базы данных.
refresh-cooldown Секунды между обновлениями таблицы лидеров внутри периода.
leaderboard-channel ID канала, в котором публикуется таблица лидеров.
keep-leaderboard-history Когда true, публикует новое сообщение с таблицей лидеров каждый период вместо редактирования существующего.
leaderboard-render-mode embed (встраивание Discord) или image (отрисованный PNG).
leaderboard-image Опции режима изображения: template, title, lines, width, scale.
mysql Подключение к базе данных: host, port, user, password, database, leaderboard-table, transactions-table, timezone.
commands Названия команд, описания и ответные сообщения.
abuse-detection Включение и настройка модулей выявления злоупотреблений.

⚠️ leaderboard-table и transactions-table должны совпадать с таблицами плагина — по умолчанию ts_leaderboard и ts_transactions. Бот читает эти таблицы и никогда не пишет в них.

Отображение таблицы лидеров

Выберите способ отрисовки таблицы с помощью leaderboard-render-mode:

1
2
3
4
5
6
7
leaderboard-render-mode: "image"   # или "embed"
leaderboard-image:
  template: "spotlight"   # podium | spotlight | cards | bars | terminal | ark | dark
  title: "Tribes Leaderboard"
  lines: 15               # количество показываемых племён
  width: 820
  scale: 2                # 2 = чёткий / retina-вывод

В режиме embed таблица — это текстовое встраивание, построенное из leaderboard_embed.json. В режиме image она отрисовывается из HTML-шаблона в templates/leaderboard/<name>/. Если отрисовка изображения когда-либо даст сбой, бот автоматически переключается на embed, поэтому таблица лидеров никогда не может уйти в офлайн.

Слэш-команды

Команда (по умолчанию) Описание
/tribepoints <tribe> Показать текущие очки племени.
/getrank <tribe> Показать ранг и очки племени.

И названия команд, и их ответные сообщения настраиваются в разделе commands в config.yml, с использованием плейсхолдеров {tribe}, {points} и {rank}.

Выявление злоупотреблений

Когда abuse-detection.enabled установлено в true, бот периодически сканирует топ племён и публикует оповещение в настроенный channel-id, когда срабатывает модуль. Каждое оповещение несёт кнопку «Игнорировать это оповещение», которая подавляет будущие повторы для этой пары племён.

Модуль Что выявляет
rapid-increase Племя, набирающее необычно большое количество очков в течение одного периода подсчёта.
massive-transaction Единичный перенос очков выше порога от одного племени к другому.
prefered-source Племя, получающее большую долю своих очков от одного-единственного племени-источника (с опциональной проверкой взаимности — «зеркала»).

Каждый модуль имеет собственный cooldown, пороги и title / message оповещения — доступные плейсхолдеры описаны прямо в config.yml.

ℹ️ Бот создаёт одну собственную таблицу, ts_ignored_alerts, чтобы помнить, какие оповещения вы отклонили. Это единственная таблица, в которую он пишет; ваши данные об очках никогда не изменяются.