Updates represent real-time events from Telegram, such as new messages, edits, reactions, and more. MadelineProto provides strongly-typed update classes that make handling these events intuitive and type-safe.
All update classes extend danog\MadelineProto\EventHandler\Update from EventHandler/Update.php:31.
namespace danog\MadelineProto\EventHandler;abstract class Update extends IpcCapable implements JsonSerializable{ // Base functionality for all updates}
use danog\MadelineProto\EventHandler\Message;use danog\MadelineProto\EventHandler\Message\{PrivateMessage, GroupMessage, ChannelMessage, SecretMessage};// Base message class#[Handler]public function anyMessage(Message $message): void{ // Handles all message types}// Specific message types#[Handler]public function privateMessage(PrivateMessage $message): void{ // Only private chats}#[Handler]public function groupMessage(GroupMessage $message): void{ // Only groups}#[Handler]public function channelMessage(ChannelMessage $message): void{ // Only channels}
use danog\MadelineProto\EventHandler\Message\ServiceMessage;use danog\MadelineProto\EventHandler\Message\Service\*;#[Handler]public function dialogPhotoChanged(DialogPhotoChanged $message): void{ if ($message->photo) { $message->reply('New group photo!'); } else { $message->reply('Group photo removed'); }}#[Handler]public function userJoined(DialogMemberJoined $message): void{ $message->reply('Welcome to the group!');}#[Handler]public function pinnedMessage(DialogMessagePinned $message): void{ $pinned = $message->pinnedMessage; $message->reply('Message pinned!');}
From examples/bot.php:263, service messages provide structured data about chat events.
#[Handler]public function channelPost(Incoming&ChannelMessage $message): void{ if ($message->getDiscussion()) { // Post has comments enabled $message->getDiscussion()->reply('First!'); }}
From examples/bot.php:181, channel messages can have linked discussion groups.
use danog\MadelineProto\EventHandler\SimpleFilter\HasTopic;#[Handler]public function topicMessage(HasTopic&Message $message): void{ $topicId = $message->topicId; $message->reply('Message in topic!');}
use danog\MadelineProto\EventHandler\Story\Story;#[Handler]public function newStory(Story $story): void{ // Handle new story $this->logger("New story from {$story->senderId}");}
use danog\MadelineProto\EventHandler;class MyEventHandler extends EventHandler{ public function onAny(array $update): void { // Raw update array $this->logger(json_encode($update)); }}
From EventHandler.php:332, the onAny method receives all updates not handled by specific methods.
onAny receives raw MTProto arrays, not typed objects. Use typed handlers when possible.