diff --git a/README.md b/README.md
index 3872a1f7..1a3c3f47 100644
--- a/README.md
+++ b/README.md
@@ -214,6 +214,7 @@ Tip: if you receive an error (or nothing), [send us](https://t.me/pwrtelegramgro
* 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
@@ -342,6 +343,7 @@ Tip: if you receive an error (or nothing), [send us](https://t.me/pwrtelegramgro
* 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
@@ -353,6 +355,7 @@ Tip: if you receive an error (or nothing), [send us](https://t.me/pwrtelegramgro
* 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
diff --git a/build_docs.php b/build_docs.php
index 8fa93988..58c2a774 100755
--- a/build_docs.php
+++ b/build_docs.php
@@ -43,9 +43,9 @@ $docs = [
'readme' => false,
],
[
- 'tl_schema' => ['telegram' => __DIR__.'/src/danog/MadelineProto/TL_telegram_v104.tl', 'calls' => __DIR__.'/src/danog/MadelineProto/TL_calls.tl', 'secret' => __DIR__.'/src/danog/MadelineProto/TL_secret.tl', 'td' => __DIR__.'/src/danog/MadelineProto/TL_td.tl'],
- 'title' => 'MadelineProto API documentation (layer 104)',
- 'description' => 'MadelineProto API documentation (layer 104)',
+ 'tl_schema' => ['telegram' => __DIR__.'/src/danog/MadelineProto/TL_telegram_v105.tl', 'calls' => __DIR__.'/src/danog/MadelineProto/TL_calls.tl', 'secret' => __DIR__.'/src/danog/MadelineProto/TL_secret.tl', 'td' => __DIR__.'/src/danog/MadelineProto/TL_td.tl'],
+ 'title' => 'MadelineProto API documentation (layer 105)',
+ 'description' => 'MadelineProto API documentation (layer 105)',
'output_dir' => __DIR__.'/docs/docs/API_docs',
'readme' => false,
],
diff --git a/src/danog/MadelineProto/DocsBuilder/Methods.php b/src/danog/MadelineProto/DocsBuilder/Methods.php
index 3fe74de2..5322f05d 100644
--- a/src/danog/MadelineProto/DocsBuilder/Methods.php
+++ b/src/danog/MadelineProto/DocsBuilder/Methods.php
@@ -93,6 +93,7 @@ trait Methods
';
+ if (isset($this->td_descriptions['methods'][$data['method']]))
$this->human_docs_methods[$this->td_descriptions['methods'][$data['method']]['description'].': '.$data['method']] = '* '.$this->td_descriptions['methods'][$data['method']]['description'].': '.$data['method'].'
';
diff --git a/src/danog/MadelineProto/InternalDoc.php b/src/danog/MadelineProto/InternalDoc.php
index e7f205e0..ba39f117 100644
--- a/src/danog/MadelineProto/InternalDoc.php
+++ b/src/danog/MadelineProto/InternalDoc.php
@@ -641,6 +641,84 @@ interface account
* @return bool
*/
public function saveAutoDownloadSettings(array $params);
+
+ /**
+ * @param array params [
+ * InputFile file,
+ * InputFile thumb,
+ * string file_name,
+ * string mime_type,
+ * ]
+ *
+ * @return Document
+ */
+ public function uploadTheme(array $params);
+
+ /**
+ * @param array params [
+ * string slug,
+ * string title,
+ * InputDocument document,
+ * ]
+ *
+ * @return Theme
+ */
+ public function createTheme(array $params);
+
+ /**
+ * @param array params [
+ * string format,
+ * InputTheme theme,
+ * string slug,
+ * string title,
+ * InputDocument document,
+ * ]
+ *
+ * @return Theme
+ */
+ public function updateTheme(array $params);
+
+ /**
+ * @param array params [
+ * InputTheme theme,
+ * Bool unsave,
+ * ]
+ *
+ * @return bool
+ */
+ public function saveTheme(array $params);
+
+ /**
+ * @param array params [
+ * boolean dark,
+ * string format,
+ * InputTheme theme,
+ * ]
+ *
+ * @return bool
+ */
+ public function installTheme(array $params);
+
+ /**
+ * @param array params [
+ * string format,
+ * InputTheme theme,
+ * long document_id,
+ * ]
+ *
+ * @return Theme
+ */
+ public function getTheme(array $params);
+
+ /**
+ * @param array params [
+ * string format,
+ * int hash,
+ * ]
+ *
+ * @return account_Themes
+ */
+ public function getThemes(array $params);
}
interface users
@@ -977,6 +1055,7 @@ interface messages
* string message,
* ReplyMarkup reply_markup,
* MessageEntity entities,
+ * int schedule_date,
* ]
*
* @return Updates
@@ -994,6 +1073,7 @@ interface messages
* string message,
* ReplyMarkup reply_markup,
* MessageEntity entities,
+ * int schedule_date,
* ]
*
* @return Updates
@@ -1009,6 +1089,7 @@ interface messages
* InputPeer from_peer,
* int id,
* InputPeer to_peer,
+ * int schedule_date,
* ]
*
* @return Updates
@@ -1459,6 +1540,7 @@ interface messages
* int reply_to_msg_id,
* long query_id,
* string id,
+ * int schedule_date,
* ]
*
* @return Updates
@@ -1484,6 +1566,7 @@ interface messages
* InputMedia media,
* ReplyMarkup reply_markup,
* MessageEntity entities,
+ * int schedule_date,
* ]
*
* @return Updates
@@ -1844,6 +1927,7 @@ interface messages
* InputPeer peer,
* int reply_to_msg_id,
* InputSingleMedia multi_media,
+ * int schedule_date,
* ]
*
* @return Updates
@@ -2046,6 +2130,46 @@ interface messages
* @return bool
*/
public function hidePeerSettingsBar(array $params);
+
+ /**
+ * @param array params [
+ * InputPeer peer,
+ * int hash,
+ * ]
+ *
+ * @return messages_Messages
+ */
+ public function getScheduledHistory(array $params);
+
+ /**
+ * @param array params [
+ * InputPeer peer,
+ * int id,
+ * ]
+ *
+ * @return messages_Messages
+ */
+ public function getScheduledMessages(array $params);
+
+ /**
+ * @param array params [
+ * InputPeer peer,
+ * int id,
+ * ]
+ *
+ * @return Updates
+ */
+ public function sendScheduledMessages(array $params);
+
+ /**
+ * @param array params [
+ * InputPeer peer,
+ * int id,
+ * ]
+ *
+ * @return Updates
+ */
+ public function deleteScheduledMessages(array $params);
}
interface updates
diff --git a/src/danog/MadelineProto/Lang.php b/src/danog/MadelineProto/Lang.php
index 7eeb7c99..8c58993a 100644
--- a/src/danog/MadelineProto/Lang.php
+++ b/src/danog/MadelineProto/Lang.php
@@ -1,6 +1,6 @@
- [
+ public static $lang = array (
+ 'it' =>
+ array (
'phpseclib_fork' => 'Per favore installa questo fork di phpseclib: https://github.com/danog/phpseclib',
'inst_dc' => 'Istanziamento dei DataCenter...',
'load_rsa' => 'Caricamento delle chiavi RSA...',
@@ -161,9 +161,9 @@ class Lang
'done' => 'Fatto!',
'cdn_reupload' => 'Il file non è disponibile sul nostro CDN, richiedo la copia!',
'stored_on_cdn' => 'Il file è scaricabile tramite CDN!',
- ],
- 'en' =>
- [
+ ),
+ 'en' =>
+ array (
'req_pq' => 'Requesting pq...',
'done' => 'Done!',
'cdn_reupload' => 'File is not stored on CDN, requesting reupload!',
@@ -5157,11 +5157,97 @@ class Lang
'object_channelAdminLogEventActionToggleSlowMode_param_new_value_type_int' => 'New value',
'object_codeSettings_param_allow_app_hash_type_true' => 'Whether to allow a persistent app hash',
'object_channelFull_param_slowmode_next_send_date_type_int' => ' Indicates when the user will be allowed to send another message in the supergroup (unixdate)',
- ],
-];
+ 'method_account.uploadTheme' => 'Upload theme',
+ 'method_account.uploadTheme_param_file_type_InputFile' => 'File',
+ 'method_account.uploadTheme_param_thumb_type_InputFile' => 'Thumb',
+ 'method_account.uploadTheme_param_file_name_type_string' => 'File name',
+ 'method_account.uploadTheme_param_mime_type_type_string' => 'Mime type',
+ 'method_account.createTheme' => 'Create a theme',
+ 'method_account.createTheme_param_slug_type_string' => 'Unique theme ID',
+ 'method_account.createTheme_param_title_type_string' => 'Theme name',
+ 'method_account.createTheme_param_document_type_InputDocument' => 'Theme file',
+ 'method_account.updateTheme' => 'Update theme',
+ 'method_account.updateTheme_param_format_type_string' => 'Theme format, a string that identifies the theming engines supported by the client',
+ 'method_account.updateTheme_param_theme_type_InputTheme' => 'Theme to update',
+ 'method_account.updateTheme_param_slug_type_string' => 'Unique theme ID',
+ 'method_account.updateTheme_param_title_type_string' => 'Theme name',
+ 'method_account.updateTheme_param_document_type_InputDocument' => 'Theme file',
+ 'method_account.saveTheme_param_theme_type_InputTheme' => 'Theme to save',
+ 'method_account.saveTheme_param_unsave_type_Bool' => 'Unsave',
+ 'method_account.installTheme' => 'Install theme',
+ 'method_account.installTheme_param_format_type_string' => 'Format',
+ 'method_account.installTheme_param_theme_type_InputTheme' => 'Theme to install',
+ 'method_account.getTheme' => 'Get theme information',
+ 'method_account.getTheme_param_format_type_string' => 'Theme format, a string that identifies the theming engines supported by the client',
+ 'method_account.getTheme_param_theme_type_InputTheme' => 'Theme',
+ 'method_account.getTheme_param_document_id_type_long' => 'Document ID',
+ 'method_account.getThemes_param_format_type_string' => 'Theme format, a string that identifies the theming engines supported by the client',
+ 'method_account.getThemes_param_hash_type_Vector t' => 'Hash for pagination',
+ 'method_messages.sendMessage_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.sendMedia_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.forwardMessages_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.sendInlineBotResult_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.editMessage_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.sendMultiMedia_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.getScheduledHistory' => 'Get scheduled history',
+ 'method_messages.getScheduledHistory_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.getScheduledHistory_param_hash_type_Vector t' => 'Hash',
+ 'method_messages.getScheduledMessages' => 'Get scheduled messages',
+ 'method_messages.getScheduledMessages_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.getScheduledMessages_param_id_type_Vector t' => 'ID',
+ 'method_messages.sendScheduledMessages' => 'Send scheduled messages',
+ 'method_messages.sendScheduledMessages_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.sendScheduledMessages_param_id_type_Vector t' => 'ID',
+ 'method_messages.deleteScheduledMessages' => 'Delete scheduled messages',
+ 'method_messages.deleteScheduledMessages_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.deleteScheduledMessages_param_id_type_Vector t' => 'ID',
+ 'object_user_param_restriction_reason_type_Vector t' => 'Restriction reason',
+ 'object_channel_param_restriction_reason_type_Vector t' => 'Restriction reason',
+ 'object_chatFull_param_has_scheduled_type_true' => 'Has scheduled messages?',
+ 'object_channelFull_param_has_scheduled_type_true' => 'Has scheduled messages?',
+ 'object_message_param_edit_hide_type_true' => 'Whether to hide that the message was edited?',
+ 'object_message_param_restriction_reason_type_Vector t' => 'Restriction reason',
+ 'object_userFull_param_has_scheduled_type_true' => 'Has scheduled messages?',
+ 'object_updateNewScheduledMessage' => 'Update new scheduled message',
+ 'object_updateNewScheduledMessage_param_message_type_Message' => 'Message',
+ 'object_updateDeleteScheduledMessages' => 'Update delete scheduled messages',
+ 'object_updateDeleteScheduledMessages_param_peer_type_Peer' => 'Peer',
+ 'object_updateDeleteScheduledMessages_param_messages_type_Vector t' => 'Messages',
+ 'object_updateTheme' => 'Update theme',
+ 'object_updateTheme_param_theme_type_Theme' => 'Theme',
+ 'object_inputPrivacyKeyAddedByPhone' => 'Input privacy key added by phone',
+ 'object_privacyKeyAddedByPhone' => 'Privacy key added by phone',
+ 'object_webPage_param_documents_type_Vector t' => 'Documents',
+ 'object_restrictionReason' => 'Restriction reason',
+ 'object_restrictionReason_param_platform_type_string' => 'Platform',
+ 'object_restrictionReason_param_reason_type_string' => 'Reason',
+ 'object_restrictionReason_param_text_type_string' => 'Text',
+ 'object_inputTheme' => 'Input theme',
+ 'object_inputTheme_param_id_type_long' => 'ID',
+ 'object_inputTheme_param_access_hash_type_long' => 'Access hash',
+ 'object_inputThemeSlug' => 'Input theme slug',
+ 'object_inputThemeSlug_param_slug_type_string' => 'Slug',
+ 'object_themeDocumentNotModified' => 'Theme document not modified',
+ 'object_theme' => 'Theme',
+ 'object_theme_param_creator_type_true' => 'Creator?',
+ 'object_theme_param_default_type_true' => 'Default?',
+ 'object_theme_param_id_type_long' => 'ID',
+ 'object_theme_param_access_hash_type_long' => 'Access hash',
+ 'object_theme_param_slug_type_string' => 'Slug',
+ 'object_theme_param_title_type_string' => 'Title',
+ 'object_theme_param_document_type_Document' => 'Document',
+ 'object_theme_param_installs_count_type_int' => 'Installs count',
+ 'object_account.themesNotModified' => 'Themes not modified',
+ 'object_account.themes' => 'Themes',
+ 'object_account.themes_param_hash_type_int' => 'Hash',
+ 'object_account.themes_param_themes_type_Vector t' => 'Themes',
+ 'method_account.installTheme_param_dark_type_true' => 'Whether to install the dark version',
+ 'method_account.getThemes' => 'Get installed themes',
+ ),
+);
// THIS WILL BE OVERWRITTEN BY $lang["en"]
- public static $current_lang = [
+ public static $current_lang = array (
'req_pq' => 'Requesting pq...',
'done' => 'Done!',
'cdn_reupload' => 'File is not stored on CDN, requesting reupload!',
@@ -10155,5 +10241,91 @@ class Lang
'object_channelAdminLogEventActionToggleSlowMode_param_new_value_type_int' => 'New value',
'object_codeSettings_param_allow_app_hash_type_true' => 'Whether to allow a persistent app hash',
'object_channelFull_param_slowmode_next_send_date_type_int' => ' Indicates when the user will be allowed to send another message in the supergroup (unixdate)',
-];
+ 'method_account.uploadTheme' => 'Upload theme',
+ 'method_account.uploadTheme_param_file_type_InputFile' => 'File',
+ 'method_account.uploadTheme_param_thumb_type_InputFile' => 'Thumb',
+ 'method_account.uploadTheme_param_file_name_type_string' => 'File name',
+ 'method_account.uploadTheme_param_mime_type_type_string' => 'Mime type',
+ 'method_account.createTheme' => 'Create a theme',
+ 'method_account.createTheme_param_slug_type_string' => 'Unique theme ID',
+ 'method_account.createTheme_param_title_type_string' => 'Theme name',
+ 'method_account.createTheme_param_document_type_InputDocument' => 'Theme file',
+ 'method_account.updateTheme' => 'Update theme',
+ 'method_account.updateTheme_param_format_type_string' => 'Theme format, a string that identifies the theming engines supported by the client',
+ 'method_account.updateTheme_param_theme_type_InputTheme' => 'Theme to update',
+ 'method_account.updateTheme_param_slug_type_string' => 'Unique theme ID',
+ 'method_account.updateTheme_param_title_type_string' => 'Theme name',
+ 'method_account.updateTheme_param_document_type_InputDocument' => 'Theme file',
+ 'method_account.saveTheme_param_theme_type_InputTheme' => 'Theme to save',
+ 'method_account.saveTheme_param_unsave_type_Bool' => 'Unsave',
+ 'method_account.installTheme' => 'Install theme',
+ 'method_account.installTheme_param_format_type_string' => 'Format',
+ 'method_account.installTheme_param_theme_type_InputTheme' => 'Theme to install',
+ 'method_account.getTheme' => 'Get theme information',
+ 'method_account.getTheme_param_format_type_string' => 'Theme format, a string that identifies the theming engines supported by the client',
+ 'method_account.getTheme_param_theme_type_InputTheme' => 'Theme',
+ 'method_account.getTheme_param_document_id_type_long' => 'Document ID',
+ 'method_account.getThemes_param_format_type_string' => 'Theme format, a string that identifies the theming engines supported by the client',
+ 'method_account.getThemes_param_hash_type_Vector t' => 'Hash for pagination',
+ 'method_messages.sendMessage_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.sendMedia_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.forwardMessages_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.sendInlineBotResult_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.editMessage_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.sendMultiMedia_param_schedule_date_type_int' => 'Schedule date',
+ 'method_messages.getScheduledHistory' => 'Get scheduled history',
+ 'method_messages.getScheduledHistory_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.getScheduledHistory_param_hash_type_Vector t' => 'Hash',
+ 'method_messages.getScheduledMessages' => 'Get scheduled messages',
+ 'method_messages.getScheduledMessages_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.getScheduledMessages_param_id_type_Vector t' => 'ID',
+ 'method_messages.sendScheduledMessages' => 'Send scheduled messages',
+ 'method_messages.sendScheduledMessages_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.sendScheduledMessages_param_id_type_Vector t' => 'ID',
+ 'method_messages.deleteScheduledMessages' => 'Delete scheduled messages',
+ 'method_messages.deleteScheduledMessages_param_peer_type_InputPeer' => 'Peer',
+ 'method_messages.deleteScheduledMessages_param_id_type_Vector t' => 'ID',
+ 'object_user_param_restriction_reason_type_Vector t' => 'Restriction reason',
+ 'object_channel_param_restriction_reason_type_Vector t' => 'Restriction reason',
+ 'object_chatFull_param_has_scheduled_type_true' => 'Has scheduled messages?',
+ 'object_channelFull_param_has_scheduled_type_true' => 'Has scheduled messages?',
+ 'object_message_param_edit_hide_type_true' => 'Whether to hide that the message was edited?',
+ 'object_message_param_restriction_reason_type_Vector t' => 'Restriction reason',
+ 'object_userFull_param_has_scheduled_type_true' => 'Has scheduled messages?',
+ 'object_updateNewScheduledMessage' => 'Update new scheduled message',
+ 'object_updateNewScheduledMessage_param_message_type_Message' => 'Message',
+ 'object_updateDeleteScheduledMessages' => 'Update delete scheduled messages',
+ 'object_updateDeleteScheduledMessages_param_peer_type_Peer' => 'Peer',
+ 'object_updateDeleteScheduledMessages_param_messages_type_Vector t' => 'Messages',
+ 'object_updateTheme' => 'Update theme',
+ 'object_updateTheme_param_theme_type_Theme' => 'Theme',
+ 'object_inputPrivacyKeyAddedByPhone' => 'Input privacy key added by phone',
+ 'object_privacyKeyAddedByPhone' => 'Privacy key added by phone',
+ 'object_webPage_param_documents_type_Vector t' => 'Documents',
+ 'object_restrictionReason' => 'Restriction reason',
+ 'object_restrictionReason_param_platform_type_string' => 'Platform',
+ 'object_restrictionReason_param_reason_type_string' => 'Reason',
+ 'object_restrictionReason_param_text_type_string' => 'Text',
+ 'object_inputTheme' => 'Input theme',
+ 'object_inputTheme_param_id_type_long' => 'ID',
+ 'object_inputTheme_param_access_hash_type_long' => 'Access hash',
+ 'object_inputThemeSlug' => 'Input theme slug',
+ 'object_inputThemeSlug_param_slug_type_string' => 'Slug',
+ 'object_themeDocumentNotModified' => 'Theme document not modified',
+ 'object_theme' => 'Theme',
+ 'object_theme_param_creator_type_true' => 'Creator?',
+ 'object_theme_param_default_type_true' => 'Default?',
+ 'object_theme_param_id_type_long' => 'ID',
+ 'object_theme_param_access_hash_type_long' => 'Access hash',
+ 'object_theme_param_slug_type_string' => 'Slug',
+ 'object_theme_param_title_type_string' => 'Title',
+ 'object_theme_param_document_type_Document' => 'Document',
+ 'object_theme_param_installs_count_type_int' => 'Installs count',
+ 'object_account.themesNotModified' => 'Themes not modified',
+ 'object_account.themes' => 'Themes',
+ 'object_account.themes_param_hash_type_int' => 'Hash',
+ 'object_account.themes_param_themes_type_Vector t' => 'Themes',
+ 'method_account.installTheme_param_dark_type_true' => 'Whether to install the dark version',
+ 'method_account.getThemes' => 'Get installed themes',
+);
}
diff --git a/src/danog/MadelineProto/MTProto.php b/src/danog/MadelineProto/MTProto.php
index 250dd788..eab14919 100644
--- a/src/danog/MadelineProto/MTProto.php
+++ b/src/danog/MadelineProto/MTProto.php
@@ -82,7 +82,7 @@ class MTProto extends AsyncConstruct implements TLCallback
*
* @var int
*/
- const V = 130;
+ const V = 131;
/**
* String release version.
*
@@ -1005,12 +1005,12 @@ class MTProto extends AsyncConstruct implements TLCallback
'lang_pack' => $lang_pack,
], 'tl_schema' => [
// TL scheme files
- 'layer' => 104,
+ 'layer' => 105,
// layer version
'src' => [
'mtproto' => __DIR__.'/TL_mtproto_v1.tl',
// mtproto TL scheme
- 'telegram' => __DIR__.'/TL_telegram_v104.tl',
+ 'telegram' => __DIR__.'/TL_telegram_v105.tl',
// telegram TL scheme
'secret' => __DIR__.'/TL_secret.tl',
// secret chats TL scheme
diff --git a/src/danog/MadelineProto/MTProto/TempAuthKey.php b/src/danog/MadelineProto/MTProto/TempAuthKey.php
index 5e2a4985..b05a1af4 100644
--- a/src/danog/MadelineProto/MTProto/TempAuthKey.php
+++ b/src/danog/MadelineProto/MTProto/TempAuthKey.php
@@ -172,7 +172,7 @@ class TempAuthKey extends AuthKey implements JsonSerializable
}
/**
- * Sleep function
+ * Sleep function.
*
* @return array
*/
diff --git a/src/danog/MadelineProto/TL/PrettyException.php b/src/danog/MadelineProto/TL/PrettyException.php
index 421770c0..bbaf3f31 100644
--- a/src/danog/MadelineProto/TL/PrettyException.php
+++ b/src/danog/MadelineProto/TL/PrettyException.php
@@ -19,8 +19,6 @@
namespace danog\MadelineProto\TL;
-use danog\MadelineProto\Tools;
-
trait PrettyException
{
public $tl_trace;
diff --git a/src/danog/MadelineProto/TL_telegram_v105.tl b/src/danog/MadelineProto/TL_telegram_v105.tl
new file mode 100644
index 00000000..7a98421d
--- /dev/null
+++ b/src/danog/MadelineProto/TL_telegram_v105.tl
@@ -0,0 +1,1392 @@
+---types---
+ipPort#d433ad73 ipv4:int port:int = IpPort;
+ipPortSecret#37982646 ipv4:int port:int secret:bytes = IpPort;
+accessPointRule#4679b65f phone_prefix_rules:string dc_id:int ips:vector = AccessPointRule;
+help.configSimple#5a592a6c date:int expires:int rules:vector = help.ConfigSimple;
+
+boolFalse#bc799737 = Bool;
+boolTrue#997275b5 = Bool;
+
+true#3fedd339 = True;
+
+vector#1cb5c415 {t:Type} # [ t ] = Vector t;
+
+error#c4b9f9bb code:int text:string = Error;
+
+null#56730bcc = Null;
+
+inputPeerEmpty#7f3b18ea = InputPeer;
+inputPeerSelf#7da07ec9 = InputPeer;
+inputPeerChat#179be863 chat_id:int = InputPeer;
+inputPeerUser#7b8e7de6 user_id:int access_hash:long = InputPeer;
+inputPeerChannel#20adaef8 channel_id:int access_hash:long = InputPeer;
+inputPeerUserFromMessage#17bae2e6 peer:InputPeer msg_id:int user_id:int = InputPeer;
+inputPeerChannelFromMessage#9c95f7bb peer:InputPeer msg_id:int channel_id:int = InputPeer;
+
+inputUserEmpty#b98886cf = InputUser;
+inputUserSelf#f7c1b13f = InputUser;
+inputUser#d8292816 user_id:int access_hash:long = InputUser;
+inputUserFromMessage#2d117597 peer:InputPeer msg_id:int user_id:int = InputUser;
+
+inputPhoneContact#f392b7f4 client_id:long phone:string first_name:string last_name:string = InputContact;
+
+inputFile#f52ff27f id:long parts:int name:string md5_checksum:string = InputFile;
+inputFileBig#fa4f0bb5 id:long parts:int name:string = InputFile;
+
+inputMediaEmpty#9664f57f = InputMedia;
+inputMediaUploadedPhoto#1e287d04 flags:# file:InputFile stickers:flags.0?Vector ttl_seconds:flags.1?int = InputMedia;
+inputMediaPhoto#b3ba0635 flags:# id:InputPhoto ttl_seconds:flags.0?int = InputMedia;
+inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia;
+inputMediaContact#f8ab7dfb phone_number:string first_name:string last_name:string vcard:string = InputMedia;
+inputMediaUploadedDocument#5b38c6c1 flags:# nosound_video:flags.3?true file:InputFile thumb:flags.2?InputFile mime_type:string attributes:Vector stickers:flags.0?Vector ttl_seconds:flags.1?int = InputMedia;
+inputMediaDocument#23ab23d2 flags:# id:InputDocument ttl_seconds:flags.0?int = InputMedia;
+inputMediaVenue#c13d1c11 geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string = InputMedia;
+inputMediaGifExternal#4843b0fd url:string q:string = InputMedia;
+inputMediaPhotoExternal#e5bbfe1a flags:# url:string ttl_seconds:flags.0?int = InputMedia;
+inputMediaDocumentExternal#fb52dc99 flags:# url:string ttl_seconds:flags.0?int = InputMedia;
+inputMediaGame#d33f43f3 id:InputGame = InputMedia;
+inputMediaInvoice#f4e096c3 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string provider_data:DataJSON start_param:string = InputMedia;
+inputMediaGeoLive#ce4e82fd flags:# stopped:flags.0?true geo_point:InputGeoPoint period:flags.1?int = InputMedia;
+inputMediaPoll#6b3765b poll:Poll = InputMedia;
+
+inputChatPhotoEmpty#1ca48f57 = InputChatPhoto;
+inputChatUploadedPhoto#927c55b4 file:InputFile = InputChatPhoto;
+inputChatPhoto#8953ad37 id:InputPhoto = InputChatPhoto;
+
+inputGeoPointEmpty#e4c123d6 = InputGeoPoint;
+inputGeoPoint#f3b7acc9 lat:double long:double = InputGeoPoint;
+
+inputPhotoEmpty#1cd7bf0d = InputPhoto;
+inputPhoto#3bb3b94a id:long access_hash:long file_reference:bytes = InputPhoto;
+
+inputFileLocation#dfdaabe1 volume_id:long local_id:int secret:long file_reference:bytes = InputFileLocation;
+inputEncryptedFileLocation#f5235d55 id:long access_hash:long = InputFileLocation;
+inputDocumentFileLocation#bad07584 id:long access_hash:long file_reference:bytes thumb_size:string = InputFileLocation;
+inputSecureFileLocation#cbc7ee28 id:long access_hash:long = InputFileLocation;
+inputTakeoutFileLocation#29be5899 = InputFileLocation;
+inputPhotoFileLocation#40181ffe id:long access_hash:long file_reference:bytes thumb_size:string = InputFileLocation;
+inputPeerPhotoFileLocation#27d69997 flags:# big:flags.0?true peer:InputPeer volume_id:long local_id:int = InputFileLocation;
+inputStickerSetThumb#dbaeae9 stickerset:InputStickerSet volume_id:long local_id:int = InputFileLocation;
+
+peerUser#9db1bc6d user_id:int = Peer;
+peerChat#bad0e5bb chat_id:int = Peer;
+peerChannel#bddde532 channel_id:int = Peer;
+
+storage.fileUnknown#aa963b05 = storage.FileType;
+storage.filePartial#40bc6f52 = storage.FileType;
+storage.fileJpeg#7efe0e = storage.FileType;
+storage.fileGif#cae1aadf = storage.FileType;
+storage.filePng#a4f63c0 = storage.FileType;
+storage.filePdf#ae1e508d = storage.FileType;
+storage.fileMp3#528a0677 = storage.FileType;
+storage.fileMov#4b09ebbc = storage.FileType;
+storage.fileMp4#b3cea0e4 = storage.FileType;
+storage.fileWebp#1081464c = storage.FileType;
+
+userEmpty#200250ba id:int = User;
+user#938458c1 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string = User;
+
+userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto;
+userProfilePhoto#ecd75d8c photo_id:long photo_small:FileLocation photo_big:FileLocation dc_id:int = UserProfilePhoto;
+
+userStatusEmpty#9d05049 = UserStatus;
+userStatusOnline#edb93949 expires:int = UserStatus;
+userStatusOffline#8c703f was_online:int = UserStatus;
+userStatusRecently#e26f42f1 = UserStatus;
+userStatusLastWeek#7bf09fc = UserStatus;
+userStatusLastMonth#77ebc742 = UserStatus;
+
+chatEmpty#9ba2d800 id:int = Chat;
+chat#3bda1bde flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true deactivated:flags.5?true id:int title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat;
+chatForbidden#7328bdb id:int title:string = Chat;
+channel#d31a961e flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true slowmode_enabled:flags.22?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?Vector admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int = Chat;
+channelForbidden#289da732 flags:# broadcast:flags.5?true megagroup:flags.8?true id:int access_hash:long title:string until_date:flags.16?int = Chat;
+
+chatFull#1b7c9db3 flags:# can_set_username:flags.7?true has_scheduled:flags.8?true id:int about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int = ChatFull;
+channelFull#2d895c74 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true can_set_location:flags.16?true has_scheduled:flags.19?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?int location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int pts:int = ChatFull;
+
+chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant;
+chatParticipantCreator#da13538a user_id:int = ChatParticipant;
+chatParticipantAdmin#e2d6e436 user_id:int inviter_id:int date:int = ChatParticipant;
+
+chatParticipantsForbidden#fc900c2b flags:# chat_id:int self_participant:flags.0?ChatParticipant = ChatParticipants;
+chatParticipants#3f460fed chat_id:int participants:Vector version:int = ChatParticipants;
+
+chatPhotoEmpty#37c1011c = ChatPhoto;
+chatPhoto#475cdbd5 photo_small:FileLocation photo_big:FileLocation dc_id:int = ChatPhoto;
+
+messageEmpty#83e5de54 id:int = Message;
+message#452c0e65 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long restriction_reason:flags.22?Vector = Message;
+messageService#9e19a1f6 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true legacy:flags.19?true id:int from_id:flags.8?int to_id:Peer reply_to_msg_id:flags.3?int date:int action:MessageAction = Message;
+
+messageMediaEmpty#3ded6320 = MessageMedia;
+messageMediaPhoto#695150d7 flags:# photo:flags.0?Photo ttl_seconds:flags.2?int = MessageMedia;
+messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia;
+messageMediaContact#cbf24940 phone_number:string first_name:string last_name:string vcard:string user_id:int = MessageMedia;
+messageMediaUnsupported#9f84f49e = MessageMedia;
+messageMediaDocument#9cb070d7 flags:# document:flags.0?Document ttl_seconds:flags.2?int = MessageMedia;
+messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia;
+messageMediaVenue#2ec0533f geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string = MessageMedia;
+messageMediaGame#fdb19008 game:Game = MessageMedia;
+messageMediaInvoice#84551347 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string = MessageMedia;
+messageMediaGeoLive#7c3c2609 geo:GeoPoint period:int = MessageMedia;
+messageMediaPoll#4bd6e798 poll:Poll results:PollResults = MessageMedia;
+
+messageActionEmpty#b6aef7b0 = MessageAction;
+messageActionChatCreate#a6638b9a title:string users:Vector = MessageAction;
+messageActionChatEditTitle#b5a1ce5a title:string = MessageAction;
+messageActionChatEditPhoto#7fcb13a8 photo:Photo = MessageAction;
+messageActionChatDeletePhoto#95e3fbef = MessageAction;
+messageActionChatAddUser#488a7337 users:Vector = MessageAction;
+messageActionChatDeleteUser#b2ae9b0c user_id:int = MessageAction;
+messageActionChatJoinedByLink#f89cf5e8 inviter_id:int = MessageAction;
+messageActionChannelCreate#95d2ac92 title:string = MessageAction;
+messageActionChatMigrateTo#51bdb021 channel_id:int = MessageAction;
+messageActionChannelMigrateFrom#b055eaee title:string chat_id:int = MessageAction;
+messageActionPinMessage#94bd38ed = MessageAction;
+messageActionHistoryClear#9fbab604 = MessageAction;
+messageActionGameScore#92a72876 game_id:long score:int = MessageAction;
+messageActionPaymentSentMe#8f31b327 flags:# currency:string total_amount:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string charge:PaymentCharge = MessageAction;
+messageActionPaymentSent#40699cd0 currency:string total_amount:long = MessageAction;
+messageActionPhoneCall#80e11a7f flags:# video:flags.2?true call_id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = MessageAction;
+messageActionScreenshotTaken#4792929b = MessageAction;
+messageActionCustomAction#fae69f56 message:string = MessageAction;
+messageActionBotAllowed#abe9affe domain:string = MessageAction;
+messageActionSecureValuesSentMe#1b287353 values:Vector credentials:SecureCredentialsEncrypted = MessageAction;
+messageActionSecureValuesSent#d95c6154 types:Vector = MessageAction;
+messageActionContactSignUp#f3f25f76 = MessageAction;
+
+dialog#2c171f72 flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int = Dialog;
+dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog;
+
+photoEmpty#2331b22d id:long = Photo;
+photo#d07504a5 flags:# has_stickers:flags.0?true id:long access_hash:long file_reference:bytes date:int sizes:Vector dc_id:int = Photo;
+
+photoSizeEmpty#e17e23c type:string = PhotoSize;
+photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = PhotoSize;
+photoCachedSize#e9a734fa type:string location:FileLocation w:int h:int bytes:bytes = PhotoSize;
+photoStrippedSize#e0b0bc2e type:string bytes:bytes = PhotoSize;
+
+geoPointEmpty#1117dd5f = GeoPoint;
+geoPoint#296f104 long:double lat:double access_hash:long = GeoPoint;
+
+auth.sentCode#5e002502 flags:# type:auth.SentCodeType phone_code_hash:string next_type:flags.1?auth.CodeType timeout:flags.2?int = auth.SentCode;
+
+auth.authorization#cd050916 flags:# tmp_sessions:flags.0?int user:User = auth.Authorization;
+auth.authorizationSignUpRequired#44747e9a flags:# terms_of_service:flags.0?help.TermsOfService = auth.Authorization;
+
+auth.exportedAuthorization#df969c2d id:int bytes:bytes = auth.ExportedAuthorization;
+
+inputNotifyPeer#b8bc5b0c peer:InputPeer = InputNotifyPeer;
+inputNotifyUsers#193b4417 = InputNotifyPeer;
+inputNotifyChats#4a95e84e = InputNotifyPeer;
+inputNotifyBroadcasts#b1db7c7e = InputNotifyPeer;
+
+inputPeerNotifySettings#9c3d198e flags:# show_previews:flags.0?Bool silent:flags.1?Bool mute_until:flags.2?int sound:flags.3?string = InputPeerNotifySettings;
+
+peerNotifySettings#af509d20 flags:# show_previews:flags.0?Bool silent:flags.1?Bool mute_until:flags.2?int sound:flags.3?string = PeerNotifySettings;
+
+peerSettings#818426cd flags:# report_spam:flags.0?true add_contact:flags.1?true block_contact:flags.2?true share_contact:flags.3?true need_contacts_exception:flags.4?true report_geo:flags.5?true = PeerSettings;
+
+wallPaper#a437c3ed id:long flags:# creator:flags.0?true default:flags.1?true pattern:flags.3?true dark:flags.4?true access_hash:long slug:string document:Document settings:flags.2?WallPaperSettings = WallPaper;
+
+inputReportReasonSpam#58dbcab8 = ReportReason;
+inputReportReasonViolence#1e22c78d = ReportReason;
+inputReportReasonPornography#2e59d922 = ReportReason;
+inputReportReasonChildAbuse#adf44ee3 = ReportReason;
+inputReportReasonOther#e1746d0a text:string = ReportReason;
+inputReportReasonCopyright#9b89f93a = ReportReason;
+inputReportReasonGeoIrrelevant#dbd4feed = ReportReason;
+
+userFull#edf17c12 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true user:User about:flags.1?string settings:PeerSettings profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int = UserFull;
+
+contact#f911c994 user_id:int mutual:Bool = Contact;
+
+importedContact#d0028438 user_id:int client_id:long = ImportedContact;
+
+contactBlocked#561bc879 user_id:int date:int = ContactBlocked;
+
+contactStatus#d3680c61 user_id:int status:UserStatus = ContactStatus;
+
+contacts.contactsNotModified#b74ba9d2 = contacts.Contacts;
+contacts.contacts#eae87e42 contacts:Vector saved_count:int users:Vector = contacts.Contacts;
+
+contacts.importedContacts#77d01c3b imported:Vector popular_invites:Vector retry_contacts:Vector users:Vector = contacts.ImportedContacts;
+
+contacts.blocked#1c138d15 blocked:Vector users:Vector = contacts.Blocked;
+contacts.blockedSlice#900802a1 count:int blocked:Vector users:Vector = contacts.Blocked;
+
+messages.dialogs#15ba6c40 dialogs:Vector