TelegramWebHookCommand   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 7

Importance

Changes 0
Metric Value
wmc 5
lcom 2
cbo 7
dl 0
loc 76
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A configure() 0 8 1
A execute() 0 33 3
1
<?php
2
3
namespace Skobkin\Bundle\PointToolsBundle\Command;
4
5
use Symfony\Component\Console\Command\Command;
6
use Symfony\Component\Console\Input\{InputArgument, InputInterface};
7
use Symfony\Component\Console\Output\OutputInterface;
8
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
9
use unreal4u\TelegramAPI\Telegram\Methods\{DeleteWebhook, SetWebhook};
10
use unreal4u\TelegramAPI\TgLog;
11
12
/**
13
 * Sets or deletes Telegram bot Web-Hook
14
 * @see https://core.telegram.org/bots/api#setwebhook
15
 */
16
class TelegramWebHookCommand extends Command
17
{
18
    private const MODE_SET = 'set';
19
    private const MODE_DELETE = 'delete';
20
21
    /** @var TgLog */
22
    private $client;
23
24
    /** @var UrlGeneratorInterface */
25
    private $router;
26
27
    /** @var string */
28
    private $token;
29
30
    /** @var int */
31
    private $maxConnections;
32
33
    public function __construct(TgLog $client, UrlGeneratorInterface $router, string $telegramToken, int $telegramWebhookMaxConnections)
34
    {
35
        parent::__construct();
36
37
        $this->client = $client;
38
        $this->router = $router;
39
        $this->token = $telegramToken;
40
        $this->maxConnections = $telegramWebhookMaxConnections;
41
    }
42
43
    /**
44
     * {@inheritdoc}
45
     */
46
    protected function configure()
47
    {
48
        $this
49
            ->setName('telegram:webhook')
50
            ->setDescription('Set webhook')
51
            ->addArgument('mode', InputArgument::REQUIRED, 'Command mode (set or delete)')
52
        ;
53
    }
54
55
    /**
56
     * {@inheritdoc}
57
     */
58
    protected function execute(InputInterface $input, OutputInterface $output)
59
    {
60
        if (self::MODE_SET === strtolower($input->getArgument('mode'))) {
61
62
            $url = $this->router->generate(
63
                'telegram_webhook',
64
                ['token' => $this->token],
65
                UrlGeneratorInterface::ABSOLUTE_URL
66
            );
67
68
            $output->writeln('Setting webhook: '.$url);
69
70
            $setWebHook = new SetWebhook();
71
            $setWebHook->url = $url;
72
            $setWebHook->max_connections = $this->maxConnections;
73
74
            $this->client->performApiRequest($setWebHook);
75
76
            $output->writeln('Done');
77
        } elseif (self::MODE_DELETE === strtolower($input->getArgument('mode'))) {
78
            $output->writeln('Deleting webhook');
79
80
            $deleteWebHook = new DeleteWebhook();
81
82
            $this->client->performApiRequest($deleteWebHook);
83
84
            $output->writeln('Done');
85
        } else {
86
            throw new \InvalidArgumentException(sprintf('Mode must be exactly one of: %s', implode(', ', [self::MODE_SET, self::MODE_DELETE])));
87
        }
88
89
        return 0;
90
    }
91
}
92