LongMessageMiddleware::handle()   B
last analyzed

Complexity

Conditions 6
Paths 4

Size

Total Lines 40
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 6
eloc 19
c 2
b 0
f 0
nc 4
nop 1
dl 0
loc 40
rs 8.439
1
<?php
2
namespace Domains\Bot\Middlewares;
3
4
use Domains\Message;
5
use Domains\Middleware\MiddlewareInterface;
6
7
/**
8
 * Class LongMessageMiddleware
9
 */
10
class LongMessageMiddleware implements MiddlewareInterface
11
{
12
    const MAX_CHARS = 1000;
13
    const MAX_LINES = 20;
14
    const MAX_CODE_LINES = 20;
15
16
    /**
17
     * @param Message $message
18
     * @return mixed
19
     */
20
    public function handle(Message $message)
21
    {
22
        $text = $message->text;
23
        $lines = count(explode("\n", $text));
24
        $chars = mb_strlen($text);
25
26
        if (preg_match_all('/^((`{3}\s*)(\w+)?(\s*([\w\W]+?)\n*)\2)\n*(?:[^\S\w\s]|$)/m', $text, $matches)) {
27
28
            $codeLines = 0;
29
30
            foreach ($matches[5] as $code) {
31
32
                $codeLines += count(explode("\n", $code));
33
34
            }
35
36
            if ($codeLines > self::MAX_CODE_LINES) {
37
38
                $answer = trans('long.code_personal', [
39
                    'user'  => $message->user->login,
40
                ]);
41
42
                $message->answer($answer);
43
44
                return null;
45
            }
46
47
        } elseif ($lines > self::MAX_LINES || $chars > self::MAX_CHARS) {
48
49
            $answer = trans('long.text_personal', [
50
                'user'  => $message->user->login,
51
            ]);
52
53
            $message->italic($answer);
54
55
            return null;
56
        }
57
58
        return $message;
59
    }
60
}
61