- Выполните
composer install
- Выполните миграции
php artisan migrate
- Сконфигурируйте работу бота для с необходимой платформой
- Введите
php artisan gitter:listen $room
, где$room
- название либо идентификатор комнаты (Например,KarmaBot/KarmaTest
, настройки для нее должны обязательно присутствовать в соответсвующем конфиге). - При использовании
Domains\Bot\Middlewares\NewGoogleSearchMiddleware
необходимо указатьGOOGLE_TOKEN
для сервисаGoogle Custom Search
(Не обязательно)
- Параметр
GITTER_TOKEN
в файле.env
(если такого нет, создайте из.env.example
). (Токен можно узнать по ссылке) - Прочие параметры находятся в файле
config/gitter.php
- Для запуска бота необходимо в конфиг добавить комнаты с указанием групп middleware
-
Параметр
SLACK_TOKEN
в файле.env
. (Для получения токена вам необходимо создать бота, после чего вам будет выдан токен для этого бота.) -
Прочие параметры находятся в файле
config/slack.php
-
Для запуска бота необходимо в конфиг добавить комнаты с указанием групп middleware
'rooms' => [ '$roomID' => ['*'] // Все middleware, '$roomID' => ['common', 'improvements'] ],
Для запуска бота в многопроцессовом режиме выполните команду
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
) он имеет возможность переопределить
или подправить сообщение, передавая его вниз по каскаду, в том
числе и прервать выполнение последующих элементов каскада.
Класс Middleware
должен реализовывать интерфейс Interfaces\Gitter\Middleware\MiddlewareInterface
.
Это набор классов, предназначенных для ответа в чат на события.
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.
Т.к. бот может работать с различными платформами, то внутри системы он использует собственный язык на основе bbcode с последующем парсингом при отправке сообщения в нужный формат (Markdown, html, e.t.c).
[user]username[/user]
- упоминание пользователя (Например для gitter будет преобразован в@username
)[pre] code [/pre]
- inline code