Add event handling system to Bot class
This commit is contained in:
parent
1db75f74f6
commit
40fd31cc79
1 changed files with 102 additions and 0 deletions
|
@ -12,7 +12,9 @@
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
use TgBotLib\Abstracts\Method;
|
use TgBotLib\Abstracts\Method;
|
||||||
|
use TgBotLib\Abstracts\UpdateEvent;
|
||||||
use TgBotLib\Classes\Logger;
|
use TgBotLib\Classes\Logger;
|
||||||
|
use TgBotLib\Enums\EventType;
|
||||||
use TgBotLib\Enums\Methods;
|
use TgBotLib\Enums\Methods;
|
||||||
use TgBotLib\Enums\Types\ChatActionType;
|
use TgBotLib\Enums\Types\ChatActionType;
|
||||||
use TgBotLib\Enums\Types\ParseMode;
|
use TgBotLib\Enums\Types\ParseMode;
|
||||||
|
@ -139,6 +141,7 @@
|
||||||
private string $token;
|
private string $token;
|
||||||
private string $endpoint;
|
private string $endpoint;
|
||||||
private bool $auto_retry;
|
private bool $auto_retry;
|
||||||
|
private array $eventHandlers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new Bot instance
|
* Constructs a new Bot instance
|
||||||
|
@ -151,6 +154,7 @@
|
||||||
$this->token = $token;
|
$this->token = $token;
|
||||||
$this->endpoint = $endpoint;
|
$this->endpoint = $endpoint;
|
||||||
$this->auto_retry = true;
|
$this->auto_retry = true;
|
||||||
|
$this->eventHandlers = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -225,6 +229,104 @@
|
||||||
return $this->auto_retry;
|
return $this->auto_retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the list of event handlers.
|
||||||
|
*
|
||||||
|
* @return array The array of event handlers.
|
||||||
|
*/
|
||||||
|
public function getEventHandlers(): array
|
||||||
|
{
|
||||||
|
return $this->eventHandlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers an event handler class for processing events.
|
||||||
|
*
|
||||||
|
* @param string $className The fully qualified class name of the event handler to add.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException if the class does not exist or does not extend UpdateEvent.
|
||||||
|
*/
|
||||||
|
public function addEventHandler(string $className): void
|
||||||
|
{
|
||||||
|
if(in_array($className, $this->eventHandlers))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!class_exists($className))
|
||||||
|
{
|
||||||
|
throw new InvalidArgumentException(sprintf('The given className %s does not exist', $className));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!is_subclass_of($className, UpdateEvent::class))
|
||||||
|
{
|
||||||
|
throw new InvalidArgumentException(sprintf('The given className %s must extend UpdateEvent', $className));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->eventHandlers[] = $className;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves all event handlers that match a specified event type.
|
||||||
|
*
|
||||||
|
* @param EventType $type The event type to filter handlers by.
|
||||||
|
* @return array An array of event handlers that handle the specified event type.
|
||||||
|
*/
|
||||||
|
public function getEventHandlersByType(EventType $type): array
|
||||||
|
{
|
||||||
|
$results = [];
|
||||||
|
/** @var UpdateEvent $eventHandler */
|
||||||
|
foreach($this->eventHandlers as $eventHandler)
|
||||||
|
{
|
||||||
|
if($eventHandler::getEventType() === $type)
|
||||||
|
{
|
||||||
|
$results[] = $eventHandler;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all event handlers.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function clearEventHandlers(): void
|
||||||
|
{
|
||||||
|
$this->eventHandlers = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all event handlers of a specified type.
|
||||||
|
*
|
||||||
|
* @param EventType $type The event type to filter handlers by.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function removeEventHandlersByType(EventType $type): void
|
||||||
|
{
|
||||||
|
$this->eventHandlers = array_filter($this->eventHandlers, function($eventHandler) use ($type)
|
||||||
|
{
|
||||||
|
return $eventHandler::getEventType() !== $type;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes an event handler by its class name if it exists.
|
||||||
|
*
|
||||||
|
* @param string $className The fully qualified class name of the event handler to remove.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function removeEventHandlerByName(string $className): void
|
||||||
|
{
|
||||||
|
$this->eventHandlers = array_filter($this->eventHandlers, function($eventHandler) use ($className)
|
||||||
|
{
|
||||||
|
return $eventHandler !== $className;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a request by executing the specified method with the given parameters.
|
* Sends a request by executing the specified method with the given parameters.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue