egormanakin / telegram-bot-bundle
Telegram bot bundle
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 23
Type:symfony-bundle
Requires
- php: ^7.2
- ext-curl: *
- ext-json: *
- symfony/console: ^4.4 || ^5.0
- symfony/event-dispatcher: ^4.4 || ^5.0
- symfony/framework-bundle: ^4.4 || ^5.0
- telegram-bot/api: ^2.3.14
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- matthiasnoback/symfony-dependency-injection-test: ^4.1
- php-mock/php-mock-phpunit: ^2.6
- phpunit/phpunit: ^8.0
- psalm/plugin-symfony: ^1.2
- symfony/messenger: ^4.4 || ^5.0
- symfony/security-guard: ^4.4 || ^5.0
- vimeo/psalm: ^3.10
Suggests
- symfony/messenger: Required to handle messages with queues
- symfony/security-guard: Required to implement user authentication through Telegram
README
Telegram bot bundle on top of telegram-bot/api
library
Examples
See example project
Installation
Composer
$ composer require boshurik/telegram-bot-bundle
If you are using symfony/flex all you need is to set TELEGRAM_BOT_TOKEN
environment variable
Register the bundle
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new BoShurik\TelegramBotBundle\BoShurikTelegramBotBundle, ); // ... }
Add routing for webhook
BoShurikTelegramBotBundle: resource: "@BoShurikTelegramBotBundle/Resources/config/routing.yml" prefix: /_telegram/<some-secret>
Configuration
boshurik_telegram_bot: api: token: "%telegram_bot_api_token%" proxy: "socks5://127.0.0.1:8888"
Usage
API
$api = $this->container->get(TelegramBot\Api\BotApi::class);
For more info see Usage section in telegram-bot/api
library
Getting updates
bin/console telegram:updates
For more information see official documentation
Webhook
Set
bin/console telegram:webhook:set <url> [<path-to-certificate>]
Unset
bin/console telegram:webhook:unset
For more information see official documentation
Async command processing
To improve performance, you can leverage Messenger to process webhooks later via a Messenger transport.
composer req symfony/messenger
# config/packages/messenger.yaml framework: messenger: transports: async: "%env(MESSENGER_TRANSPORT_DSN)%" routing: 'BoShurik\TelegramBotBundle\Messenger\TelegramMessage': async
Adding commands
Commands must implement \BoShurik\TelegramBotBundle\Telegram\Command\CommandInterface
There is \BoShurik\TelegramBotBundle\Telegram\Command\AbstractCommand
you can start with
To register command: add tag boshurik_telegram_bot.command
to service definition
app.telegram.command: class: AppBundle\Telegram\Command\SomeCommand tags: - { name: boshurik_telegram_bot.command }
If you use autoconfigure
tag will be added automatically
There is predefined \BoShurik\TelegramBotBundle\Telegram\Command\HelpCommand
. You need to register it:
app.telegram.command.help: class: BoShurik\TelegramBotBundle\Telegram\Command\HelpCommand arguments: - '@BoShurik\TelegramBotBundle\Telegram\Command\CommandRegistry' tags: - { name: boshurik_telegram_bot.command }
It displays commands which additionally implement \BoShurik\TelegramBotBundle\Telegram\Command\PublicCommandInterface
Events
For more complex application (e.g. conversations) you can listen for BoShurik\TelegramBotBundle\Event\UpdateEvent
event
/** * @param UpdateEvent $event */ public function onUpdate(UpdateEvent $event) { $update = $event->getUpdate(); $message = $update->getMessage(); }
Login with Telegram
This bundle supports login through Telegram Api
If you want allow your Bot's users to login without requiring them to register again follow these instructions.