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