ViPiC-Ru / raid.planner

Discord Bot written in php, which uses the REST API and WebSocket to schedule events to the Guild channel.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Описание

Discord Bot написанный на php, который по средствам REST API и WebSocket ведёт расписание событий в канале гильдии. Участники в канале гильдии отправляют ему сообщения в определённом формате или ставят реакции, он их обрабатывает и удаляет. Из обработанных сообщений формируется расписание, которое отображается в виде сводного сообщения в этом же канале. Закреплённые сообщения он не обрабатывает и не удаляет, в них можно написать инструкции для пользователей. В первую очередь скрипт предназначен для использования в планировщике cron на php хостинге.

Формат сообщений

Чтобы создать, записаться или выписаться из события необходимо в канале, который контролирует бот, написать сообщение в следующем формате:

<action> <role> [<record>] <date> <time> <raid> [<user>] <addition> <comment>
<description>
  • <action> - Действие, которое нужно выполнить.
    • + (записаться) - Записаться или создать событие.
    • * (изменить) - Изменить запись в событие.
    • - (выписаться) - Выписаться из события.
    • ? (поиск) - Найти интересующие события.
  • <role> - Роль участника события.
    • tank (танк) - Держит удар.
    • heal (хил) - Восстанавливает здоровье.
    • dd (дд) - Наносит урон.
  • <record> - Номер события в канале, например: 002.
  • <date> - Дата события, например: 20.02.2020, завтра, вторник.
  • <time> - Время события, например: 18:00.
  • <raid> - Идентификатор события, например: vHRC.
  • <user> - Для записи других участников, в формате @id
  • <addition> - Дополнительная опция.
    • leader (лидер) - Записаться как лидер.
    • member (участник) - Записаться как участник.
    • once (однократно) - Без повторений.
    • daily (ежедневно) - Повторять ежедневно.
    • weekly (еженедельно) - Повторять еженедельно.
    • reserve (резерв) - Записаться в резерв.
    • группа (group) - Записаться в основной состав.
    • accept (принят) - Подтвердить запись.
    • reject (нет) - Убрать подтверждение.
    • empty (пусто) - Удалить комментарий или описание.
  • <comment> - Комментарий к событию.
  • <description> - Описание события.

Примеры сообщений

+ дд 18.01.2020 18:00 vHRC
+ танк завтра 15:00 vHOF
+хил завтра 20:00 nCR лидер Комментарий
+ дд сегодня 21:00 vSS 640 CP и 45K DPS
- танк 18.01 18:00
-хил

Права доступа

Чтобы бот начал контролировать канал и обрабатывать сообщения в нём, ему требуются следующие права: Просмотр канала, Отправлять сообщения, Встраивать ссылки, Прикреплять файлы, Добавлять рекции, Использовать внешние эмодзи, Управлять сообщениями и Читать историю сообщений. Права можно выдать на уровне роли в гильдии или непосредственно канале.

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

Чтобы пользователи могли записывать других участников, у них в этом канале (или у их роли) должно быть право Встраивать ссылки.

Использование

После публикации на php хостинге и заполнения в файле php/api.php значения MY-APP-TOKEN и в файле base/<game>/session.db значений MY-DISCORD-BOT-ID, MY-DISCORD-BOT-TOKEN и перейдите в браузере или в планировщике cron по следующему адресу:

php/api.php?method=<method>&game=<game>&token=<token>[&format=<format>][... &param=<param>]
  • <method> - Имя метода, который нужно выполнить.
  • <token> - Заданный вами MY-APP-TOKEN.
  • <game> - Идентификатор поддерживаемой игры.
  • <format> - Формат результата работы, поддерживается json, xml и http.
  • ... <param> - Параметры для метода.

Поддерживаемые методы

discord.connect - Выполнить подключение по WebSocket и в синхронном режиме обрабатывать все поступающие сообщения в контролируемых каналах всех гильдий.

discord.guild - Выполнить подключение по REST API и разово обработать все каналы в гильдий.

  • <guild> - Цифровой идентификатор гильдии в Discord.

discord.channel - Выполнить подключение по REST API и разово обработать все сообщения в канале.

  • <guild> - Цифровой идентификатор гильдии в Discord.
  • <channel> - Цифровой идентификатор канала гильдии.

discord.message - Выполнить подключение по REST API и разово обработать сообщение в канале.

  • <guild> - Цифровой идентификатор гильдии в Discord.
  • <user> - Цифровой идентификатор пользователя в Discord.
  • <channel> - Цифровой идентификатор канала гильдии или пользователя.
  • <message> - Цифровой идентификатор сообщения в канале.

discord.reaction - Выполнить подключение по REST API и разово обработать реакцию в сообщении.

  • <guild> - Цифровой идентификатор гильдии в Discord.
  • <user> - Цифровой идентификатор пользователя в Discord.
  • <channel> - Цифровой идентификатор канала гильдии или пользователя.
  • <message> - Цифровой идентификатор сообщения в канале.
  • <reaction> - Составной идентификатор реакции в сообщении.

event.link - Генерирует ссылку на картинку события или на создание записи в календаре.

  • <event> - Внутренний идентификатор события в приложении.
  • <raid> - Внутренний идентификатор рейда в приложении.

Примечание

Выражаю огромную благодарность всем, кто мне помогает с разработкой бота. А также отдельное спасибо paragi за рабочую реализацию протокола WebSocket на php. Для полноценной работы, по мимо вышеупомянутого набора функций webSocketClient-1.0.inc.php, требуется библиотека phpEasy-0.3.inc.php, класс File-0.1.inc.php и подкласс FileStorage-0.5.inc.php. К сожалению, я сейчас не готов опубликовать эти наработки в открытый доступ. Поэтому, к сожалению, у вас не получиться запустить бота на вашем php хостинге, т.к. в данном репозитории отсутствуют вышеупомянутые библиотеки и классы. Но вы можете посмотреть его работу в этой демонстрационной гильдии.

About

Discord Bot written in php, which uses the REST API and WebSocket to schedule events to the Guild channel.

License:GNU General Public License v3.0


Languages

Language:PHP 100.0%