askoldex / teletant
Telegram bot framework
Requires
- php: ^7.4|^8.0
- ext-json: *
- ext-mbstring: *
- askoldex/formatter: 1.0.3
- guzzlehttp/guzzle: 7.2
- psr/log: ^1.1.3
README
Authors: @askoldex, @uniqkic
Inspiration: telegraf, irazasyed/telegram-bot-sdk
Examples
Getting Started
Requirements
- PHP 7.2
- Composer
Installation
composer require askoldex/teletant
Usage
require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; use Askoldex\Teletant\Bot; use Askoldex\Teletant\Context; use Askoldex\Teletant\Settings; $settings = new Settings('token'); $settings->setHookOnFirstRequest(false); $bot = new Bot($settings);
Run as long poll (getUpdates)
$bot->polling();
Run as webhook (listen webhook address)
$bot->listen();
Fast Examples:
Making command
$bot->onCommand('start', function (Context $ctx) { $ctx->reply('Hello world'); });
Message field handler
$bot->onMessage('sticker', function (Context $ctx) { $ctx->reply('Nice sticker!'); });
Update field handler
$bot->onUpdate('message', function (Context $ctx) { $ctx->reply('Answer on any message (text, sticker, photo, etc.)'); });
CallbackQuery "data" field handler
$bot->onAction('like', function (Context $ctx) { $ctx->reply('You pressed the button with callaback_data=like'); });
Find substring in Message text
$bot->onHears('fu*k', function (Context $ctx) { $ctx->reply('Stop! If you continue, you will be banned'); });
Or use array substrings
$bot->onHears(['di*k', 'f**k'], function (Context $ctx) { $ctx->reply('Stop! If you continue, you will be banned'); });
Making command with parameters
$bot->onText('/message {user:integer} {message:string}', function (Context $ctx) { $ctx->withVars()->reply("User id: {v-user}\nMessage: {v-message}"); });
Parameter without validation type syntax: {name}
Optional parameter without validation type syntax: {name?}
Parameter syntax: {name:validator_name}
Optional parameter syntax: {name:validation_name?}\If you need >2 spaced parameters. For example:
/msg {a:string} {b:string}. If message text will be "/msg hello world guys". Variable values will be: a = hello world, b = guys).
To explicitly separate variables you need to use Boxed variables:
Syntax: {name:string:box}
Example: /msg {name:string:"} {msg:string:"}
In result you getcommand with syntax:
/msg "{name:string}" "{msg:string}"
Example: /msg "John Smith" "hello world"
Variables: name=John Smith, msg=hello world.
Boxed variable may be optional, syntax: {name:type:box?}
Default validation types
Validator "any" used as default ({name} == {name:any})