Async PHP client/server API for the telegram MTProto protocol
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Daniil Gentili d8319e39d3
1 year ago
.devcontainer Check output buffering level 1 year ago
.github Funding 2 years ago
docs@e83c3ea026 Some templates 1 year ago
examples Psalm improvements 1 year ago
legacy/danog/MadelineProto Clean up 2 years ago
schemas@8fd40f0a41 Update to layer 117 1 year ago
src Bugfix 1 year ago
tests PHPDOC 1 year ago
ton Update even more typehints 1 year ago
tools Complete overhaul of MTProto message system, parallelized getPwrChat 1 year ago
.env.example Improve docs 4 years ago
.gitignore Refactoring 1 year ago
.gitmodules Allow git modules install without ssh key (#810) 2 years ago
.php_cs.dist Final fixes 1 year ago
.travis.yml Provide DNS fallback 2 years ago Clean up 2 years ago Bugfixes 5 years ago
LICENSE Reorganized code 6 years ago Update docs 1 year ago
bot.php Clean up 2 years ago
composer.json Some templates 1 year ago
psalm.xml Clean up 2 years ago

MadelineProto, a PHP MTProto telegram client

Created by Daniil Gentili

Do join the official channel, @MadelineProto and the support groups!

Now with Telegram TON blockchain integration!

Approved by Telegram!

What's this?

This library can be used to easily interact with Telegram without the bot API, just like the official apps.

It can login with a phone number (MTProto API), or with a bot token (MTProto API, no bot API involved!).

It is now fully async!

Getting started (now fully async!)


if (!file_exists('madeline.php')) {
    copy('', 'madeline.php');
include 'madeline.php';

$MadelineProto = new \danog\MadelineProto\API('session.madeline');
$MadelineProto->loop(function () use ($MadelineProto) {
    yield $MadelineProto->start();

    $me = yield $MadelineProto->getSelf();


    if (!$me['bot']) {
        yield $MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => "Hi!\nThanks for creating MadelineProto! <3"]);
        yield $MadelineProto->channels->joinChannel(['channel' => '@MadelineProto']);

        try {
            yield $MadelineProto->messages->importChatInvite(['hash' => '']);
        } catch (\danog\MadelineProto\RPCErrorException $e) {

        yield $MadelineProto->messages->sendMessage(['peer' => '', 'message' => 'Testing MadelineProto!']);
    yield $MadelineProto->echo('OK, done!');

Try this code now! or run this code in a browser or in a console.

Tip: if you receive an error (or nothing), send us the error message and the MadelineProto.log file that was created in the same directory (if running from a browser).


You can find examples for nearly every MadelineProto function in

  • magnaluna webradio - Multifeatured Telegram VoIP webradio
  • downloadRenameBot.php - download files by URL and rename Telegram files using this async parallelized bot!
  • bot.php - examples for sending normal messages, downloading any media
  • secret_bot.php - secret chat bot
  • pipesbot.php - examples for creating inline bots and using other inline bots via a userbot