Coder Social home page Coder Social logo

laravelrus / laravel-karma-bot Goto Github PK

View Code? Open in Web Editor NEW
38.0 14.0 11.0 22.89 MB

Laravel\Karama bot service with Gitter and Slack integration

Home Page: http://karma.laravel.su/

License: MIT License

PHP 67.22% JavaScript 10.34% ApacheConf 0.11% CSS 19.67% HTML 2.65%

laravel-karma-bot's Introduction

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

laravel-karma-bot's People

Contributors

awd-studio avatar big-shark avatar butochnikov avatar butschster avatar dualse avatar jhaoda avatar porozhnyy avatar serafimarts avatar sportsoft avatar symbios-zi avatar vladshcherbin avatar zlodes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-karma-bot's Issues

Починить бота

Я не знаю что, но что-то надо починить точно.

Задача очень сложная, так что ответственным за её исполнение назначается @ruelephant, никто больше не справится.

@ruelephant, просьба ссылаться на этот таск в своих PR.

Разделение кармабота

Есть предложение по разнесению бота на несколько сервисов.

Цель

Облегчить и упростить ядро, избавиться от легаси.

Результат

  • В ветке master-bot останется только демон бота
  • В ветке master-http останется только http морда
  • База данных на данном этапе общая
  • Миграции хранятся в ветке master-bot, т.к. он является источником данных

Действия

  • Исключение из ветки исходного кода, связанного с ботом. 832ebb7
  • Завершение работы над веткой feature-redesign.
  • Релиз ветки (перенос в master-http) и деплой на сервер. Переконфигурирование нгинкса и сертификата.
  • Избавление от всего кода, связанного с http внутри ветки master.
  • Перенос в ветку master-bot

М?

Invalid Date в списке ачивок и кармы

@Big-Shark

Исправить баг с Инвалид дата.

в списке поблагодаривших все вот такие
AndrewNovikof
Сказал спасибо:
Invalid Date

Браузер: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0

Проблема в Mozilla Firefox, он не воспринимает дату такого формата: new Date('2015-10-14 07:34:17.000000')

Refactoring

  • Impove achievements
    • Moving achievements from Core to Domains\Bot
    • Add unque id to achievements (class name currently)
  • Remove all deprecated http api (Interfaces\Gitter) and move to serafim/gitter-api package
    • Refactor streaming API
  • Remove old models (Domains\*) or move\rewrite them
    • Users
    • Messages
    • Rooms
    • Achievemtns
    • Karma
  • Improve Messages API
    • Add messages event bus
    • Add messages question\answer context api
  • Customise rooms options
    • Add language selection for rooms
    • Add middleware selection
  • Middlewares
    • Automatically paste code in pastebin.org or gist.github.com for LongMessageMiddleware
    • Add comment with message which was copied to gist #55
  • Achievemens
    • Add additional karmas after achievement receiving
    • Add behaviors for achievements
      • Forever
      • Changeable
      • Special
    • Move achievements to middlewares
    • Add activeity achieve: #54
    • Add unique thanks achieve: #38
    • Add ahivements page: #20

Баги когда бот работает слишком активно

@Big-Shark последнее использовал)
спасибо @Big-Shark
)
KarmaBot 14:36
Спасибо принято. Текущая карма пользователя @Big-Shark +35
Спасибо принято. Текущая карма пользователя @Big-Shark +36
Big-Shark 14:37
Омг

NelinD 14:50
@Big-Shark тест спасибо @Big-Shark и еще разок @Big-Shark
@Big-Shark тест @Big-Shark тест спасибо @Big-Shark
KarmaBot 14:50
Спасибо принято. Текущая карма пользователя @Big-Shark +38
Спасибо принято. Текущая карма пользователя @Big-Shark +37
Спасибо принято. Текущая карма пользователя @Big-Shark +39

