- Выполните
composer install
- Сконфигурируйте бота
- Параметр
GITTER_TOKEN
в файле.env
(если такого нету, создайте из.env.example
) - Прочие параметры находятся в файле
config/gitter.php
- Параметр
- Выполните миграции
php artisan migrate
- Введите
php artisan gitter:listen $room
, где $room - идентификатор комнаты или его алиас.
Для запуска бота в многопроцессовом режиме выполните команду
php artisan gitter:pool
. Команда создаст несколько процессов для
чатов, перечисленных в config/gitter.php
. Каждый процесс
идентифицируется своим pid файлом (storage/pids/**.pid
).
Для остановки воспользуйтесь командой php artisan gitter:pool stop
.
Для перезапуска - php artisan gitter:pool restart
.
Бот создаёт стрим-соединение по Gitter Stream API. Далее
инициализируются Middlewares и Subscribers, определённые
в app/Middlewares
и app/Subscribers
соответственно.
Дальнейшую логику работы определяют именно они.
Это набор классов, предназначенных для ответа в чат на сообщения.
Middlewares - это каскадная система классов, вызывающаяся
при каждом сообщении из комнаты. Каждый класс имеет свой вес,
т.е. порядок исполнения, определённый его приоритетом. После
вызова (метод handle
) он имеет возможность переопределить
или подправить сообщение, передавая его вниз по каскаду, в том
числе и прервать выполнение последующих элементов каскада.
Это набор классов, предназначенных для ответа в чат на события.
Subscribers (подписчики) - это классы, инициализирующиеся при старте системы, предназначенные для создания подписок на события и отображения этих событий в чат. Как можно понять - подписчики не обязательно должны реагировать на сообщения и могут быть полностью асинхроонными.
Предназначены для достижений (ничоси!)
- Создайте класс в
App\Subscribers\Achievements\*
- Класс должен быть наследником
App\Gitter\Achieve\AbstractAchieve
(или интерфейса AchieveInterface)
- Класс должен быть наследником
- Добавьте его в массив
$achievements
внутриApp\Subscribers\AchieveSubscriber.php
Все Middlewares и Subscribers находятся в Laravel контейнере, а это значит, что им доступно Dependency Injection в конструкторе.
Так же в DI контейнере содержатся два базовых инстанса -
App\Room
и App\Gitter\Client
. Первый отвечает за взаимодействие
с текущей комнатой, второй за общее взаимодействие с Gitter API.