Skip to content

Commit 6134b24

Browse files
gassanSeldaek
andauthored
enable use of Monolog\Handlers\TelegramBotHandler under type 'telegram' (#406)
Co-authored-by: Jordi Boggiano <j.boggiano@seld.be>
1 parent 4694fc2 commit 6134b24

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed

DependencyInjection/Configuration.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,17 @@
344344
* - [level]: level name or int value, defaults to DEBUG
345345
* - [bubble]: bool, defaults to true
346346
*
347+
* - telegram:
348+
* - token: Telegram bot access token provided by BotFather
349+
* - channel: Telegram channel name
350+
* - [level]: level name or int value, defaults to DEBUG
351+
* - [bubble]: bool, defaults to true
352+
* - [parse_mode]: optional the kind of formatting that is used for the message
353+
* - [disable_webpage_preview]: bool, defaults to false, disables link previews for links in the message
354+
* - [disable_notification]: bool, defaults to false, sends the message silently. Users will receive a notification with no sound
355+
* - [split_long_messages]: bool, defaults to false, split messages longer than 4096 bytes into multiple messages
356+
* - [delay_between_messages]: bool, defaults to false, adds a 1sec delay/sleep between sending split messages
357+
*
347358
* All handlers can also be marked with `nested: true` to make sure they are never added explicitly to the stack
348359
*
349360
* @author Jordi Boggiano <j.boggiano@seld.be>
@@ -564,6 +575,11 @@ public function getConfigTreeBuilder()
564575
->scalarNode('release')->defaultNull()->end() // raven_handler, sentry_handler
565576
->scalarNode('environment')->defaultNull()->end() // raven_handler, sentry_handler
566577
->scalarNode('message_type')->defaultValue(0)->end() // error_log
578+
->scalarNode('parse_mode')->defaultNull()->end() // telegram
579+
->booleanNode('disable_webpage_preview')->defaultNull()->end() // telegram
580+
->booleanNode('disable_notification')->defaultNull()->end() // telegram
581+
->booleanNode('split_long_messages')->defaultFalse()->end() // telegram
582+
->booleanNode('delay_between_messages')->defaultFalse()->end() // telegram
567583
->arrayNode('tags') // loggly
568584
->beforeNormalization()
569585
->ifString()
@@ -600,6 +616,7 @@ public function getConfigTreeBuilder()
600616
$this->addMongoSection($handlerNode);
601617
$this->addElasticsearchSection($handlerNode);
602618
$this->addRedisSection($handlerNode);
619+
$this->addTelegramSection($handlerNode);
603620
$this->addPredisSection($handlerNode);
604621
$this->addMailerSection($handlerNode);
605622
$this->addVerbosityLevelSection($handlerNode);
@@ -865,6 +882,25 @@ private function addElasticsearchSection(ArrayNodeDefinition $handerNode)
865882
;
866883
}
867884

885+
private function addTelegramSection(ArrayNodeDefinition $handerNode)
886+
{
887+
$handerNode
888+
->children()
889+
->arrayNode('telegram')
890+
->canBeUnset()
891+
->children()
892+
->scalarNode('token')->end()
893+
->scalarNode('channel')->end()
894+
->end()
895+
->end()
896+
->end()
897+
->validate()
898+
->ifTrue(function ($v) { return 'telegram' === $v['type'] && empty($v['id']) && (empty($v['token']) || empty($v['channel'])); })
899+
->thenInvalid('The token and channel have to be specified to use a TelegramBotHandler')
900+
->end()
901+
;
902+
}
903+
868904
private function addRedisSection(ArrayNodeDefinition $handerNode)
869905
{
870906
$handerNode

DependencyInjection/MonologExtension.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,25 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
346346
$handler['bubble'],
347347
]);
348348
break;
349+
350+
case 'telegram':
351+
if (!class_exists('Monolog\Handler\TelegramBotHandler')) {
352+
throw new \RuntimeException('The TelegramBotHandler is not available. Please update "monolog/monolog" to 2.2.0');
353+
}
354+
355+
$definition->setArguments([
356+
$handler['token'],
357+
$handler['channel'],
358+
$handler['level'],
359+
$handler['bubble'],
360+
$handler['parse_mode'],
361+
$handler['disable_webpage_preview'],
362+
$handler['disable_notification'],
363+
$handler['split_long_messages'],
364+
$handler['delay_between_messages'],
365+
]);
366+
break;
367+
349368
case 'redis':
350369
case 'predis':
351370
if (isset($handler['redis']['id'])) {
@@ -994,6 +1013,7 @@ private function getHandlerClassByType($handlerType)
9941013
'filter' => 'Monolog\Handler\FilterHandler',
9951014
'mongo' => 'Monolog\Handler\MongoDBHandler',
9961015
'elasticsearch' => 'Monolog\Handler\ElasticSearchHandler',
1016+
'telegram' => 'Monolog\Handler\TelegramBotHandler',
9971017
'server_log' => 'Symfony\Bridge\Monolog\Handler\ServerLogHandler',
9981018
'redis' => 'Monolog\Handler\RedisHandler',
9991019
'predis' => 'Monolog\Handler\RedisHandler',

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,26 @@ public function testWithElasticsearchHandler()
243243
$this->assertEquals('my-index', $config['handlers']['elasticsearch']['index']);
244244
}
245245

246+
public function testWithTelegramBotHandler()
247+
{
248+
$configs = [
249+
[
250+
'handlers' => [
251+
'telegram' => [
252+
'type' => 'telegram',
253+
'token' => 'bot-token',
254+
'channel' => '-100',
255+
]
256+
]
257+
]
258+
];
259+
260+
$config = $this->process($configs);
261+
262+
$this->assertEquals('bot-token', $config['handlers']['telegram']['token']);
263+
$this->assertEquals('-100', $config['handlers']['telegram']['channel']);
264+
}
265+
246266
public function testWithConsoleHandler()
247267
{
248268
$configs = [

0 commit comments

Comments
 (0)