Skip to content

MTProto: Chats & Channels ​

Introduction ​

MTProto exposes the full account surface for managing groups, supergroups, and channels — far beyond what the Bot API allows. Every method here is called on the ClientRequest handed to your listeners and controllers, and each accepts peer values in the convenient forms ('@username', id, 'me', or a peer object). Replies route back to the originating session automatically.

Inside a listener closure:

php
use LaraGram\MTProto\Facades\Client;
use LaraGram\MTProto\Foundation\ClientRequest;

Client::onCommand('ban', function (ClientRequest $request) {
    $request->banChatMember(peer: $request->chatId(), user: $request->message->from_id->user_id);
});

Or a controller method — bind it with Client::onCommand('ban', [GroupController::class, 'ban']):

php
use LaraGram\MTProto\Foundation\ClientRequest;

class GroupController
{
    public function ban(ClientRequest $request)
    {
        $request->banChatMember(peer: $request->chatId(), user: $request->message->from_id->user_id);
    }
}

The examples below use $request — the object your handler or controller receives.

Reading Chats ​

Chat & Member Info ​

php
$full   = $request->getFullChat(peer: '@laragram');           // Full chat/channel info
$member = $request->getChatMember(peer: '@laragram', user: '@durov');

Iterating Dialogs, History & Participants ​

Large collections are exposed as memory-friendly generators that page through Telegram transparently, so you can foreach over an entire chat list, history, or member roster without managing offsets:

php
// Every dialog (chat) the account is in
foreach ($request->iterateDialogs() as $dialog) {
    // ...
}

// A chat's full message history
foreach ($request->iterateHistory(peer: '@laragram') as $message) {
    // ...
}

// A chat's participants
foreach ($request->iterateParticipants(peer: '@laragram') as $participant) {
    // ...
}

For a single page instead of a generator, use getParticipants(peer: ..., limit: ...).

Creating Chats ​

php
$request->createGroup(title: 'Project Team', users: ['@alice', '@bob']);
$request->createSupergroup(title: 'Community', about: 'Say hi 👋');
$request->createChannel(title: 'Announcements', about: 'Official updates');

Managing Members ​

Banning & Restricting ​

php
$request->banChatMember(peer: '@group', user: '@spammer');
$request->banChatMember(peer: '@group', user: 123, until: time() + 3600); // 1-hour ban
$request->unbanChatMember(peer: '@group', user: 123);
$request->kickChatMember(peer: '@group', user: 123);   // Remove without a permanent ban

$request->restrictChatMember(
    peer: '@group',
    user: 123,
    restrictions: ['send_media' => true, 'send_polls' => true],
    until: time() + 86400,
);

Admins ​

php
$request->promoteChatMember(
    peer: '@group',
    user: '@moderator',
    rights: ['delete_messages' => true, 'ban_users' => true],
    rank: 'Moderator',
);

$request->demoteChatMember(peer: '@group', user: '@moderator');

Adding & Removing ​

php
$request->addChatMembers(peer: '@group', users: ['@alice', '@bob']);
$request->joinChat(peer: '@laragram');
$request->leaveChat(peer: '@laragram');
$request->deleteChat(peer: '@oldgroup');

Chat Settings ​

php
$request->setChatTitle(peer: '@group', title: 'New Title');
$request->setChatDescription(peer: '@group', about: 'A fresh description.');
$request->setChatPhoto(peer: '@group', path: '/path/to/photo.jpg');
$request->deleteChatPhoto(peer: '@group');
$request->blockUser(peer: '@spammer');
$request->unblockUser(peer: '@spammer');

php
$link = $request->exportInviteLink(peer: '@group');                       // Primary link
$temp = $request->exportInviteLink(peer: '@group', params: ['usage_limit' => 10, 'expire_date' => time() + 3600]);

$links = $request->getInviteLinks(peer: '@group');
$request->editInviteLink(peer: '@group', link: $temp['link'], params: ['usage_limit' => 20]);
$request->revokeInviteLink(peer: '@group', link: $temp['link']);
$request->deleteInviteLink(peer: '@group', link: $temp['link']);

Pinning Messages ​

php
$request->pinMessage(peer: '@group', id: 500, silent: true);
$request->unpinMessage(peer: '@group', id: 500);
$request->unpinAllMessages(peer: '@group');

Forum Topics ​

Supergroups with topics enabled ("forums") are fully supported:

php
$request->toggleForum(peer: '@group', enabled: true);

$topic = $request->createForumTopic(peer: '@group', title: 'Feature Requests');
$request->editForumTopic(peer: '@group', topicId: $topic['id'], params: ['title' => 'Ideas']);
$request->closeForumTopic(peer: '@group', topicId: $topic['id']);
$request->hideForumTopic(peer: '@group', topicId: $topic['id']);
$request->pinForumTopic(peer: '@group', topicId: $topic['id']);
$request->deleteForumTopic(peer: '@group', topicId: $topic['id']);

$topics = $request->getForumTopics(peer: '@group');

To post into a topic, pass its id as top_msg_id when sending:

php
$request->sendMessage(peer: '@group', message: 'Posted in a topic', top_msg_id: $topic['id']);

Communities ​

Telegram Communities (grouped chats) are managed through their own methods:

php
$request->createCommunity(title: 'My Community', /* ... */);
$joined = $request->getJoinedCommunities();
$request->toggleCommunityCollapsed(/* ... */);
$request->approveCommunityPeerLink(/* ... */);

Your Profile ​

Manage the logged-in account's own profile:

php
$request->updateProfile(params: ['first_name' => 'John', 'about' => 'Built with LaraGram']);
$request->setUsername(username: 'john_laragram');
$request->setProfilePhoto(path: '/path/to/avatar.jpg');
$request->deleteProfilePhotos(photos: $photoIds);
$request->setEmojiStatus(emoji: 5368324170671202286);
$request->setOnline(online: true);

// Contacts
$request->getContacts();
$request->addContact(user: '@alice', firstName: 'Alice', phone: '+12025550123');
$request->deleteContacts(users: '@alice');

Boosts ​

Channel boost status and the account's own boosts (a Telegram Premium feature) are available via:

php
$status  = $request->getBoostsStatus(peer: '@channel');
$mine    = $request->getMyBoosts();
$applied = $request->getUserBoosts(peer: '@channel', user: '@durov');

Next: uploading and downloading files in the Media reference.

Released under the MIT License.