Message Methods
The messages namespace provides methods for working with messages in Telegram.
Accessing Messages Methods
// In EventHandler
$this->messages->sendMessage([...]);
// In API instance
$MadelineProto->messages->sendMessage([...]);
Sending Messages
sendMessage
Send a text message.
Destination peer (username, ID, or peer object)
Message text (up to 4096 characters)
Parse mode: ‘Markdown’, ‘HTML’, or ‘MarkdownV2’
Inline keyboard or reply keyboard
Send silently (no notification)
Schedule message (Unix timestamp)
Clear draft after sending
// Simple message
$this->messages->sendMessage([
'peer' => '@username',
'message' => 'Hello from MadelineProto!',
]);
// With formatting
$this->messages->sendMessage([
'peer' => $chatId,
'message' => '**Bold** and _italic_ text',
'parse_mode' => 'Markdown',
]);
// With keyboard
$this->messages->sendMessage([
'peer' => $chatId,
'message' => 'Choose an option:',
'reply_markup' => [
'inline_keyboard' => [[
['text' => 'Button 1', 'callback_data' => 'btn1'],
['text' => 'Button 2', 'callback_data' => 'btn2'],
]],
],
]);
// Reply to message
$this->messages->sendMessage([
'peer' => $chatId,
'message' => 'This is a reply',
'reply_to_msg_id' => $messageId,
]);
// Silent message
$this->messages->sendMessage([
'peer' => $chatId,
'message' => 'Silent notification',
'silent' => true,
]);
// Schedule message
$this->messages->sendMessage([
'peer' => $chatId,
'message' => 'Scheduled message',
'schedule_date' => time() + 3600, // Send in 1 hour
]);
Send media (photos, videos, documents).
// Send photo from path
$this->messages->sendMedia([
'peer' => $chatId,
'media' => [
'_' => 'inputMediaUploadedPhoto',
'file' => '/path/to/photo.jpg',
],
'message' => 'Photo caption',
]);
// Send document
$this->messages->sendMedia([
'peer' => $chatId,
'media' => [
'_' => 'inputMediaUploadedDocument',
'file' => '/path/to/file.pdf',
'attributes' => [
['_' => 'documentAttributeFilename', 'file_name' => 'document.pdf'],
],
],
'message' => 'Here is your document',
]);
// Send from URL
$this->messages->sendMedia([
'peer' => $chatId,
'media' => [
'_' => 'inputMediaPhotoExternal',
'url' => 'https://example.com/image.jpg',
],
]);
Editing Messages
editMessage
Edit a sent message.
Peer where message was sent
$this->messages->editMessage([
'peer' => $chatId,
'id' => $messageId,
'message' => 'Updated message text',
]);
// Edit with new keyboard
$this->messages->editMessage([
'peer' => $chatId,
'id' => $messageId,
'message' => 'Updated message',
'reply_markup' => [
'inline_keyboard' => [[
['text' => 'New Button', 'callback_data' => 'new'],
]],
],
]);
Deleting Messages
deleteMessages
Delete messages.
Array of message IDs to delete
Delete for all users (requires permissions)
// Delete single message
$this->messages->deleteMessages([
'id' => [$messageId],
'revoke' => true,
]);
// Delete multiple messages
$this->messages->deleteMessages([
'id' => [123, 124, 125],
'revoke' => true,
]);
Forwarding Messages
forwardMessages
Forward messages to another chat.
// Forward message
$this->messages->forwardMessages([
'from_peer' => $sourceChat,
'to_peer' => $destChat,
'id' => [$messageId],
]);
// Forward without attribution
$this->messages->forwardMessages([
'from_peer' => $sourceChat,
'to_peer' => $destChat,
'id' => [$messageId],
'drop_author' => true,
]);
Getting Messages
getHistory
Get message history.
Number of messages to retrieve (max 100)
// Get latest messages
$history = $this->messages->getHistory([
'peer' => $chatId,
'limit' => 50,
]);
// Get messages before specific ID
$history = $this->messages->getHistory([
'peer' => $chatId,
'offset_id' => $messageId,
'limit' => 50,
]);
getMessages
Get specific messages by ID.
$messages = $this->messages->getMessages([
'id' => [123, 456, 789],
]);
Search
search
Search messages.
filter
array
default:"{'_': 'inputMessagesFilterEmpty'}"
Message filter
// Search for text
$results = $this->messages->search([
'peer' => $chatId,
'q' => 'search term',
'limit' => 50,
]);
// Search for photos
$results = $this->messages->search([
'peer' => $chatId,
'q' => '',
'filter' => ['_' => 'inputMessagesFilterPhotos'],
'limit' => 50,
]);
// Search for documents
$results = $this->messages->search([
'peer' => $chatId,
'q' => '',
'filter' => ['_' => 'inputMessagesFilterDocument'],
]);
Pinning Messages
updatePinnedMessage
Pin a message.
Pin only for yourself in PM
// Pin message
$this->messages->updatePinnedMessage([
'peer' => $chatId,
'id' => $messageId,
]);
// Pin silently
$this->messages->updatePinnedMessage([
'peer' => $chatId,
'id' => $messageId,
'silent' => true,
]);
unpinAllMessages
Unpin all messages.
$this->messages->unpinAllMessages([
'peer' => $chatId,
]);
Read History
readHistory
Mark messages as read.
Mark as read up to this message ID
$this->messages->readHistory([
'peer' => $chatId,
'max_id' => $messageId,
]);
Complete Example
use danog\MadelineProto\EventHandler;
use danog\MadelineProto\EventHandler\Message;
use danog\MadelineProto\EventHandler\Filter\FilterRegex;
use danog\MadelineProto\ParseMode;
class MessageBot extends EventHandler
{
#[FilterRegex('/^\/send (.+)/')]
public function handleSend(Message $message): void
{
$text = $message->matches[1];
// Send message
$this->messages->sendMessage([
'peer' => $message->chatId,
'message' => "You said: $text",
'reply_to_msg_id' => $message->id,
]);
}
#[FilterRegex('/^\/forward (\d+)/')]
public function handleForward(Message $message): void
{
$msgId = (int)$message->matches[1];
// Forward message
$this->messages->forwardMessages([
'from_peer' => $message->chatId,
'to_peer' => $message->chatId,
'id' => [$msgId],
]);
}
#[FilterRegex('/^\/search (.+)/')]
public function handleSearch(Message $message): void
{
$query = $message->matches[1];
// Search messages
$results = $this->messages->search([
'peer' => $message->chatId,
'q' => $query,
'limit' => 10,
]);
$count = count($results['messages']);
$message->reply("Found $count messages matching '$query'");
}
#[FilterRegex('/^\/edit (\d+) (.+)/')]
public function handleEdit(Message $message): void
{
$msgId = (int)$message->matches[1];
$newText = $message->matches[2];
// Edit message
$this->messages->editMessage([
'peer' => $message->chatId,
'id' => $msgId,
'message' => $newText,
]);
}
}
See Also