Compare commits

..

7 commits

Author SHA1 Message Date
netkas
5bff732814 Updated CHANGELOG.md 2024-12-20 03:10:19 -05:00
netkas
c52d2f3601 Add support for handling callback query events 2024-12-20 03:09:49 -05:00
netkas
f9741c250d Added containsMedia method to Message object to check if the message contains media. 2024-12-09 12:19:42 -05:00
netkas
07ff3c4d2b Bumped version to 8.0.2 2024-12-07 00:52:35 -05:00
netkas
c4fdd71bdc Updated CHANGELOG.md 2024-12-04 13:38:11 -05:00
netkas
3c692424f7 Allow nullable type for MessageEntity type 2024-12-04 13:36:50 -05:00
netkas
8408430ef8 Refactor PollingBot to use PsyncLib for updates 2024-12-04 13:36:49 -05:00
6 changed files with 78 additions and 11 deletions

View file

@ -4,13 +4,30 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [8.0.1] - Ongoing ## [8.0.2] - 2024-12-09
This update introduces some quality of life improvements.
### Added
* Added `containsMedia` method to `Message` object to check if the message contains media.
* Add support for handling callback query events
## [8.0.1] - 2024-12-04
This update introduces bug fixes and improvements This update introduces bug fixes and improvements
### Changed
* Refactor PollingBot to use PsyncLib for updates
* Refactor optional parameters in method signatures
* Improve command check with method existence validation
### Fixed ### Fixed
* Reposition debug log for event handler execution. * Reposition debug log for event handler execution.
* Improve command check with method existence validation * Improve command check with method existence validation
* Allow nullable type for MessageEntity type
* Encode arrays as JSON in SendAudio parameters
* Refactor fromArray method for null data handling
## [8.0.0] - 2024-11-29 ## [8.0.0] - 2024-11-29

View file

@ -12,7 +12,7 @@
"package": "net.nosial.tgbotlib", "package": "net.nosial.tgbotlib",
"description": "TgBotLib is a library for interacting with the Telegram Bot API", "description": "TgBotLib is a library for interacting with the Telegram Bot API",
"company": "Nosial", "company": "Nosial",
"version": "8.0.1", "version": "8.0.2",
"uuid": "b409e036-ab04-11ed-b32e-9d3f57a644ae" "uuid": "b409e036-ab04-11ed-b32e-9d3f57a644ae"
}, },
"build": { "build": {

View file

@ -19,6 +19,7 @@
use TgBotLib\Enums\Types\ChatActionType; use TgBotLib\Enums\Types\ChatActionType;
use TgBotLib\Enums\Types\ParseMode; use TgBotLib\Enums\Types\ParseMode;
use TgBotLib\Enums\Types\StickerFormat; use TgBotLib\Enums\Types\StickerFormat;
use TgBotLib\Events\CallbackQueryEvent;
use TgBotLib\Events\CommandEvent; use TgBotLib\Events\CommandEvent;
use TgBotLib\Events\UpdateEvent; use TgBotLib\Events\UpdateEvent;
use TgBotLib\Exceptions\TelegramException; use TgBotLib\Exceptions\TelegramException;
@ -375,6 +376,26 @@
return $results; return $results;
} }
/**
* @method array getEventHandlersByCallbackQuery(string $callbackData) Retrieves an array of event handlers whose callback data matches the given parameter.
* @param string $callbackData The callback data to match against the registered event handlers.
* @return array An array of matching event handler instances.
*/
public function getEventHandlersByCallbackQuery(string $callbackData): array
{
$results = [];
/** @var UpdateEvent $eventHandler */
foreach($this->eventHandlers as $eventHandler)
{
if(method_exists($eventHandler, 'getCallbackData') && $eventHandler::getCallbackData() === $callbackData)
{
$results[] = $eventHandler;
}
}
return $results;
}
/** /**
* Removes all event handlers. * Removes all event handlers.
* *
@ -429,7 +450,6 @@
$command = $update?->getAnyMessage()?->getCommand(); $command = $update?->getAnyMessage()?->getCommand();
if($command !== null) if($command !== null)
{ {
$commandExecuted = false;
Logger::getLogger()->debug(sprintf('Executing command %s for update %s', $command, $update->getUpdateId())); Logger::getLogger()->debug(sprintf('Executing command %s for update %s', $command, $update->getUpdateId()));
/** @var CommandEvent $eventHandler */ /** @var CommandEvent $eventHandler */
@ -438,7 +458,6 @@
try try
{ {
(new $eventHandler($update))->handle($this); (new $eventHandler($update))->handle($this);
$commandExecuted = true;
} }
catch(TelegramException $e) catch(TelegramException $e)
{ {
@ -449,10 +468,28 @@
Logger::getLogger()->error(sprintf('Exception occurred: %s', $e->getMessage()), $e); Logger::getLogger()->error(sprintf('Exception occurred: %s', $e->getMessage()), $e);
} }
} }
}
if($commandExecuted) $callbackData = $update?->getCallbackQuery()?->getData();
if($callbackData !== null)
{ {
return; Logger::getLogger()->debug(sprintf('Executing callback query %s for update %s', $callbackData, $update->getUpdateId()));
/** @var CallbackQueryEvent $eventHandler */
foreach($this->getEventHandlersByCallbackQuery($callbackData) as $eventHandler)
{
try
{
(new $eventHandler($update))->handle($this);
}
catch(TelegramException $e)
{
Logger::getLogger()->error(sprintf('Telegram exception occurred: %s', $e->getMessage()), $e);
}
catch(Exception $e)
{
Logger::getLogger()->error(sprintf('Exception occurred: %s', $e->getMessage()), $e);
}
} }
} }

View file

@ -115,11 +115,6 @@
return EventType::SHIPPING_QUERY; return EventType::SHIPPING_QUERY;
} }
if($update->getCallbackQuery() !== null)
{
return EventType::CALLBACK_QUERY;
}
if($update->getChosenInlineResult() !== null) if($update->getChosenInlineResult() !== null)
{ {
return EventType::CHOSEN_INLINE_RESULT; return EventType::CHOSEN_INLINE_RESULT;

View file

@ -2,6 +2,7 @@
namespace TgBotLib\Events; namespace TgBotLib\Events;
use LogicException;
use TgBotLib\Enums\EventType; use TgBotLib\Enums\EventType;
use TgBotLib\Objects\CallbackQuery; use TgBotLib\Objects\CallbackQuery;
@ -15,6 +16,13 @@
return EventType::CALLBACK_QUERY; return EventType::CALLBACK_QUERY;
} }
/**
* Retrieves data associated with the callback.
*
* @return string
*/
public abstract static function getCallbackData(): string;
/** /**
* New incoming callback query * New incoming callback query
* *

View file

@ -1061,6 +1061,16 @@
return null; return null;
} }
/**
* Checks if any media content is present in the message.
*
* @return bool True if media content is present, false otherwise.
*/
public function containsMedia(): bool
{
return $this->getPhoto() !== null || $this->getAnimation() !== null || $this->getAudio() !== null || $this->getDocument() !== null || $this->getSticker() !== null || $this->getVideo() !== null || $this->getVideoNote() !== null || $this->getVoice() !== null;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */