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>][... ¶m=<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 хостинге, т.к. в данном репозитории отсутствуют вышеупомянутые библиотеки и классы. Но вы можете посмотреть его работу в этой демонстрационной гильдии.