Async PHP client/server API for the telegram MTProto protocol
https://docs.madelineproto.xyz
docs@0fc9b14f85 | ||
lua | ||
src | ||
tests | ||
userbots | ||
.babelrc | ||
.env.example | ||
.gitignore | ||
.gitmodules | ||
.php_cs.dist | ||
.travis.yml | ||
asyncify.php | ||
bot.php | ||
build_docs.php | ||
CHANGELOG.md | ||
CODE_OF_CONDUCT.md | ||
combined_bot.php | ||
composer.json | ||
CONTRIBUTING.md | ||
index.php | ||
layerdiff.php | ||
LICENSE | ||
makephar.php | ||
mtproxyd | ||
phar.php | ||
README.md | ||
secret_bot.php | ||
translator.php |
MadelineProto, a PHP MTProto telegram client
Created by Daniil Gentili
Do join the official channel, @MadelineProto and the support groups!
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!).
Getting started (now fully async!)
<?php
if (!file_exists('madeline.php')) {
copy('https://phar.madelineproto.xyz/madeline.php', 'madeline.php');
}
include 'madeline.php';
$MadelineProto = new \danog\MadelineProto\API('session.madeline');
$MadelineProto->async(true);
$MadelineProto->loop(function () use ($MadelineProto) {
yield $MadelineProto->start();
$me = yield $MadelineProto->get_self();
$MadelineProto->logger($me);
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' => 'https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg']);
} catch (\danog\MadelineProto\RPCErrorException $e) {
$MadelineProto->logger($e);
}
yield $MadelineProto->messages->sendMessage(['peer' => 'https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg', '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).
Documentation
- Async
- Creating a client
- Login
- Features
- Requirements
- Installation
- Handling updates (new messages)
- Settings
- Getting info about the current user
- Exceptions
- Avoiding FLOOD_WAITs
- Logging
- Telegram VoIP phone calls
- Uploading and downloading files
- Getting info about chats
- Getting all chats (dialogs)
- [Inline buttons (now fully async!)](https://docs.madelineproto.xyz/docs/INLINE_BUTTONS.html)
- Secret chats
- Lua binding
- Using a proxy
- Using methods
- FULL API Documentation with descriptions
- Logout
- Login
- Change 2FA password
- Get all chats, broadcast a message to all chats
- Get the full participant list of a channel/group/supergroup
- Get full info about a user/chat/supergroup/channel
- Get info about a user/chat/supergroup/channel
- Get info about the currently logged-in user
- Upload or download files up to 1.5 GB
- Make a phone call and play a song
- Create a secret chat bot
- Accept URL authorization: messages.acceptUrlAuth
- Accept contact: contacts.acceptContact
- Accept telegram passport authorization: account.acceptAuthorization
- Accept telegram's TOS: help.acceptTermsOfService
- Add a sticker set: messages.installStickerSet
- Add a sticker to favorites: messages.faveSticker
- Add a sticker to recent stickers: messages.saveRecentSticker
- Add a user to a normal chat (use channels->inviteToChannel for supergroups): messages.addChatUser
- Add contact: contacts.addContact
- Add phone number as contact: contacts.importContacts
- Add sticker to stickerset: stickers.addStickerToSet
- Add users to channel/supergroup: channels.inviteToChannel
- Block a user: contacts.block
- Bots only: get telegram passport authorization form: account.getAuthorizationForm
- Bots only: send payment form: payments.sendPaymentForm
- Bots only: set precheckout results: messages.setBotPrecheckoutResults
- Bots only: set shipping results: messages.setBotShippingResults
- Bots only: set the callback answer (after a button was clicked): messages.setBotCallbackAnswer
- Bots only: set the results of an inline query: messages.setInlineBotResults
- Call inline bot: messages.getInlineBotResults
- Cancel password recovery email: account.cancelPasswordEmail
- Change notification settings: account.updateNotifySettings
- Change sticker position in photo: stickers.changeStickerPosition
- Change the phone number associated to this account: account.changePhone
- Change the phone number: account.sendChangePhoneCode
- Change the profile photo: photos.updateProfilePhoto
- Change typing status: messages.setTyping
- Check if about to edit a message or a media caption: messages.getMessageEditData
- Check if an invitation link is valid: messages.checkChatInvite
- Check if this username is available: account.checkUsername
- Check if this username is free and can be assigned to a channel/supergroup: channels.checkUsername
- Clear all drafts: messages.clearAllDrafts
- Clear all recent stickers: messages.clearRecentStickers
- Clear saved payments info: payments.clearSavedInfo
- Confirm password recovery using email: account.confirmPasswordEmail
- Confirm this phone number is associated to this account, obtain phone_code_hash from sendConfirmPhoneCode: account.confirmPhone
- Contact signup notification setting value: account.getContactSignUpNotification
- Convert chat to supergroup: messages.migrateChat
- Create a chat (not supergroup): messages.createChat
- Create a theme: account.createTheme
- Create channel/supergroup: channels.createChannel
- Create stickerset: stickers.createStickerSet
- Delete a certain session: account.resetAuthorization
- Delete a certain telegram web login authorization: account.resetWebAuthorization
- Delete a channel/supergroup: channels.deleteChannel
- Delete a user from a chat (not supergroup): messages.deleteChatUser
- Delete all logged-in sessions.: auth.resetAuthorizations
- Delete all messages of a user in a channel/supergroup: channels.deleteUserHistory
- Delete all temporary authorization keys except the ones provided: auth.dropTempAuthKeys
- Delete channel/supergroup messages: channels.deleteMessages
- Delete chat history: messages.deleteHistory
- Delete contacts by phones: contacts.deleteByPhones
- Delete folder: folders.deleteFolder
- Delete messages: messages.deleteMessages
- Delete multiple contacts: contacts.deleteContacts
- Delete profile photos: photos.deletePhotos
- Delete scheduled messages: messages.deleteScheduledMessages
- Delete secure telegram passport value: account.deleteSecureValue
- Delete the history of a supergroup/channel: channels.deleteHistory
- Delete this account: account.deleteAccount
- Disable all notifications for a certain period: account.updateDeviceLocked
- Download a file through telegram: upload.getWebFile
- Edit a message: messages.editMessage
- Edit a sent inline message: messages.editInlineBotMessage
- Edit admin permissions of a user in a channel/supergroup: channels.editAdmin
- Edit admin permissions: messages.editChatAdmin
- Edit chat info: messages.editChatAbout
- Edit creator of channel: channels.editCreator
- Edit default rights of chat: messages.editChatDefaultBannedRights
- Edit folder: folders.editPeerFolders
- Edit location (geochats): channels.editLocation
- Edit the photo of a normal chat (not supergroup): messages.editChatPhoto
- Edit the photo of a supergroup/channel: channels.editPhoto
- Edit the title of a normal chat (not supergroup): messages.editChatTitle
- Edit the title of a supergroup/channel: channels.editTitle
- Edit user info: help.editUserInfo
- Enable or disable hidden history for new channel/supergroup users: channels.togglePreHistoryHidden
- Export chat invite : messages.exportChatInvite
- Find a sticker set: messages.searchStickerSets
- Finish account exporting session: account.finishTakeoutSession
- Forward messages: messages.forwardMessages
- Get CDN configuration: help.getCdnConfig
- Get a stickerset: messages.getStickerSet
- Get account TTL: account.getAccountTTL
- Get admin log of a channel/supergroup: channels.getAdminLog
- Get all archived stickers: messages.getArchivedStickers
- Get all channels you left: channels.getLeftChannels
- Get all chats (not supergroups or channels): messages.getAllChats
- Get all contacts: contacts.getContacts
- Get all logged-in authorizations: account.getAuthorizations
- Get all message drafts: messages.getAllDrafts
- Get all secure telegram passport values: account.getAllSecureValues
- Get all stickerpacks: messages.getAllStickers
- Get all supergroups/channels where you're admin: channels.getAdminedPublicChannels
- Get and increase message views: messages.getMessagesViews
- Get app config: help.getAppConfig
- Get autodownload settings: account.getAutoDownloadSettings
- Get available languages: langpack.getLanguages
- Get blocked users: contacts.getBlocked
- Get call configuration: phone.getCallConfig
- Get channel/supergroup messages: channels.getMessages
- Get channel/supergroup participants (you should use
$MadelineProto->get_pwr_chat($id)
instead): channels.getParticipants - Get chats in common with a user: messages.getCommonChats
- Get contacts by IDs: contacts.getContactIDs
- Get deep link info: help.getDeepLinkInfo
- Get dialog info of peers: messages.getPeerDialogs
- Get dialogs marked as unread manually: messages.getDialogUnreadMarks
- Get document by SHA256 hash: messages.getDocumentByHash
- Get emoji URL: messages.getEmojiURL
- Get emoji keyword difference: messages.getEmojiKeywordsDifference
- Get emoji keyword languages: messages.getEmojiKeywordsLanguages
- Get emoji keywords: messages.getEmojiKeywords
- Get favorite stickers: messages.getFavedStickers
- Get featured stickers: messages.getFeaturedStickers
- Get file hashes: upload.getFileHashes
- Get groups for discussion: channels.getGroupsForDiscussion
- Get high scores of a game sent in an inline message: messages.getInlineGameHighScores
- Get high scores of a game: messages.getGameHighScores
- Get info about a certain channel/supergroup participant: channels.getParticipant
- Get info about app updates: help.getAppUpdate
- Get info about chats: messages.getChats
- Get info about multiple channels/supergroups: channels.getChannels
- Get info about users: users.getUsers
- Get info of support user: help.getSupport
- Get information about the current proxy: help.getProxyData
- Get installed themes: account.getThemes
- Get invitation text: help.getInviteText
- Get language pack strings: langpack.getStrings
- Get language pack updates: langpack.getDifference
- Get language pack: langpack.getLangPack
- Get language: langpack.getLanguage
- Get masks: messages.getMaskStickers
- Get message ranges to fetch: messages.getSplitRanges
- Get messages: messages.getMessages
- Get most used chats: contacts.getTopPeers
- Get nearest datacenter: help.getNearestDc
- Get notification exceptions: account.getNotifyExceptions
- Get notification settings: account.getNotifySettings
- Get online status of all users: contacts.getStatuses
- Get online users: messages.getOnlines
- Get passport config: help.getPassportConfig
- Get payment form: payments.getPaymentForm
- Get payment receipt: payments.getPaymentReceipt
- Get people nearby (geochats): contacts.getLocated
- Get pinned dialogs: messages.getPinnedDialogs
- Get poll results: messages.getPollResults
- Get previous messages of a group: messages.getHistory
- Get privacy settings: account.getPrivacy
- Get recent locations: messages.getRecentLocations
- Get recent stickers: messages.getRecentStickers
- Get recent t.me URLs: help.getRecentMeUrls
- Get saved contacts: contacts.getSaved
- Get saved gifs: messages.getSavedGifs
- Get saved payments info: payments.getSavedInfo
- Get scheduled history: messages.getScheduledHistory
- Get scheduled messages: messages.getScheduledMessages
- Get search counter: messages.getSearchCounters
- Get secure value for telegram passport: account.getSecureValue
- Get server configuration: help.getConfig
- Get stats URL: messages.getStatsURL
- Get stickers attachable to images: messages.getAttachedStickers
- Get stickers: messages.getStickers
- Get support name: help.getSupportName
- Get telegram web login authorizations: account.getWebAuthorizations
- Get temporary password for buying products through bots: account.getTmpPassword
- Get the callback answer of a bot (after clicking a button): messages.getBotCallbackAnswer
- Get the changelog of this app: help.getAppChangelog
- Get the current 2FA settings: account.getPasswordSettings
- Get the current password: account.getPassword
- Get the link of a message in a channel: channels.exportMessageLink
- Get the profile photos of a user: photos.getUserPhotos
- Get the settings of apeer: messages.getPeerSettings
- Get theme information: account.getTheme
- Get unread mentions: messages.getUnreadMentions
- Get updated TOS: help.getTermsOfServiceUpdate
- Get user info: help.getUserInfo
- Get wallpaper info: account.getWallPaper
- Get webpage preview: messages.getWebPage
- Get webpage preview: messages.getWebPagePreview
- Gets list of chats: you should use $MadelineProto->get_dialogs() instead: https://docs.madelineproto.xyz/docs/DIALOGS.html: messages.getDialogs
- Global message search: messages.searchGlobal
- Hide peer settings bar: messages.hidePeerSettingsBar
- Import chat invite: messages.importChatInvite
- Initializes connection and save information on the user's device and application.: initConnection
- Install theme: account.installTheme
- Install wallpaper: account.installWallPaper
- Invalidate sent phone code: auth.cancelCode
- Invoke method from takeout session: invokeWithTakeout
- Invoke this method with layer X: invokeWithLayer
- Invoke with messages range: invokeWithMessagesRange
- Invoke with method without returning updates in the socket: invokeWithoutUpdates
- Invokes a query after successfull completion of one of the previous queries.: invokeAfterMsg
- Join a channel/supergroup: channels.joinChannel
- Kick or ban a user from a channel/supergroup: channels.editBanned
- Leave a channel/supergroup: channels.leaveChannel
- Log data for developer of this app: help.saveAppLog
- Mark channel/supergroup history as read: channels.readHistory
- Mark channel/supergroup messages as read: channels.readMessageContents
- Mark dialog as unread : messages.markDialogUnread
- Mark mentions as read: messages.readMentions
- Mark message as read: messages.readMessageContents
- Mark messages as read in secret chats: messages.readEncryptedHistory
- Mark messages as read: messages.readHistory
- Mark messages as read: messages.receivedMessages
- Mark new featured stickers as read: messages.readFeaturedStickers
- Notify server that you received a call (server will refuse all incoming calls until the current call is over): phone.receivedCall
- Pin or unpin dialog: messages.toggleDialogPin
- Register device for push notifications: account.registerDevice
- Remove a sticker set: messages.uninstallStickerSet
- Remove sticker from stickerset: stickers.removeStickerFromSet
- Reorder pinned dialogs: messages.reorderPinnedDialogs
- Reorder sticker sets: messages.reorderStickerSets
- Report a message in a supergroup/channel for spam: channels.reportSpam
- Report a message: messages.report
- Report a peer for spam: messages.reportSpam
- Report for spam a secret chat: messages.reportEncryptedSpam
- Report for spam: account.reportPeer
- Request URL authorization: messages.requestUrlAuth
- Resend password recovery email: account.resendPasswordEmail
- Resend the SMS verification code: auth.resendCode
- Reset all notification settings: account.resetNotifySettings
- Reset all telegram web login authorizations: account.resetWebAuthorizations
- Reset saved contacts: contacts.resetSaved
- Reset top peer rating for a certain category/peer: contacts.resetTopPeerRating
- Reset wallpapers: account.resetWallPapers
- Result type returned by a current query.: invokeAfterMsgs
- Returns a list of available wallpapers.: account.getWallPapers
- Save a GIF: messages.saveGif
- Save a message draft: messages.saveDraft
- Save autodownload settings: account.saveAutoDownloadSettings
- Save call debugging info: phone.saveCallDebug
- Save telegram passport secure value: account.saveSecureValue
- Save theme: account.saveTheme
- Save wallpaper: account.saveWallPaper
- Search contacts: contacts.search
- Search gifs: messages.searchGifs
- Search peers or messages: messages.search
- Send a custom request to the bot API: bots.sendCustomRequest
- Send a file to a secret chat: messages.sendEncryptedFile
- Send a media: messages.sendMedia
- Send a message: messages.sendMessage
- Send a service message to a secret chat: messages.sendEncryptedService
- Send an album: messages.sendMultiMedia
- Send an email to recover the 2FA password: auth.requestPasswordRecovery
- Send confirmation phone code: account.sendConfirmPhoneCode
- Send email verification code: account.sendVerifyEmailCode
- Send inline bot result obtained with messages.getInlineBotResults to the chat: messages.sendInlineBotResult
- Send message to secret chat: messages.sendEncrypted
- Send phone verification code: account.sendVerifyPhoneCode
- Send scheduled messages: messages.sendScheduledMessages
- Send screenshot notification: messages.sendScreenshotNotification
- Send typing notification to secret chat: messages.setEncryptedTyping
- Send vote: messages.sendVote
- Send webhook request via bot API: bots.answerWebhookJSONQuery
- Set account TTL: account.setAccountTTL
- Set contact sign up notification: account.setContactSignUpNotification
- Set discussion group of channel: channels.setDiscussionGroup
- Set phone call rating: phone.setCallRating
- Set privacy settings: account.setPrivacy
- Set secure value error for telegram passport: users.setSecureValueErrors
- Set the game score of an inline message: messages.setInlineGameScore
- Set the game score: messages.setGameScore
- Set the supergroup/channel stickerpack: channels.setStickers
- Set the update status of webhook: help.setBotUpdatesStatus
- Start a bot: messages.startBot
- Start account exporting session: account.initTakeoutSession
- Stop sending PUSH notifications to app: account.unregisterDevice
- Toggle channel signatures: channels.toggleSignatures
- Toggle slow mode: channels.toggleSlowMode
- Toggle top peers: contacts.toggleTopPeers
- Unblock a user: contacts.unblock
- Update online status: account.updateStatus
- Update pinned message: messages.updatePinnedMessage
- Update profile info: account.updateProfile
- Update the username of a supergroup/channel: channels.updateUsername
- Update theme: account.updateTheme
- Update this user's username: account.updateUsername
- Upload a file without sending it to anyone: messages.uploadMedia
- Upload a secret chat file without sending it to anyone: messages.uploadEncryptedFile
- Upload profile photo: photos.uploadProfilePhoto
- Upload theme: account.uploadTheme
- Upload wallpaper: account.uploadWallPaper
- Use phone_login instead: auth.sendCode
- Use the code that was emailed to you after running $MadelineProto->auth->requestPasswordRecovery to login to your account: auth.recoverPassword
- Validate requested payment info: payments.validateRequestedInfo
- Verify email address: account.verifyEmail
- Verify phone number: account.verifyPhone
- You cannot use this method directly, instead modify the PFS and default_temp_auth_key_expires_in settings, see https://docs.madelineproto.xyz/docs/SETTINGS.html for more info: auth.bindTempAuthKey
- You cannot use this method directly, instead use $MadelineProto->get_dh_config();: messages.getDhConfig
- You cannot use this method directly, see https://docs.madelineproto.xyz for more info on handling secret chats: messages.acceptEncryption
- You cannot use this method directly, see https://docs.madelineproto.xyz for more info on handling secret chats: messages.discardEncryption
- You cannot use this method directly, see https://docs.madelineproto.xyz for more info on handling secret chats: messages.requestEncryption
- You cannot use this method directly, see https://docs.madelineproto.xyz for more info on handling updates: updates.getChannelDifference
- You cannot use this method directly, see https://docs.madelineproto.xyz for more info on handling updates: updates.getDifference
- You cannot use this method directly, see https://docs.madelineproto.xyz for more info on handling updates: updates.getState
- You cannot use this method directly, see https://docs.madelineproto.xyz#calls for more info on handling calls: phone.acceptCall
- You cannot use this method directly, see https://docs.madelineproto.xyz#calls for more info on handling calls: phone.confirmCall
- You cannot use this method directly, see https://docs.madelineproto.xyz#calls for more info on handling calls: phone.discardCall
- You cannot use this method directly, see https://docs.madelineproto.xyz#calls for more info on handling calls: phone.requestCall
- You cannot use this method directly, use $MadelineProto->export_authorization() instead, see https://docs.madelineproto.xyz/docs/LOGIN.html: auth.exportAuthorization
- You cannot use this method directly, use $MadelineProto->import_authorization($authorization) instead, see https://docs.madelineproto.xyz/docs/LOGIN.html: auth.importAuthorization
- You cannot use this method directly, use the bot_login method instead (see https://docs.madelineproto.xyz for more info): auth.importBotAuthorization
- You cannot use this method directly, use the complete_2fa_login method instead (see https://docs.madelineproto.xyz for more info): auth.checkPassword
- You cannot use this method directly, use the complete_phone_login method instead (see https://docs.madelineproto.xyz for more info): auth.signIn
- You cannot use this method directly, use the complete_signup method instead (see https://docs.madelineproto.xyz for more info): auth.signUp
- You cannot use this method directly, use the get_pwr_chat, get_info, get_full_info methods instead (see https://docs.madelineproto.xyz for more info): channels.getFullChannel
- You cannot use this method directly, use the get_pwr_chat, get_info, get_full_info methods instead (see https://docs.madelineproto.xyz for more info): messages.getFullChat
- You cannot use this method directly, use the get_pwr_chat, get_info, get_full_info methods instead (see https://docs.madelineproto.xyz for more info): users.getFullUser
- You cannot use this method directly, use the logout method instead (see https://docs.madelineproto.xyz for more info): auth.logOut
- You cannot use this method directly, use the resolve_username, get_pwr_chat, get_info, get_full_info methods instead (see https://docs.madelineproto.xyz for more info): contacts.resolveUsername
- You cannot use this method directly, use the upload, download_to_stream, download_to_file, download_to_dir methods instead; see https://docs.madelineproto.xyz for more info: upload.getCdnFile
- You cannot use this method directly, use the upload, download_to_stream, download_to_file, download_to_dir methods instead; see https://docs.madelineproto.xyz for more info: upload.getCdnFileHashes
- You cannot use this method directly, use the upload, download_to_stream, download_to_file, download_to_dir methods instead; see https://docs.madelineproto.xyz for more info: upload.getFile
- You cannot use this method directly, use the upload, download_to_stream, download_to_file, download_to_dir methods instead; see https://docs.madelineproto.xyz for more info: upload.reuploadCdnFile
- You cannot use this method directly, use the upload, download_to_stream, download_to_file, download_to_dir methods instead; see https://docs.madelineproto.xyz for more info: upload.saveBigFilePart
- You cannot use this method directly, use the upload, download_to_stream, download_to_file, download_to_dir methods instead; see https://docs.madelineproto.xyz for more info: upload.saveFilePart
- You cannot use this method directly: messages.receivedQueue
- You cannot use this method directly; use $MadelineProto->update_2fa($params), instead (see https://docs.madelineproto.xyz for more info): account.updatePasswordSettings
- Peers
- Files
- Secret chats
- Entities (Markdown & HTML)
- reply_markup (keyboards & inline keyboards)
- bot API objects
- No result
- Queues
- Multiple method calls
- FULL API Documentation with descriptions
- Contributing
- Web templates for
$MadelineProto->start()
Very complex and complete examples
You can find examples for nearly every MadelineProto function in
tests/testing.php
- examples for making/receiving calls, making secret chats, sending secret chat messages, videos, audios, voice recordings, gifs, stickers, photos, sending normal messages, videos, audios, voice recordings, gifs, stickers, photos.bot.php
- examples for sending normal messages, downloading any mediasecret_bot.php
- secret chat botmagna.php
- examples for receiving callsuserbots/pipesbot.php
- examples for creating inline bots and using other inline bots via a userbotuserbots/MadelineProto_bot.php
- Multi-function botuserbots/pwrtelegram_debug_bot
- Multi-function bot