Completed
Push — develop ( bffb25...6204e5 )
by Kirill
07:24
created

KarmaCounterMiddleware::handle()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 31
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 1 Features 0
Metric Value
c 3
b 1
f 0
dl 0
loc 31
rs 8.5806
cc 4
eloc 14
nc 4
nop 2
1
<?php
2
/**
3
 * This file is part of GitterBot package.
4
 *
5
 * @author Serafim <[email protected]>
6
 * @date 27.01.2016 14:41
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
namespace App\Gitter\Middlewares;
12
13
use App\Gitter\Response;
14
use App\Message;
15
use Illuminate\Support\Collection;
16
use App\Gitter\Middlewares\KarmaCounter\Status;
17
use App\Gitter\Extensions\Middlewares\MessageBus;
18
use App\Gitter\Middlewares\KarmaCounter\Validator;
19
use App\Gitter\Extensions\Middlewares\MiddlewareInterface;
20
21
/**
22
 * This middleware count words like `@username thanks`
23
 *
24
 * Class KarmaCounterMiddleware
25
 * @package App\Bot\Middlewares
26
 */
27
class KarmaCounterMiddleware implements MiddlewareInterface
28
{
29
    /**
30
     * @var MessageBus
31
     */
32
    protected $bus;
33
34
    /**
35
     * @var Validator
36
     */
37
    protected $validator;
38
39
    /**
40
     * KarmaCounterMiddleware constructor.
41
     * @param MessageBus $bus
42
     */
43
    public function __construct(MessageBus $bus)
44
    {
45
        $this->bus = $bus;
46
        $this->validator = new Validator();
47
    }
48
49
    /**
50
     * @param Message $message
51
     * @param \Closure $next
52
     * @return string|null
53
     */
54
    public function handle(Message $message, \Closure $next)
55
    {
56
        /** @var Collection $karmaResponses */
57
        $karmaResponses = $this->validator->validate($message);
58
59
60
        /** @var Status $status */
61
        foreach ($karmaResponses as $status) {
62
            $mention = $status->getUser();
63
64
            if ($status->isIncrement()) {
65
                $message->user->addKarmaToUser($mention, $message);
66
67
                if ($mention->isBot()) {
68
                    $this->bus->send(
69
                        (new Response(trans('karma.bot', ['user' => $message->user->login])))
70
                            ->italic()
71
                    );
72
                }
73
            }
74
75
            $response = new Response(
76
                $status->getTranslation($mention->karma->count())
77
            );
78
79
            $this->bus->send($response->italic());
80
        }
81
82
83
        return $next($message);
84
    }
85
}
86
87