Список сайтов для индекса поисковика кармабота:

  • vk.com/laravel_rus/*
  • laravel.ru/*
  • laravel.su/*
  • habrahabr.ru/*
  • msdn.microsoft.com/*
  • developer.mozilla.org/ru/*
  • www.yiiframework.com/*
  • laravel.com/*
  • github.com/*
  • packagist.org/*
  • packalyst.com/*
  • designpatternsphp.readthedocs.org/*
  • laravel-news.ru/*
  • sitepoint.com/*
  • php.net/manual/*
  • www.drupal.org/*

Список сайтов добавляется в кастомную поисковую машину бота: 017648015832347857471:ap7pijkcqh4

Просьба по возможности дополнять список, если потребуется добавить ещё какой-либо сайт.

Ссылка на сообщение с благодарностью

Возможность со страницы карма-профиля перейти к тому "историческому моменту" в архиве сообщений чата, когда была высказана или получена благодарность. :)

image

Псевдо-анимация сообщений

Сделать "псевдо-анимацию" в сообщениях бота. 😀
После отправки сообщения, дополнительно отправлять последовательно несколько запросов на изменение сообщения.

Например:
о_о
О_о
о_о
о_О

Подробнее...

Ачивки за активность

Присваивать ачивки за активность в чате.
За кол-во сообщений в месяц или вообще за все время.

Изменить немного алгоритм гуглинга

Если идет обращение от ника к боту вот такое

@greabock 
@KarmaBot погугли карма
KarmaBot 14:35
@KarmaBot погуглил для тебя

То мне кажется бот должен отвечать этому же человеку, а не себе.

Настроить авто апдейт

Сделать так чтоб бота обновить на сервере мог любой человек из определенного списка людей

Правки веб-морды

  • Оставить поисковую строчку на странице с профилем
    • При поиске в ней переходить на страницу со списком найденных пользователей
  • Добавить кнопки\ссылки "написать личное сообщение", "профиль на гитхаб" и "профиль на laravel.su" в профиль пользователя
  • Добавить отдельную страницу со списком всех доступных ачивок и их описаний

Баг с никнеймом

Мой ник @M-A-X-I-M, пишу в чате:

карма

Ответ:

KarmaBot
@LaraveI, Ваша карма +2. Вы благодарили 5 раз.

Почему бот пишет другой ник?

Добавить "русскую рулетку"

Пишешь в чат "крути барабан", бот делает рандом до 6, и если число не равно 1 допустим, то ты дивой и тебе +1 в карму, если равно 1, то ты "мертв", забанен, ну или карма -10

Система ачивок

Обсуждение возможных ачивок, нужны ли они вообще впринципе.

Памятка для имеющих доступ к серверу

Быстрый деплой

  • cd /var/www/gitter && git pull origin master:master && composer dump-autoload && ./artisan cache:clear && ./artisan config:cache && ./artisan gitter:pool

Полный деплой

  • `cd /var/www/gitter && ./artisan down && git pull origin master:master && composer install && ./artisan cache:clear && ./artisan config:cache && ./artisan up && ./artisan gitter:pool``

Рестарт бота

  • cd /var/www/gitter && ./artisan gitter:pool

Рестарт сервера

  • service php7-fpm restart
  • service nginx restart

Обновление сертификата

  • cd /var/letsencrypt && php bin/acme issue -d karma.laravel.su -p /var/www/gitter/public -s letsencrypt

Обновление версии php

x.x.N -> x.x.M (например 7.0.0 -> 7.0.1)

  • cd /var/php7-installer
  • cat build.sh
  • Изменить строчку git checkout PHP-xxx на нужную ветку
  • ./build.sh
  • service php7-fpm restart
  • service nginx restart

x.N -> x.M (например 7.0 -> 7.1)

  • cd /var/php7-installer
  • cat build.sh
  • Изменить строчку git checkout PHP-xxx на нужную ветку
  • ./build.sh
  • cd ext/pecl-ev
  • git pull
  • make clean
  • phpize
  • ./configure
  • make
  • make install
  • service php7-fpm restart
  • service nginx restart

Column not found: 1054 Unknown column 'status' in 'where clause'

➜ gitter git:(master) php artisan gitter:karma

[Illuminate\Database\QueryExceptio
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'status' in 'where clause' (SQL: select * from karma where status = inc group by user_target_id)

[PDOException]
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'status' in 'where clause'

Улучшение страницы профиля.

Добавить кнопки\ссылки "написать личное сообщение", "профиль на гитхаб" и "профиль на laravel.su" в профиль пользователя.

скажи спасибо сам себе

не добавит + в карму, но для "будьте здоровы" идет учет что ты "высказал спасибо" т.е. отдал свое спасибо самому себе

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.