All Projects → LaravelRUS → laravel-karma-bot

LaravelRUS / laravel-karma-bot

Licence: MIT license
Laravel\Karama bot service with Gitter and Slack integration

Programming Languages

PHP
23972 projects - #3 most used programming language
CSS
56736 projects
javascript
184084 projects - #8 most used programming language
HTML
75241 projects
ApacheConf
554 projects

Gitter Bot based on Laravel 5.1

volkswagen status Gitter

Поддерживаемые платформы

Запуск

  • Выполните composer install
  • Выполните миграции php artisan migrate
  • Сконфигурируйте работу бота для с необходимой платформой
  • Введите php artisan gitter:listen $room, где $room - название либо идентификатор комнаты (Например, KarmaBot/KarmaTest, настройки для нее должны обязательно присутствовать в соответсвующем конфиге).
  • При использовании Domains\Bot\Middlewares\NewGoogleSearchMiddleware необходимо указать GOOGLE_TOKEN для сервиса Google Custom Search (Не обязательно)

Конфигурация для работы с платформой Gitter

  • Параметр GITTER_TOKEN в файле .env (если такого нет, создайте из .env.example). (Токен можно узнать по ссылке)
  • Прочие параметры находятся в файле config/gitter.php
  • Для запуска бота необходимо в конфиг добавить комнаты с указанием групп middleware

Конфигурация для работы с платформой SLack (alpha версия)

  • Параметр 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?

Это набор классов, предназначенных для ответа в чат на сообщения.

Middlewares - это каскадная система классов, вызывающаяся при каждом сообщении из комнаты. Каждый класс имеет свой вес, т.е. порядок исполнения, определённый его приоритетом. После вызова (метод handle) он имеет возможность переопределить или подправить сообщение, передавая его вниз по каскаду, в том числе и прервать выполнение последующих элементов каскада.

Класс Middleware должен реализовывать интерфейс Interfaces\Gitter\Middleware\MiddlewareInterface.

Что такое Subscribers?

Это набор классов, предназначенных для ответа в чат на события.

Subscribers (подписчики) - это классы, инициализирующиеся при старте системы, предназначенные для создания подписок на события и отображения этих событий в чат. Как можно понять - подписчики не обязательно должны реагировать на сообщения и могут быть полностью асинхронными.

Прочие классы

Достижения (Achievements)

Предназначены для достижений (ничоси!)

  • Создайте класс в 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
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].