Skip to content

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

License

Notifications You must be signed in to change notification settings

ViPiC-Ru/raid.planner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание

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.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages