Passed
Push — master ( fbc72e...fd2e1d )
by Alexey
04:39
created

TelegramSetWebHookCommand   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 7

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 5
lcom 0
cbo 7
dl 0
loc 64
ccs 0
cts 40
cp 0
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A configure() 0 9 1
B execute() 0 42 4
1
<?php
2
3
namespace Skobkin\Bundle\PointToolsBundle\Command;
4
5
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
6
use Symfony\Component\Console\Input\InputArgument;
7
use Symfony\Component\Console\Input\InputInterface;
8
use Symfony\Component\Console\Output\OutputInterface;
9
use unreal4u\TelegramAPI\Telegram\Methods\DeleteWebhook;
10
use unreal4u\TelegramAPI\Telegram\Methods\SetWebhook;
11
12
/**
13
 * Sets or deletes Telegram bot Web-Hook
14
 * @see https://core.telegram.org/bots/api#setwebhook
15
 */
16
class TelegramSetWebHookCommand extends ContainerAwareCommand
17
{
18
    const MODE_SET = 'set';
19
    const MODE_DELETE = 'delete';
20
21
    /**
22
     * {@inheritdoc}
23
     */
24
    protected function configure()
25
    {
26
        $this
27
            ->setName('telegram:webhook')
28
            ->setDescription('Set webhook')
29
            ->addArgument('mode', InputArgument::REQUIRED, 'Command mode (set or delete)')
30
            ->addArgument('host', InputArgument::OPTIONAL, 'Host of telegram hook')
31
        ;
32
    }
33
34
    /**
35
     * {@inheritdoc}
36
     */
37
    protected function execute(InputInterface $input, OutputInterface $output)
38
    {
39
        $container = $this->getContainer();
40
        $telegramClient = $container->get('point_tools.telegram.api_client');
41
42
        if (self::MODE_SET === strtolower($input->getArgument('mode'))) {
43
            if (!$input->hasArgument('host')) {
44
                throw new \InvalidArgumentException('Host must be specified when using --set flag');
45
            }
46
47
            $router = $container->get('router');
48
            $token = $container->getParameter('telegram_token');
49
50
            $url = sprintf(
51
                'https://%s%s',
52
                $input->getArgument('host'),
53
                $router->generate('telegram_webhook', ['token' => $token])
54
            );
55
56
            $output->writeln('Setting webhook: '.$url);
57
58
            $setWebHook = new SetWebhook();
59
            $setWebHook->url = $url;
60
            $setWebHook->max_connections = (int) $container->getParameter('telegram_max_connections');
61
62
            $telegramClient->performApiRequest($setWebHook);
63
64
            $output->writeln('Done');
65
        } elseif (self::MODE_DELETE === strtolower($input->getArgument('mode'))) {
66
            $output->writeln('Deleting webhook');
67
68
            $deleteWebHook = new DeleteWebhook();
69
70
            $telegramClient->performApiRequest($deleteWebHook);
71
72
            $output->writeln('Done');
73
        } else {
74
            throw new \InvalidArgumentException(sprintf('Mode must be exaclty one of: %s', implode(', ', [self::MODE_SET, self::MODE_DELETE])));
75
        }
76
77
        return 0;
78
    }
79
}
80