Async PHP client/server API for the telegram MTProto protocol
https://docs.madelineproto.xyz
docs@336c4d4aa0 | ||
examples | ||
legacy/danog/MadelineProto/Server | ||
src | ||
tests | ||
ton | ||
tools | ||
.env.example | ||
.gitignore | ||
.gitmodules | ||
.php_cs.dist | ||
.travis.yml | ||
bot.php | ||
CODE_OF_CONDUCT.md | ||
composer.json | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md |
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!
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->getSelf();
$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->getPwrChat($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->getDialogs() 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 phoneLogin 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->getDhConfig();: 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->exportAuthorization() instead, see https://docs.madelineproto.xyz/docs/LOGIN.html: auth.exportAuthorization
- You cannot use this method directly, use $MadelineProto->importAuthorization($authorization) instead, see https://docs.madelineproto.xyz/docs/LOGIN.html: auth.importAuthorization
- You cannot use this method directly, use the botLogin method instead (see https://docs.madelineproto.xyz for more info): auth.importBotAuthorization
- You cannot use this method directly, use the completePhoneLogin method instead (see https://docs.madelineproto.xyz for more info): auth.signIn
- You cannot use this method directly, use the completeSignup method instead (see https://docs.madelineproto.xyz for more info): auth.signUp
- 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 getPwrChat, getInfo, getFullInfo methods instead (see https://docs.madelineproto.xyz for more info): channels.getFullChannel
- You cannot use this method directly, use the getPwrChat, getInfo, getFullInfo methods instead (see https://docs.madelineproto.xyz for more info): messages.getFullChat
- You cannot use this method directly, use the getPwrChat, getInfo, getFullInfo 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 resolveUsername, getPwrChat, getInfo, getFullInfo methods instead (see https://docs.madelineproto.xyz for more info): contacts.resolveUsername
- You cannot use this method directly, use the upload, downloadToStream, downloadToFile, downloadToDir methods instead; see https://docs.madelineproto.xyz for more info: upload.getCdnFile
- You cannot use this method directly, use the upload, downloadToStream, downloadToFile, downloadToDir methods instead; see https://docs.madelineproto.xyz for more info: upload.getCdnFileHashes
- You cannot use this method directly, use the upload, downloadToStream, downloadToFile, downloadToDir methods instead; see https://docs.madelineproto.xyz for more info: upload.getFile
- You cannot use this method directly, use the upload, downloadToStream, downloadToFile, downloadToDir methods instead; see https://docs.madelineproto.xyz for more info: upload.reuploadCdnFile
- You cannot use this method directly, use the upload, downloadToStream, downloadToFile, downloadToDir methods instead; see https://docs.madelineproto.xyz for more info: upload.saveBigFilePart
- You cannot use this method directly, use the upload, downloadToStream, downloadToFile, downloadToDir 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
- magnaluna webradio - Multifeatured Telegram VoIP webradio
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 botpipesbot.php
- examples for creating inline bots and using other inline bots via a userbot