Added CommandHandler
This commit is contained in:
parent
eacc106666
commit
2362365865
5 changed files with 134 additions and 3 deletions
12
src/TgBotLib/Abstracts/UpdateEventType.php
Normal file
12
src/TgBotLib/Abstracts/UpdateEventType.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Abstracts;
|
||||
|
||||
abstract class UpdateEventType
|
||||
{
|
||||
const GenericUpdate = 'generic_update';
|
||||
|
||||
const Message = 'message';
|
||||
|
||||
const EditedMessage = 'edited_message';
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
use CURLFile;
|
||||
use CurlHandle;
|
||||
use TgBotLib\Exceptions\TelegramException;
|
||||
use TgBotLib\Interfaces\CommandInterface;
|
||||
use TgBotLib\Interfaces\ObjectTypeInterface;
|
||||
use TgBotLib\Objects\Telegram\BotCommandScope;
|
||||
use TgBotLib\Objects\Telegram\Chat;
|
||||
|
@ -51,6 +52,11 @@
|
|||
*/
|
||||
private $curl_handle;
|
||||
|
||||
/**
|
||||
* @var CommandInterface[]
|
||||
*/
|
||||
private $command_handlers;
|
||||
|
||||
/**
|
||||
* Public Constructor
|
||||
*
|
||||
|
@ -62,6 +68,7 @@
|
|||
$this->host = 'api.telegram.org';
|
||||
$this->ssl = true;
|
||||
$this->last_update_id = 0;
|
||||
$this->command_handlers = [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -204,6 +211,71 @@
|
|||
return $parsed['result'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a command handler for the specified command
|
||||
*
|
||||
* @param string $command
|
||||
* @param CommandInterface $handler
|
||||
* @return void
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
public function setCommandHandler(string $command, CommandInterface $handler): void
|
||||
{
|
||||
$this->command_handlers[$command] = $handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the command handler for the specified command
|
||||
*
|
||||
* @param string $command
|
||||
* @return void
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
public function removeCommandHandler(string $command): void
|
||||
{
|
||||
unset($this->command_handlers[$command]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles a single update object
|
||||
*
|
||||
* @param Update $update
|
||||
* @return void
|
||||
*/
|
||||
public function handleUpdate(Update $update): void
|
||||
{
|
||||
if(($update->getMessage() ?? null) !== null && ($update->getMessage()->getText() ?? null) !== null)
|
||||
{
|
||||
$text = $update->getMessage()->getText();
|
||||
if(strpos($text, '/') === 0)
|
||||
{
|
||||
$command = explode(' ', substr($text, 1))[0];
|
||||
if(isset($this->command_handlers[$command]))
|
||||
{
|
||||
$this->command_handlers[$command]->handle($this, $update);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles all updates received from the Telegram API using long polling
|
||||
*
|
||||
* @param bool $run_forever
|
||||
* @return void
|
||||
* @throws TelegramException
|
||||
*/
|
||||
public function handleGetUpdates(bool $run_forever = false): void
|
||||
{
|
||||
do
|
||||
{
|
||||
$updates = $this->getUpdates();
|
||||
foreach($updates as $update)
|
||||
{
|
||||
$this->handleUpdate($update);
|
||||
}
|
||||
} while($run_forever);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this method to receive incoming updates using long polling (wiki). Returns an Array of Update objects.
|
||||
|
@ -348,7 +420,7 @@
|
|||
* @link https://core.telegram.org/bots/api#sendmessage
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
public function sendMessage(string|int $chat_id, string $text, array $options): Message
|
||||
public function sendMessage(string|int $chat_id, string $text, array $options=[]): Message
|
||||
{
|
||||
return Message::fromArray($this->sendRequest('sendMessage', array_merge($options, [
|
||||
'chat_id' => $chat_id,
|
||||
|
|
18
src/TgBotLib/Interfaces/CommandInterface.php
Normal file
18
src/TgBotLib/Interfaces/CommandInterface.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Interfaces;
|
||||
|
||||
use TgBotLib\Bot;
|
||||
use TgBotLib\Objects\Telegram\Update;
|
||||
|
||||
interface CommandInterface
|
||||
{
|
||||
/**
|
||||
* Execute the command
|
||||
*
|
||||
* @param Bot $bot
|
||||
* @param Update $update
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Bot $bot, Update $update): void;
|
||||
}
|
23
tests/commands/StartCommand.php
Normal file
23
tests/commands/StartCommand.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace commands;
|
||||
|
||||
use TgBotLib\Bot;
|
||||
use TgBotLib\Exceptions\TelegramException;
|
||||
use TgBotLib\Interfaces\CommandInterface;
|
||||
use TgBotLib\Objects\Telegram\Update;
|
||||
|
||||
class StartCommand implements CommandInterface
|
||||
{
|
||||
/**
|
||||
* @param Bot $bot
|
||||
* @param Update $update
|
||||
* @return void
|
||||
* @throws TelegramException
|
||||
*/
|
||||
public function handle(Bot $bot, Update $update): void
|
||||
{
|
||||
// reply to the incoming message
|
||||
$bot->sendMessage($update->getMessage()->getChat()->getId(), 'Hello, ' . $update->getMessage()->getFrom()->getFirstName());
|
||||
}
|
||||
}
|
|
@ -1,7 +1,13 @@
|
|||
<?php
|
||||
|
||||
use commands\StartCommand;
|
||||
|
||||
require 'ncc';
|
||||
import('net.nosial.tgbotlib');
|
||||
|
||||
$bot = new TgBotLib\Bot('5126030313:AAEn3QcwSvTJ2eAKUnSb_MkC5U0tlqkM1xw');
|
||||
$bot->sendMessage(chat_id: 570787098, text: 'Hello world!');
|
||||
require 'commands/StartCommand.php';
|
||||
|
||||
$bot = new TgBotLib\Bot('YOUR_BOT_TOKEN');
|
||||
$bot->setCommandHandler('start', new StartCommand());
|
||||
|
||||
$bot->handleGetUpdates(true);
|
Loading…
Add table
Reference in a new issue