-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
NutgramFactory.php
66 lines (55 loc) · 2.19 KB
/
NutgramFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
namespace SergiX44\NutgramBundle\DependencyInjection\Factory;
use Psr\Cache\CacheItemPoolInterface;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
use SergiX44\Nutgram\Configuration;
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\RunningMode\Polling;
use SergiX44\Nutgram\RunningMode\Webhook;
use Symfony\Component\Cache\Psr16Cache;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\KernelInterface;
class NutgramFactory
{
public function createNutgram(
array $config,
ContainerInterface $container,
RequestStack $requestStack,
KernelInterface $kernel,
?CacheItemPoolInterface $nutgramCache,
?LoggerInterface $nutgramLogger,
?LoggerInterface $nutgramConsoleLogger
): Nutgram {
$isCli = \PHP_SAPI === 'cli' || \PHP_SAPI === 'phpdbg';
$configuration = new Configuration(
apiUrl: $config['config']['apiUrl'],
botId: $config['config']['botId'],
botName: $config['config']['botName'],
testEnv: $config['config']['testEnv'],
clientTimeout: $config['config']['clientTimeout'],
clientOptions: $config['config']['clientOptions'] ?? [],
container: $container,
cache: new Psr16Cache($nutgramCache),
logger: $isCli ? $nutgramConsoleLogger : $nutgramLogger,
localPathTransformer: $config['config']['localPathTransformer'],
pollingTimeout: $config['config']['pollingTimeout'],
pollingLimit: $config['config']['pollingLimit'],
enableHttp2: $config['config']['enableHttp2'],
);
if ($kernel->getEnvironment() === 'test') {
return Nutgram::fake(config: $configuration);
}
$bot = new Nutgram($config['token'], $configuration);
if ($isCli) {
$bot->setRunningMode(Polling::class);
} else {
$webhook = Webhook::class;
if ($config['safe_mode'] ?? false) {
$webhook = new $webhook(fn() => $requestStack->getCurrentRequest()?->getClientIp());
}
$bot->setRunningMode($webhook);
}
return $bot;
}
}