Completed
Push — master ( e00939...1e9091 )
by Kirill
02:34
created

UpdateReceiver::getCurrentUser()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 13
nc 2
nop 1
1
<?php
2
3
namespace Chrl\AppBundle\UpdateReceiver;
4
5
use Chrl\AppBundle\BuktopuhaBotApi;
6
use Chrl\AppBundle\Entity\Game;
7
use Chrl\AppBundle\Entity\User;
8
use Chrl\AppBundle\Type\Update;
9
use Doctrine\ORM\EntityManagerInterface;
10
11
class UpdateReceiver implements UpdateReceiverInterface
12
{
13
14
    private $config;
15
    private $telegramBotApi;
16
    private $entityManager;
17
18
    public function __construct(BuktopuhaBotApi $telegramBotApi, $config, EntityManagerInterface $entityManager)
19
    {
20
        $this->telegramBotApi = $telegramBotApi;
21
        $this->config = $config;
22
        $this->entityManager = $entityManager;
23
    }
24
25
    public function handleUpdate(Update $update)
26
    {
27
        $message = json_decode(json_encode($update->message), true);
28
        $user = $this->getCurrentUser($message);
29
        $this->telegramBotApi->sendMessage(
30
            $message['chat']['id'],
31
            '@'.$user->getAlias().', hello from '.$this->config['bot_name']
32
        );
33
    }
34
35
    public function findGame(array $message)
36
    {
37
        $game = $this->entityManager->getRepository('AppBundle:Game')->findOneBy(['chatId'=>$message['chat']['id']]);
38
        if (!$game) {
39
            // create game
40
            $game = new Game();
41
            $game->status = 0;
42
            $game->chatId = $message['chat']['id'];
43
            $game->title = isset($message['chat']['title'])
44
                                ? $message['chat']['title']
45
                                : 'No title';
46
47
            $this->entityManager->persist($game);
48
            $this->entityManager->flush();
49
        }
50
        return $game;
51
    }
52
53
54
    public function getCurrentUser(array $message)
55
    {
56
        $user = $this->entityManager->getRepository('AppBundle:User')->findOneBy(['tgId'=>$message['from']['id']]);
57
        if (!$user) {
58
            $user = new User();
59
            $user->setName($message['from']['first_name'].' '.$message['from']['last_name']);
60
            $user->setAlias($message['from']['username']);
61
            $user->setTgId($message['from']['id']);
62
            $user->setGame($this->findGame($message));
63
            $user->setChatId($message['chat']['id']);
64
            $user->setPoints(0);
65
66
            $this->entityManager->persist($user);
67
            $this->entityManager->flush();
68
        }
69
        return $user;
70
    }
71
}
72