HUGE bugfixes and code reorganization, implemented secret chats and a lua wrapper

This commit is contained in:
Daniil Gentili 2017-03-11 19:54:51 +01:00
parent 1485d38792
commit dfd8bf93da
9693 changed files with 123674 additions and 19889 deletions

4
.gitignore vendored
View File

@ -87,3 +87,7 @@ docs_md
.env
composer.lock
b.php
*.log
telegram-cli*
src/danog/MadelineProto/Fuzzer.php
fuzzer.php

132
README.md
View File

@ -10,7 +10,7 @@ Logo created by [Matthew Hesketh](http://matthewhesketh.com) (thanks again!).
PHP implementation of MTProto, based on [telepy](https://github.com/griganton/telepy_old).
This project can run on PHP 7 and HHVM, only 64 bit systems are supported ATM. You must also install the mbstring, curl extensions.
This project can run on PHP 7 and HHVM, only 64 bit systems are supported ATM. You must also install the mbstring, curl extensions and the PHP Lua extension if you want to use the lua binding.
Also note that MadelineProto will perform better if python and a big math extension like gmp or bcmath are installed.
@ -18,10 +18,46 @@ This project is in beta state.
The MadelineProto API documentation can be found [here (layer 62)](https://daniil.it/MadelineProto/API_docs/).
The TD documentation can be found [here](https://daniil.it/MadelineProto/TD_docs/).
The MadelineProto API documentation (mtproto tl scheme) can be found [here](https://daniil.it/MadelineProto/MTProto_docs/).
The MadelineProto API documentations (old layers) can be found [here](https://github.com/danog/MadelineProto/tree/master/old_docs).
Features:
* It allows you to do everything official clients can do, programmatically!
* It is very fast!
* It can be easily serialized!
* It featured update handling with callbacks or long polling!
* Easy to use wrappers to upload/download files and call mtproto methods
* Documentation for EVERY mtproto method!
* Internal peer management: you can provide a simple bot API chat id or a username to send a message or to call other mtproto methods!
* You can easily login as a user (2FA is supported) or as a bot!
* Simple error handling!
* It is highly customizable with a lot of different settings!
* Bot API file id/object support (even for users)!
* A Lua binding
* A lua wrapper for td-cli scripts
* Secret chats
## Acknowledgements
While writing this client, I looked at many projects for inspiration and help. Here's the full list:
@ -41,13 +77,13 @@ Thanks to the devs that contributed to these projects, MadelineProto is now an e
### RTFM
If you have some questions about the usage of the methods of this library, you can contact me [@danogentili](https://telegram.me/danogentili).
If you have some questions about the usage of the methods of this library, you can join the [support group](https://telegram.me/pwrtelegramgroup) or contact [@danogentili](https://telegram.me/danogentili).
But first, please read this WHOLE page very carefully, follow all links to external documentation, and read all examples in the repo.
If you don't understand something, read everything again.
I will NOT answer to questions that can be answered simply by reading this page; I will instead tell you to read it carefully twice.
I will NOT answer to questions that can be answered simply by reading this page; I will instead ask you to read it carefully twice.
### Installation
@ -130,6 +166,7 @@ $MadelineProto->update_settings($settings);
### Handling updates
When an update is received, the update callback function (see settings) is called. By default, the get_updates_update_handler MadelineProto method is called. This method stores all incoming updates into an array (its size limit is specified by the updates\_array\_limit parameter in the settings) and can be fetched by running the `get_updates` method.
IMPORTANT Note that you should turn off update handling if you don't plan to use it because the default get_updates update handling stores updates in an array inside the MadelineProto class, without deleting old ones unless they are read using get_updates. This will eventually fill up the RAM of your server if you don't disable updates or read them using get_updates.
This method accepts an array of options as the first parameter, and returns an array of updates (an array containing the update id and an object of type [Update](https://daniil.it/MadelineProto/API_docs/types/Update.html)). Example:
```
@ -253,11 +290,16 @@ Every method described in this section accepts a last optional paramater with a
The upload method returns an [InputFile](https://daniil.it/MadelineProto/API_docs/types/InputFile.html) object that must be used to generate an [InputMedia](https://daniil.it/MadelineProto/API_docs/types/InputMedia.html) object, that can be later sent using the [sendmedia method](https://daniil.it/MadelineProto/API_docs/methods/messages_sendMedia.html).
The `upload_encrypted` method returns an [InputEncryptedFile](https://daniil.it/MadelineProto/API_docs/types/InputEncryptedFile.html) object that must be used to generate an [EncryptedMessage](https://daniil.it/MadelineProto/API_docs/types/EncryptedMessage.html) object, that can be later sent using the [sendEncryptedFile method](https://daniil.it/MadelineProto/API_docs/methods/messages_sendEncryptedFile.html).
```
$inputFile = $MadelineProto->upload('file', 'optional new file name.ext');
// Generate an inputMedia object and store it in $inputMedia, see tests/testing.php
$MadelineProto->messages->sendMedia(['peer' => '@pwrtelegramgroup', 'media' => $inputMedia]);
$inputEncryptedFile = $MadelineProto->upload_encrypted('file', 'optional new file name.ext');
```
To convert the result of sendMedia to a bot API file id select the messageMedia object from the output of the method and pass it to `$MadelineProto->API->MTProto_to_botAPI()`.
@ -266,7 +308,7 @@ See tests/testing.php for more examples.
There are multiple download methods that allow you to download a file to a directory, to a file or to a stream.
The first parameter of these functions must always be either a [messageMediaPhoto](https://daniil.it/MadelineProto/API_docs/constructors/messageMediaPhoto.html) or a [messageMediaDocument](https://daniil.it/MadelineProto/API_docs/constructors/messageMediaDocument.html) object or a bot API file id. These objects are usually received in updates, see `bot.php` for examples
The first parameter of these functions must always be either a [messageMediaPhoto](https://daniil.it/MadelineProto/API_docs/constructors/messageMediaPhoto.html) or a [messageMediaDocument](https://daniil.it/MadelineProto/API_docs/constructors/messageMediaDocument.html) object, an [EncryptedMessage](https://daniil.it/MadelineProto/API_docs/types/EncryptedMessage.html) or a bot API file id. These objects are usually received in updates, see `bot.php` for examples
```
@ -277,6 +319,81 @@ $MadelineProto->download_to_stream($message_media, $stream, $cb, $offset, $endof
```
### Secret chats
MadelineProto provides some wrappers to work with secret chats:
```
$secret_chat = $MadelineProto->request_secret_chat($InputUser);
```
`request_secret_chat` requests a secret secret chat to the [InputUser](https://daniil.it/MadelineProto/API_docs/types/InputUser.html) specified, and returns a number that can be used instead of an [InputEncryptedChat](https://daniil.it/MadelineProto/API_docs/constructors/inputEncryptedChat.html).
Secret chats are accepted or refused automatically, based on a value in the settings array (by default MadelineProto is set to accept all secret chats).
Before sending any message, you must check if the secret chat was accepted by the other client with the following method:
```
$status = $MadelineProto->secret_chat_info($chat);
```
Returns 0 if the chat cannot be found in the local database, 1 if the chat was requested but not yet accepted, and 2 if it is a valid accepted secret chat.
To send messages/files/service messages, simply use the sendEncrypted methods with objects that use the same layer used by the other client (specified by the number after the underscore in decryptedMessage object names, to obtain the layer that must be used for a secret chat use the following wrapper method).
```
$secret_chat = $MadelineProto->get_secret_chat($chat);
/*
[
'key' => [ // The authorization key
'auth_key' => 'string', // 256 bytes long
'fingerprint' => 10387374747492, // a 64 bit signed integer
'visualization_orig' => 'string', // 16 bytes long
'visualization_46' => 'string', // 20 bytes long
// The two visualization strings must be concatenated to generate a visual fingerprint
],
'admin' => false, // Am I the creator of the chat?
'user_id' => 101374607, // The user id of the other user
'InputEncryptedChat' => [...], // An inputEncryptedChat object that represents the current chat
'in_seq_no_x' => number, // in_seq_no must be multiplied by two and incremented by this before being sent over the network
'out_seq_no_x' => number, // out_seq_no must be multiplied by two and incremeneted this begore being sent over the network
'layer' => number, // The secret chat TL layer used by the other client
'ttl' => number, // The default time to live of messages in this chat
'ttr' => 100, // Time left before rekeying must be done, decremented by one every time a message as encrypted/decrypted with this key
'updated' => time(), // Last time the key of the current chat was changed
'incoming' => [], // Incoming messages, TL serialized strings
'outgoing' => [], // Outgoing ~
'created' => time(), // When was this chat created
'rekeying' => [0] // Info for rekeying
];
*/
```
This method gets info about a certain chat.
### Lua binding
The lua binding makes use of the Lua php extension.
When istantiating the `\danog\MadelineProto\Lua` class, the first parameter provided to the constructor must be the path to the lua script, and the second parameter a logged in instance of MadelineProto.
The class is basically a wrapper for the lua environment, so by setting an attribute you're setting a variable in the Lua environment, by reading an attribute you're reading a variable from the lua environment, and by calling a function you're actually calling a Lua function you declared in the script.
By assigning a callable to an attribute, you're actually assigning a new function in the lua environment that once called, will call the php callable.
Passing lua callables to a parameter of a PHP callable will throw an exception due to a bug in the PHP lua extension that I gotta fix (so passing the usual cb and cb_extra parameters to the td-cli wrappers isn't yet possible).
All MadelineProto wrapper methods (for example upload, download, upload_encrypted, get_self, and others) are imported in the Lua environment, as well as all MTProto wrappers (see the API docs for more info).
td-cli wrappers are also present: you can use the tdcli_function in lua and pass mtproto updates to the tdcli_update_callback via PHP, they will be automatically converted to/from td objects. Please note that the object conversion is not complete, feel free to contribute to the conversion module in `src/danog/MadelineProto/Conversion/TD.php`.
For examples, see `lua/*`.
### Calling mtproto methods and available wrappers
The API documentation can be found [here](https://daniil.it/MadelineProto/API_docs/).
@ -294,6 +411,8 @@ $ping = $MadelineProto->ping([3]); // parameter names can be omitted as long as
$message = "Hey! I'm sending this message with MadelineProto!";
$sentMessage = $MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $message]);
var_dump($sentMessage);
$me = $MadelineProto->get_self(); // This gets info about the currently logged in user as a User object
```
The API class also provides some wrapper methods for logging in as a bot or as a normal user, and for getting inputPeer constructors to use in sendMessage and other methods:
@ -345,6 +464,11 @@ MadelineProto can throw three different exceptions:
* \danog\MadelineProto\NothingInTheSocketException - Thrown if no data can be read from the TCP socket
* \danog\MadelineProto\SecurityException - Thrown on security problems (invalid params during generation of auth key or similar)
* \danog\MadelineProto\Conversion\Exception - Thrown if some param/object can't be converted to/from bot API/TD/TD-CLI format (this includes markdown/html parsing)
## Contributing

View File

@ -27,7 +27,7 @@ try {
$offset = 0;
while (true) {
$updates = $MadelineProto->API->get_updates(['offset' => $offset, 'limit' => 50, 'timeout' => 0]); // Just like in the bot API, you can specify an offset, a limit and a timeout
var_dump($updates);
var_dump($updates);
foreach ($updates as $update) {
$offset = $update['update_id'] + 1; // Just like in the bot API, the offset must be set to the last update_id
//var_dump($update);

View File

@ -25,21 +25,22 @@ if (file_exists('token.php') && $MadelineProto === false) {
$authorization = $MadelineProto->bot_login($MadelineProto_token);
\danog\MadelineProto\Logger::log([$authorization], \danog\MadelineProto\Logger::NOTICE);
}
$offset = 0;
$reply_markup = ['inline_keyboard' => [
[ // Row 1
['text' => 'Row 1 b1'],
['text' => 'Row 1 b2'],
['text' => 'Row 1 b3'],
['text' => 'Row 1 c1'],
['text' => 'Row 1 c2'],
['text' => 'Row 1 c3'],
],
[ // Row 2
['text' => 'Row 2 b1'],
['text' => 'Row 2 b2'],
['text' => 'Row 2 b3'],
['text' => 'Row 2 c1'],
['text' => 'Row 2 c2'],
['text' => 'Row 2 c3'],
],
[ // Row 3
['text' => 'Row 3 b1'],
['text' => 'Row 3 b2'],
['text' => 'Row 3 b3'],
['text' => 'Row 3 c1'],
['text' => 'Row 3 c2'],
['text' => 'Row 3 c3'],
],
],
@ -47,11 +48,12 @@ $reply_markup = ['inline_keyboard' => [
$start = 'This bot can create inline text buttons.
To use it, simply type an inline query with the following syntax:
Row 1 b1 | Row 1 b2 | Row 1 b3
Row 2 b1 | Row 2 b2 | Row 2 b3
Row 3 b1 | Row 3 b2 | Row 3 b3
@MadelineProto_bot Text to show in message
Row 1 c1 | Row 1 c2 | Row 1 c3
Row 2 c1 | Row 2 c2 | Row 2 c3
Row 3 c1 | Row 3 c2 | Row 3 c3
This will create a keyboard exactly like the one used in this message (click the buttons ;D)
This will create a keyboard exactly like the one used in this message (click the buttons ;D) with the phrase "Text to show in message" instead of this help message.
Created by [Daniil Gentili](mention:@danogentili) (@daniilgentili) using the [MadelineProto PHP MTProto client](daniil.it/MadelineProto).';
while (true) {
@ -92,52 +94,18 @@ while (true) {
$MadelineProto->messages->setInlineBotResults(['query_id' => $update['update']['query_id'], 'results' => [], 'cache_time' => 0, 'switch_pm' => $sswitch]);
} else {
$toset = ['query_id' => $update['update']['query_id'], 'results' => [], 'cache_time' => 0, 'private' => true];
if (preg_match('|\$\s*$|', $update['update']['query'])) {
$exploded = explode('|', preg_replace('/\$\s*$/', '', $update['update']['query']));
array_walk($exploded, function (&$value, $key) {
$value = preg_replace(['/^\s+/', '/\s+$/'], '', $value);
});
$query = array_shift($exploded);
foreach ($exploded as $current => $botq) {
$bot = preg_replace('|:.*|', '', $botq);
if ($bot === '' || $uMadelineProto->get_info($bot)['bot_api_id'] === $MadelineProto->API->datacenter->authorization['user']['id']) {
$toset['switch_pm'] = $sswitch;
break;
}
$select = preg_replace('|'.$bot.':|', '', $botq);
$results = $uMadelineProto->messages->getInlineBotResults(['bot' => $bot, 'peer' => $update['update']['user_id'], 'query' => $query, 'offset' => $offset]);
if (isset($results['switch_pm'])) {
$toset['switch_pm'] = $results['switch_pm'];
break;
}
$toset['gallery'] = $results['gallery'];
$toset['results'] = [];
if (is_numeric($select)) {
$toset['results'][0] = $results['results'][$select - 1];
} elseif ($select === '') {
$toset['results'] = $results['results'];
} else {
foreach ($results['results'] as $result) {
if (isset($result['send_message']['message']) && preg_match('|'.$select.'|', $result['send_message']['message'])) {
$toset['results'][0] = $result;
}
}
}
if (!isset($toset['results'][0])) {
$toset['results'] = $results['results'];
}
if (count($exploded) - 1 === $current || !isset($toset['results'][0]['send_message']['message'])) {
break;
}
$query = $toset['results'][0]['send_message']['message'];
}
}
if (empty($toset['results'])) {
$toset['switch_pm'] = $sswitch;
$rows = explode("\n", $update['update']['query']);
$text = array_shift($rows);
if (empty($rows)) {
$MadelineProto->messages->setInlineBotResults(['query_id' => $update['update']['query_id'], 'results' => [], 'cache_time' => 0, 'switch_pm' => $sswitch]);
} else {
array_walk($toset['results'], 'translate');
array_walk($rows, function (&$value, $key) {
$value = explode('|', $value);
array_walk($value, function (&$value, $key) { $value = ['text' => trim($value)]; });
});
$toset['results'] = [['_' => 'inputBotInlineResult', 'id' => rand(0, pow(2,31)-1), 'type' => 'article', 'title' => $text, 'description' => 'Your keyboard', 'send_message' => ['_' => 'inputBotInlineMessageText', 'message' => $text, 'reply_markup' => ['inline_keyboard' => $rows]]]];
$MadelineProto->messages->setInlineBotResults($toset);
}
$MadelineProto->messages->setInlineBotResults($toset);
}
} catch (\danog\MadelineProto\RPCErrorException $e) {
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
@ -153,9 +121,9 @@ while (true) {
} catch (\danog\MadelineProto\Exception $e) {
}
} catch (\danog\MadelineProto\Exception $e) {
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
try {
$MadelineProto->messages->sendMessage(['peer' => $update['update']['user_id'], 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
} catch (\danog\MadelineProto\RPCErrorException $e) {
} catch (\danog\MadelineProto\Exception $e) {
}

View File

@ -185,8 +185,8 @@ var_dump($update);
$MadelineProto->messages->setInlineBotResults($toset);
}
} catch (\danog\MadelineProto\RPCErrorException $e) {
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
try {
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
$MadelineProto->messages->sendMessage(['peer' => $update['update']['user_id'], 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
} catch (\danog\MadelineProto\RPCErrorException $e) {
} catch (\danog\MadelineProto\Exception $e) {
@ -198,8 +198,8 @@ var_dump($update);
} catch (\danog\MadelineProto\Exception $e) {
}
} catch (\danog\MadelineProto\Exception $e) {
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
try {
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
$MadelineProto->messages->sendMessage(['peer' => $update['update']['user_id'], 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
} catch (\danog\MadelineProto\RPCErrorException $e) {
} catch (\danog\MadelineProto\Exception $e) {

View File

@ -23,6 +23,13 @@ description: PHP implementation of telegram\'s MTProto protocol
'.file_get_contents('README.md'));
$docs = [
[
'tl_schema' => ['td' => __DIR__.'/src/danog/MadelineProto/TL_td.tl'],
'title' => 'MadelineProto API documentation (td-lib)',
'description' => 'MadelineProto API documentation (td-lib)',
'output_dir' => __DIR__.'/docs/TD_docs',
'readme' => false,
],
[
'tl_schema' => ['mtproto' => __DIR__.'/src/danog/MadelineProto/TL_mtproto_v1.json'],
'title' => 'MadelineProto API documentation (mtproto)',
@ -31,7 +38,7 @@ $docs = [
'readme' => false,
],
[
'tl_schema' => ['telegram' => __DIR__.'/src/danog/MadelineProto/TL_telegram_v62.tl'],
'tl_schema' => ['telegram' => __DIR__.'/src/danog/MadelineProto/TL_telegram_v62.tl', 'secret' => __DIR__.'/src/danog/MadelineProto/TL_secret.tl','td' => __DIR__.'/src/danog/MadelineProto/TL_td.tl'],
'title' => 'MadelineProto API documentation (layer 62)',
'description' => 'MadelineProto API documentation (layer 62)',
'output_dir' => __DIR__.'/docs/API_docs',
@ -61,7 +68,7 @@ description: Documentation of old mtproto layers
'.$layer_list);
$doc = new \danog\MadelineProto\AnnotationsBuilder($docs[1]);
$doc = new \danog\MadelineProto\AnnotationsBuilder($docs[2]);
$doc->mk_annotations();
foreach ($docs as $settings) {

View File

@ -19,7 +19,8 @@
"phpseclib/phpseclib": "dev-ige",
"vlucas/phpdotenv": "^2.4",
"krakjoe/pthreads-polyfill": "dev-master",
"erusev/parsedown": "^1.6"
"erusev/parsedown": "^1.6",
"ext-mbstring": "*"
},
"require-dev": {
"phpdocumentor/reflection-docblock": "^3.1"

View File

@ -11,7 +11,7 @@ description: accountDaysTTL attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|days|[int](../types/int.md) | Required|
|days|[int](../types/int.md) | Yes|
@ -24,3 +24,12 @@ description: accountDaysTTL attributes, type and example
$accountDaysTTL = ['_' => 'accountDaysTTL', 'days' => int, ];
```
Or, if you're into Lua:
```
accountDaysTTL={_='accountDaysTTL', days=int, }
```

View File

@ -11,7 +11,7 @@ description: account_authorizations attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|authorizations|Array of [Authorization](../types/Authorization.md) | Required|
|authorizations|Array of [Authorization](../types/Authorization.md) | Yes|
@ -21,6 +21,15 @@ description: account_authorizations attributes, type and example
### Example:
```
$account_authorizations = ['_' => 'account.authorizations', 'authorizations' => [Vector t], ];
$account_authorizations = ['_' => 'account.authorizations', 'authorizations' => [Authorization], ];
```
Or, if you're into Lua:
```
account_authorizations={_='account.authorizations', authorizations={Authorization}, }
```

View File

@ -11,8 +11,8 @@ description: account_noPassword attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|new\_salt|[bytes](../types/bytes.md) | Required|
|email\_unconfirmed\_pattern|[string](../types/string.md) | Required|
|new\_salt|[bytes](../types/bytes.md) | Yes|
|email\_unconfirmed\_pattern|[string](../types/string.md) | Yes|
@ -25,3 +25,12 @@ description: account_noPassword attributes, type and example
$account_noPassword = ['_' => 'account.noPassword', 'new_salt' => bytes, 'email_unconfirmed_pattern' => string, ];
```
Or, if you're into Lua:
```
account_noPassword={_='account.noPassword', new_salt=bytes, email_unconfirmed_pattern=string, }
```

View File

@ -11,11 +11,11 @@ description: account_password attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|current\_salt|[bytes](../types/bytes.md) | Required|
|new\_salt|[bytes](../types/bytes.md) | Required|
|hint|[string](../types/string.md) | Required|
|has\_recovery|[Bool](../types/Bool.md) | Required|
|email\_unconfirmed\_pattern|[string](../types/string.md) | Required|
|current\_salt|[bytes](../types/bytes.md) | Yes|
|new\_salt|[bytes](../types/bytes.md) | Yes|
|hint|[string](../types/string.md) | Yes|
|has\_recovery|[Bool](../types/Bool.md) | Yes|
|email\_unconfirmed\_pattern|[string](../types/string.md) | Yes|
@ -28,3 +28,12 @@ description: account_password attributes, type and example
$account_password = ['_' => 'account.password', 'current_salt' => bytes, 'new_salt' => bytes, 'hint' => string, 'has_recovery' => Bool, 'email_unconfirmed_pattern' => string, ];
```
Or, if you're into Lua:
```
account_password={_='account.password', current_salt=bytes, new_salt=bytes, hint=string, has_recovery=Bool, email_unconfirmed_pattern=string, }
```

View File

@ -27,3 +27,12 @@ description: account_passwordInputSettings attributes, type and example
$account_passwordInputSettings = ['_' => 'account.passwordInputSettings', 'new_salt' => bytes, 'new_password_hash' => bytes, 'hint' => string, 'email' => string, ];
```
Or, if you're into Lua:
```
account_passwordInputSettings={_='account.passwordInputSettings', new_salt=bytes, new_password_hash=bytes, hint=string, email=string, }
```

View File

@ -11,7 +11,7 @@ description: account_passwordSettings attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|email|[string](../types/string.md) | Required|
|email|[string](../types/string.md) | Yes|
@ -24,3 +24,12 @@ description: account_passwordSettings attributes, type and example
$account_passwordSettings = ['_' => 'account.passwordSettings', 'email' => string, ];
```
Or, if you're into Lua:
```
account_passwordSettings={_='account.passwordSettings', email=string, }
```

View File

@ -11,8 +11,8 @@ description: account_privacyRules attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|rules|Array of [PrivacyRule](../types/PrivacyRule.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|rules|Array of [PrivacyRule](../types/PrivacyRule.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -22,6 +22,15 @@ description: account_privacyRules attributes, type and example
### Example:
```
$account_privacyRules = ['_' => 'account.privacyRules', 'rules' => [Vector t], 'users' => [Vector t], ];
$account_privacyRules = ['_' => 'account.privacyRules', 'rules' => [PrivacyRule], 'users' => [User], ];
```
Or, if you're into Lua:
```
account_privacyRules={_='account.privacyRules', rules={PrivacyRule}, users={User}, }
```

View File

@ -12,7 +12,7 @@ description: auth_authorization attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|tmp\_sessions|[int](../types/int.md) | Optional|
|user|[User](../types/User.md) | Required|
|user|[User](../types/User.md) | Yes|
@ -25,3 +25,12 @@ description: auth_authorization attributes, type and example
$auth_authorization = ['_' => 'auth.authorization', 'tmp_sessions' => int, 'user' => User, ];
```
Or, if you're into Lua:
```
auth_authorization={_='auth.authorization', tmp_sessions=int, user=User, }
```

View File

@ -11,7 +11,7 @@ description: auth_checkedPhone attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|phone\_registered|[Bool](../types/Bool.md) | Required|
|phone\_registered|[Bool](../types/Bool.md) | Yes|
@ -24,3 +24,12 @@ description: auth_checkedPhone attributes, type and example
$auth_checkedPhone = ['_' => 'auth.checkedPhone', 'phone_registered' => Bool, ];
```
Or, if you're into Lua:
```
auth_checkedPhone={_='auth.checkedPhone', phone_registered=Bool, }
```

View File

@ -19,3 +19,12 @@ description: auth_codeTypeCall attributes, type and example
$auth_codeTypeCall = ['_' => 'auth.codeTypeCall', ];
```
Or, if you're into Lua:
```
auth_codeTypeCall={_='auth.codeTypeCall', }
```

View File

@ -19,3 +19,12 @@ description: auth_codeTypeFlashCall attributes, type and example
$auth_codeTypeFlashCall = ['_' => 'auth.codeTypeFlashCall', ];
```
Or, if you're into Lua:
```
auth_codeTypeFlashCall={_='auth.codeTypeFlashCall', }
```

View File

@ -19,3 +19,12 @@ description: auth_codeTypeSms attributes, type and example
$auth_codeTypeSms = ['_' => 'auth.codeTypeSms', ];
```
Or, if you're into Lua:
```
auth_codeTypeSms={_='auth.codeTypeSms', }
```

View File

@ -11,8 +11,8 @@ description: auth_exportedAuthorization attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|id|[int](../types/int.md) | Required|
|bytes|[bytes](../types/bytes.md) | Required|
|id|[int](../types/int.md) | Yes|
|bytes|[bytes](../types/bytes.md) | Yes|
@ -25,3 +25,12 @@ description: auth_exportedAuthorization attributes, type and example
$auth_exportedAuthorization = ['_' => 'auth.exportedAuthorization', 'id' => int, 'bytes' => bytes, ];
```
Or, if you're into Lua:
```
auth_exportedAuthorization={_='auth.exportedAuthorization', id=int, bytes=bytes, }
```

View File

@ -11,7 +11,7 @@ description: auth_passwordRecovery attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|email\_pattern|[string](../types/string.md) | Required|
|email\_pattern|[string](../types/string.md) | Yes|
@ -24,3 +24,12 @@ description: auth_passwordRecovery attributes, type and example
$auth_passwordRecovery = ['_' => 'auth.passwordRecovery', 'email_pattern' => string, ];
```
Or, if you're into Lua:
```
auth_passwordRecovery={_='auth.passwordRecovery', email_pattern=string, }
```

View File

@ -12,8 +12,8 @@ description: auth_sentCode attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|phone\_registered|[Bool](../types/Bool.md) | Optional|
|type|[auth\_SentCodeType](../types/auth_SentCodeType.md) | Required|
|phone\_code\_hash|[string](../types/string.md) | Required|
|type|[auth\_SentCodeType](../types/auth_SentCodeType.md) | Yes|
|phone\_code\_hash|[string](../types/string.md) | Yes|
|next\_type|[auth\_CodeType](../types/auth_CodeType.md) | Optional|
|timeout|[int](../types/int.md) | Optional|
@ -28,3 +28,12 @@ description: auth_sentCode attributes, type and example
$auth_sentCode = ['_' => 'auth.sentCode', 'phone_registered' => true, 'type' => auth.SentCodeType, 'phone_code_hash' => string, 'next_type' => auth.CodeType, 'timeout' => int, ];
```
Or, if you're into Lua:
```
auth_sentCode={_='auth.sentCode', phone_registered=true, type=auth.SentCodeType, phone_code_hash=string, next_type=auth.CodeType, timeout=int, }
```

View File

@ -11,7 +11,7 @@ description: auth_sentCodeTypeApp attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|length|[int](../types/int.md) | Required|
|length|[int](../types/int.md) | Yes|
@ -24,3 +24,12 @@ description: auth_sentCodeTypeApp attributes, type and example
$auth_sentCodeTypeApp = ['_' => 'auth.sentCodeTypeApp', 'length' => int, ];
```
Or, if you're into Lua:
```
auth_sentCodeTypeApp={_='auth.sentCodeTypeApp', length=int, }
```

View File

@ -11,7 +11,7 @@ description: auth_sentCodeTypeCall attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|length|[int](../types/int.md) | Required|
|length|[int](../types/int.md) | Yes|
@ -24,3 +24,12 @@ description: auth_sentCodeTypeCall attributes, type and example
$auth_sentCodeTypeCall = ['_' => 'auth.sentCodeTypeCall', 'length' => int, ];
```
Or, if you're into Lua:
```
auth_sentCodeTypeCall={_='auth.sentCodeTypeCall', length=int, }
```

View File

@ -11,7 +11,7 @@ description: auth_sentCodeTypeFlashCall attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|pattern|[string](../types/string.md) | Required|
|pattern|[string](../types/string.md) | Yes|
@ -24,3 +24,12 @@ description: auth_sentCodeTypeFlashCall attributes, type and example
$auth_sentCodeTypeFlashCall = ['_' => 'auth.sentCodeTypeFlashCall', 'pattern' => string, ];
```
Or, if you're into Lua:
```
auth_sentCodeTypeFlashCall={_='auth.sentCodeTypeFlashCall', pattern=string, }
```

View File

@ -11,7 +11,7 @@ description: auth_sentCodeTypeSms attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|length|[int](../types/int.md) | Required|
|length|[int](../types/int.md) | Yes|
@ -24,3 +24,12 @@ description: auth_sentCodeTypeSms attributes, type and example
$auth_sentCodeTypeSms = ['_' => 'auth.sentCodeTypeSms', 'length' => int, ];
```
Or, if you're into Lua:
```
auth_sentCodeTypeSms={_='auth.sentCodeTypeSms', length=int, }
```

View File

@ -11,18 +11,18 @@ description: authorization attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|hash|[long](../types/long.md) | Required|
|device\_model|[string](../types/string.md) | Required|
|platform|[string](../types/string.md) | Required|
|system\_version|[string](../types/string.md) | Required|
|api\_id|[int](../types/int.md) | Required|
|app\_name|[string](../types/string.md) | Required|
|app\_version|[string](../types/string.md) | Required|
|date\_created|[int](../types/int.md) | Required|
|date\_active|[int](../types/int.md) | Required|
|ip|[string](../types/string.md) | Required|
|country|[string](../types/string.md) | Required|
|region|[string](../types/string.md) | Required|
|hash|[long](../types/long.md) | Yes|
|device\_model|[string](../types/string.md) | Yes|
|platform|[string](../types/string.md) | Yes|
|system\_version|[string](../types/string.md) | Yes|
|api\_id|[int](../types/int.md) | Yes|
|app\_name|[string](../types/string.md) | Yes|
|app\_version|[string](../types/string.md) | Yes|
|date\_created|[int](../types/int.md) | Yes|
|date\_active|[int](../types/int.md) | Yes|
|ip|[string](../types/string.md) | Yes|
|country|[string](../types/string.md) | Yes|
|region|[string](../types/string.md) | Yes|
@ -35,3 +35,12 @@ description: authorization attributes, type and example
$authorization = ['_' => 'authorization', 'hash' => long, 'device_model' => string, 'platform' => string, 'system_version' => string, 'api_id' => int, 'app_name' => string, 'app_version' => string, 'date_created' => int, 'date_active' => int, 'ip' => string, 'country' => string, 'region' => string, ];
```
Or, if you're into Lua:
```
authorization={_='authorization', hash=long, device_model=string, platform=string, system_version=string, api_id=int, app_name=string, app_version=string, date_created=int, date_active=int, ip=string, country=string, region=string, }
```

View File

@ -1,18 +1,20 @@
---
title: botCommand
description: botCommand attributes, type and example
description: Represents command supported by bot
---
## Constructor: botCommand
[Back to constructors index](index.md)
Represents command supported by bot
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|command|[string](../types/string.md) | Required|
|description|[string](../types/string.md) | Required|
| Name | Type | Required | Description |
|----------|:-------------:|:--------:|------------:|
|command|[string](../types/string.md) | Yes|Text of the bot command|
|description|[string](../types/string.md) | Yes|Description of the bot command|
@ -25,3 +27,12 @@ description: botCommand attributes, type and example
$botCommand = ['_' => 'botCommand', 'command' => string, 'description' => string, ];
```
Or, if you're into Lua:
```
botCommand={_='botCommand', command=string, description=string, }
```

View File

@ -11,9 +11,9 @@ description: botInfo attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|description|[string](../types/string.md) | Required|
|commands|Array of [BotCommand](../types/BotCommand.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|description|[string](../types/string.md) | Yes|
|commands|Array of [BotCommand](../types/BotCommand.md) | Yes|
@ -23,6 +23,15 @@ description: botInfo attributes, type and example
### Example:
```
$botInfo = ['_' => 'botInfo', 'user_id' => int, 'description' => string, 'commands' => [Vector t], ];
$botInfo = ['_' => 'botInfo', 'user_id' => int, 'description' => string, 'commands' => [BotCommand], ];
```
Or, if you're into Lua:
```
botInfo={_='botInfo', user_id=int, description=string, commands={BotCommand}, }
```

View File

@ -11,13 +11,13 @@ description: botInlineMediaResult attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|id|[string](../types/string.md) | Required|
|type|[string](../types/string.md) | Required|
|id|[string](../types/string.md) | Yes|
|type|[string](../types/string.md) | Yes|
|photo|[Photo](../types/Photo.md) | Optional|
|document|[Document](../types/Document.md) | Optional|
|title|[string](../types/string.md) | Optional|
|description|[string](../types/string.md) | Optional|
|send\_message|[BotInlineMessage](../types/BotInlineMessage.md) | Required|
|send\_message|[BotInlineMessage](../types/BotInlineMessage.md) | Yes|
@ -30,3 +30,12 @@ description: botInlineMediaResult attributes, type and example
$botInlineMediaResult = ['_' => 'botInlineMediaResult', 'id' => string, 'type' => string, 'photo' => Photo, 'document' => Document, 'title' => string, 'description' => string, 'send_message' => BotInlineMessage, ];
```
Or, if you're into Lua:
```
botInlineMediaResult={_='botInlineMediaResult', id=string, type=string, photo=Photo, document=Document, title=string, description=string, send_message=BotInlineMessage, }
```

View File

@ -11,7 +11,7 @@ description: botInlineMessageMediaAuto attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|caption|[string](../types/string.md) | Required|
|caption|[string](../types/string.md) | Yes|
|reply\_markup|[ReplyMarkup](../types/ReplyMarkup.md) | Optional|
@ -25,3 +25,12 @@ description: botInlineMessageMediaAuto attributes, type and example
$botInlineMessageMediaAuto = ['_' => 'botInlineMessageMediaAuto', 'caption' => string, 'reply_markup' => ReplyMarkup, ];
```
Or, if you're into Lua:
```
botInlineMessageMediaAuto={_='botInlineMessageMediaAuto', caption=string, reply_markup=ReplyMarkup, }
```

View File

@ -11,9 +11,9 @@ description: botInlineMessageMediaContact attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|phone\_number|[string](../types/string.md) | Required|
|first\_name|[string](../types/string.md) | Required|
|last\_name|[string](../types/string.md) | Required|
|phone\_number|[string](../types/string.md) | Yes|
|first\_name|[string](../types/string.md) | Yes|
|last\_name|[string](../types/string.md) | Yes|
|reply\_markup|[ReplyMarkup](../types/ReplyMarkup.md) | Optional|
@ -27,3 +27,12 @@ description: botInlineMessageMediaContact attributes, type and example
$botInlineMessageMediaContact = ['_' => 'botInlineMessageMediaContact', 'phone_number' => string, 'first_name' => string, 'last_name' => string, 'reply_markup' => ReplyMarkup, ];
```
Or, if you're into Lua:
```
botInlineMessageMediaContact={_='botInlineMessageMediaContact', phone_number=string, first_name=string, last_name=string, reply_markup=ReplyMarkup, }
```

View File

@ -11,7 +11,7 @@ description: botInlineMessageMediaGeo attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|geo|[GeoPoint](../types/GeoPoint.md) | Required|
|geo|[GeoPoint](../types/GeoPoint.md) | Yes|
|reply\_markup|[ReplyMarkup](../types/ReplyMarkup.md) | Optional|
@ -25,3 +25,12 @@ description: botInlineMessageMediaGeo attributes, type and example
$botInlineMessageMediaGeo = ['_' => 'botInlineMessageMediaGeo', 'geo' => GeoPoint, 'reply_markup' => ReplyMarkup, ];
```
Or, if you're into Lua:
```
botInlineMessageMediaGeo={_='botInlineMessageMediaGeo', geo=GeoPoint, reply_markup=ReplyMarkup, }
```

View File

@ -11,11 +11,11 @@ description: botInlineMessageMediaVenue attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|geo|[GeoPoint](../types/GeoPoint.md) | Required|
|title|[string](../types/string.md) | Required|
|address|[string](../types/string.md) | Required|
|provider|[string](../types/string.md) | Required|
|venue\_id|[string](../types/string.md) | Required|
|geo|[GeoPoint](../types/GeoPoint.md) | Yes|
|title|[string](../types/string.md) | Yes|
|address|[string](../types/string.md) | Yes|
|provider|[string](../types/string.md) | Yes|
|venue\_id|[string](../types/string.md) | Yes|
|reply\_markup|[ReplyMarkup](../types/ReplyMarkup.md) | Optional|
@ -29,3 +29,12 @@ description: botInlineMessageMediaVenue attributes, type and example
$botInlineMessageMediaVenue = ['_' => 'botInlineMessageMediaVenue', 'geo' => GeoPoint, 'title' => string, 'address' => string, 'provider' => string, 'venue_id' => string, 'reply_markup' => ReplyMarkup, ];
```
Or, if you're into Lua:
```
botInlineMessageMediaVenue={_='botInlineMessageMediaVenue', geo=GeoPoint, title=string, address=string, provider=string, venue_id=string, reply_markup=ReplyMarkup, }
```

View File

@ -12,7 +12,7 @@ description: botInlineMessageText attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|no\_webpage|[Bool](../types/Bool.md) | Optional|
|message|[string](../types/string.md) | Required|
|message|[string](../types/string.md) | Yes|
|entities|Array of [MessageEntity](../types/MessageEntity.md) | Optional|
|reply\_markup|[ReplyMarkup](../types/ReplyMarkup.md) | Optional|
@ -24,6 +24,15 @@ description: botInlineMessageText attributes, type and example
### Example:
```
$botInlineMessageText = ['_' => 'botInlineMessageText', 'no_webpage' => true, 'message' => string, 'entities' => [Vector t], 'reply_markup' => ReplyMarkup, ];
$botInlineMessageText = ['_' => 'botInlineMessageText', 'no_webpage' => true, 'message' => string, 'entities' => [MessageEntity], 'reply_markup' => ReplyMarkup, ];
```
Or, if you're into Lua:
```
botInlineMessageText={_='botInlineMessageText', no_webpage=true, message=string, entities={MessageEntity}, reply_markup=ReplyMarkup, }
```

View File

@ -11,8 +11,8 @@ description: botInlineResult attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|id|[string](../types/string.md) | Required|
|type|[string](../types/string.md) | Required|
|id|[string](../types/string.md) | Yes|
|type|[string](../types/string.md) | Yes|
|title|[string](../types/string.md) | Optional|
|description|[string](../types/string.md) | Optional|
|url|[string](../types/string.md) | Optional|
@ -22,7 +22,7 @@ description: botInlineResult attributes, type and example
|w|[int](../types/int.md) | Optional|
|h|[int](../types/int.md) | Optional|
|duration|[int](../types/int.md) | Optional|
|send\_message|[BotInlineMessage](../types/BotInlineMessage.md) | Required|
|send\_message|[BotInlineMessage](../types/BotInlineMessage.md) | Yes|
@ -35,3 +35,12 @@ description: botInlineResult attributes, type and example
$botInlineResult = ['_' => 'botInlineResult', 'id' => string, 'type' => string, 'title' => string, 'description' => string, 'url' => string, 'thumb_url' => string, 'content_url' => string, 'content_type' => string, 'w' => int, 'h' => int, 'duration' => int, 'send_message' => BotInlineMessage, ];
```
Or, if you're into Lua:
```
botInlineResult={_='botInlineResult', id=string, type=string, title=string, description=string, url=string, thumb_url=string, content_url=string, content_type=string, w=int, h=int, duration=int, send_message=BotInlineMessage, }
```

View File

@ -23,13 +23,13 @@ description: channel attributes, type and example
|democracy|[Bool](../types/Bool.md) | Optional|
|signatures|[Bool](../types/Bool.md) | Optional|
|min|[Bool](../types/Bool.md) | Optional|
|id|[int](../types/int.md) | Required|
|id|[int](../types/int.md) | Yes|
|access\_hash|[long](../types/long.md) | Optional|
|title|[string](../types/string.md) | Required|
|title|[string](../types/string.md) | Yes|
|username|[string](../types/string.md) | Optional|
|photo|[ChatPhoto](../types/ChatPhoto.md) | Required|
|date|[int](../types/int.md) | Required|
|version|[int](../types/int.md) | Required|
|photo|[ChatPhoto](../types/ChatPhoto.md) | Yes|
|date|[int](../types/int.md) | Yes|
|version|[int](../types/int.md) | Yes|
|restriction\_reason|[string](../types/string.md) | Optional|
@ -43,3 +43,12 @@ description: channel attributes, type and example
$channel = ['_' => 'channel', 'creator' => true, 'kicked' => true, 'left' => true, 'editor' => true, 'moderator' => true, 'broadcast' => true, 'verified' => true, 'megagroup' => true, 'restricted' => true, 'democracy' => true, 'signatures' => true, 'min' => true, 'id' => int, 'access_hash' => long, 'title' => string, 'username' => string, 'photo' => ChatPhoto, 'date' => int, 'version' => int, 'restriction_reason' => string, ];
```
Or, if you're into Lua:
```
channel={_='channel', creator=true, kicked=true, left=true, editor=true, moderator=true, broadcast=true, verified=true, megagroup=true, restricted=true, democracy=true, signatures=true, min=true, id=int, access_hash=long, title=string, username=string, photo=ChatPhoto, date=int, version=int, restriction_reason=string, }
```

View File

@ -13,9 +13,9 @@ description: channelForbidden attributes, type and example
|----------|:-------------:|---------:|
|broadcast|[Bool](../types/Bool.md) | Optional|
|megagroup|[Bool](../types/Bool.md) | Optional|
|id|[int](../types/int.md) | Required|
|access\_hash|[long](../types/long.md) | Required|
|title|[string](../types/string.md) | Required|
|id|[int](../types/int.md) | Yes|
|access\_hash|[long](../types/long.md) | Yes|
|title|[string](../types/string.md) | Yes|
@ -28,3 +28,12 @@ description: channelForbidden attributes, type and example
$channelForbidden = ['_' => 'channelForbidden', 'broadcast' => true, 'megagroup' => true, 'id' => int, 'access_hash' => long, 'title' => string, ];
```
Or, if you're into Lua:
```
channelForbidden={_='channelForbidden', broadcast=true, megagroup=true, id=int, access_hash=long, title=string, }
```

View File

@ -13,18 +13,18 @@ description: channelFull attributes, type and example
|----------|:-------------:|---------:|
|can\_view\_participants|[Bool](../types/Bool.md) | Optional|
|can\_set\_username|[Bool](../types/Bool.md) | Optional|
|id|[int](../types/int.md) | Required|
|about|[string](../types/string.md) | Required|
|id|[int](../types/int.md) | Yes|
|about|[string](../types/string.md) | Yes|
|participants\_count|[int](../types/int.md) | Optional|
|admins\_count|[int](../types/int.md) | Optional|
|kicked\_count|[int](../types/int.md) | Optional|
|read\_inbox\_max\_id|[int](../types/int.md) | Required|
|read\_outbox\_max\_id|[int](../types/int.md) | Required|
|unread\_count|[int](../types/int.md) | Required|
|chat\_photo|[Photo](../types/Photo.md) | Required|
|notify\_settings|[PeerNotifySettings](../types/PeerNotifySettings.md) | Required|
|exported\_invite|[ExportedChatInvite](../types/ExportedChatInvite.md) | Required|
|bot\_info|Array of [BotInfo](../types/BotInfo.md) | Required|
|read\_inbox\_max\_id|[int](../types/int.md) | Yes|
|read\_outbox\_max\_id|[int](../types/int.md) | Yes|
|unread\_count|[int](../types/int.md) | Yes|
|chat\_photo|[Photo](../types/Photo.md) | Yes|
|notify\_settings|[PeerNotifySettings](../types/PeerNotifySettings.md) | Yes|
|exported\_invite|[ExportedChatInvite](../types/ExportedChatInvite.md) | Yes|
|bot\_info|Array of [BotInfo](../types/BotInfo.md) | Yes|
|migrated\_from\_chat\_id|[int](../types/int.md) | Optional|
|migrated\_from\_max\_id|[int](../types/int.md) | Optional|
|pinned\_msg\_id|[int](../types/int.md) | Optional|
@ -37,6 +37,15 @@ description: channelFull attributes, type and example
### Example:
```
$channelFull = ['_' => 'channelFull', 'can_view_participants' => true, 'can_set_username' => true, 'id' => int, 'about' => string, 'participants_count' => int, 'admins_count' => int, 'kicked_count' => 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 t], 'migrated_from_chat_id' => int, 'migrated_from_max_id' => int, 'pinned_msg_id' => int, ];
$channelFull = ['_' => 'channelFull', 'can_view_participants' => true, 'can_set_username' => true, 'id' => int, 'about' => string, 'participants_count' => int, 'admins_count' => int, 'kicked_count' => 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' => [BotInfo], 'migrated_from_chat_id' => int, 'migrated_from_max_id' => int, 'pinned_msg_id' => int, ];
```
Or, if you're into Lua:
```
channelFull={_='channelFull', can_view_participants=true, can_set_username=true, id=int, about=string, participants_count=int, admins_count=int, kicked_count=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={BotInfo}, migrated_from_chat_id=int, migrated_from_max_id=int, pinned_msg_id=int, }
```

View File

@ -12,7 +12,7 @@ description: channelMessagesFilter attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|exclude\_new\_messages|[Bool](../types/Bool.md) | Optional|
|ranges|Array of [MessageRange](../types/MessageRange.md) | Required|
|ranges|Array of [MessageRange](../types/MessageRange.md) | Yes|
@ -22,6 +22,15 @@ description: channelMessagesFilter attributes, type and example
### Example:
```
$channelMessagesFilter = ['_' => 'channelMessagesFilter', 'exclude_new_messages' => true, 'ranges' => [Vector t], ];
$channelMessagesFilter = ['_' => 'channelMessagesFilter', 'exclude_new_messages' => true, 'ranges' => [MessageRange], ];
```
Or, if you're into Lua:
```
channelMessagesFilter={_='channelMessagesFilter', exclude_new_messages=true, ranges={MessageRange}, }
```

View File

@ -19,3 +19,12 @@ description: channelMessagesFilterEmpty attributes, type and example
$channelMessagesFilterEmpty = ['_' => 'channelMessagesFilterEmpty', ];
```
Or, if you're into Lua:
```
channelMessagesFilterEmpty={_='channelMessagesFilterEmpty', }
```

View File

@ -11,8 +11,8 @@ description: channelParticipant attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -25,3 +25,12 @@ description: channelParticipant attributes, type and example
$channelParticipant = ['_' => 'channelParticipant', 'user_id' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
channelParticipant={_='channelParticipant', user_id=int, date=int, }
```

View File

@ -11,7 +11,7 @@ description: channelParticipantCreator attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
@ -24,3 +24,12 @@ description: channelParticipantCreator attributes, type and example
$channelParticipantCreator = ['_' => 'channelParticipantCreator', 'user_id' => int, ];
```
Or, if you're into Lua:
```
channelParticipantCreator={_='channelParticipantCreator', user_id=int, }
```

View File

@ -11,9 +11,9 @@ description: channelParticipantEditor attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|inviter\_id|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|inviter\_id|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -26,3 +26,12 @@ description: channelParticipantEditor attributes, type and example
$channelParticipantEditor = ['_' => 'channelParticipantEditor', 'user_id' => int, 'inviter_id' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
channelParticipantEditor={_='channelParticipantEditor', user_id=int, inviter_id=int, date=int, }
```

View File

@ -11,9 +11,9 @@ description: channelParticipantKicked attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|kicked\_by|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|kicked\_by|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -26,3 +26,12 @@ description: channelParticipantKicked attributes, type and example
$channelParticipantKicked = ['_' => 'channelParticipantKicked', 'user_id' => int, 'kicked_by' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
channelParticipantKicked={_='channelParticipantKicked', user_id=int, kicked_by=int, date=int, }
```

View File

@ -11,9 +11,9 @@ description: channelParticipantModerator attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|inviter\_id|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|inviter\_id|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -26,3 +26,12 @@ description: channelParticipantModerator attributes, type and example
$channelParticipantModerator = ['_' => 'channelParticipantModerator', 'user_id' => int, 'inviter_id' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
channelParticipantModerator={_='channelParticipantModerator', user_id=int, inviter_id=int, date=int, }
```

View File

@ -11,9 +11,9 @@ description: channelParticipantSelf attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|inviter\_id|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|inviter\_id|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -26,3 +26,12 @@ description: channelParticipantSelf attributes, type and example
$channelParticipantSelf = ['_' => 'channelParticipantSelf', 'user_id' => int, 'inviter_id' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
channelParticipantSelf={_='channelParticipantSelf', user_id=int, inviter_id=int, date=int, }
```

View File

@ -19,3 +19,12 @@ description: channelParticipantsAdmins attributes, type and example
$channelParticipantsAdmins = ['_' => 'channelParticipantsAdmins', ];
```
Or, if you're into Lua:
```
channelParticipantsAdmins={_='channelParticipantsAdmins', }
```

View File

@ -19,3 +19,12 @@ description: channelParticipantsBots attributes, type and example
$channelParticipantsBots = ['_' => 'channelParticipantsBots', ];
```
Or, if you're into Lua:
```
channelParticipantsBots={_='channelParticipantsBots', }
```

View File

@ -19,3 +19,12 @@ description: channelParticipantsKicked attributes, type and example
$channelParticipantsKicked = ['_' => 'channelParticipantsKicked', ];
```
Or, if you're into Lua:
```
channelParticipantsKicked={_='channelParticipantsKicked', }
```

View File

@ -19,3 +19,12 @@ description: channelParticipantsRecent attributes, type and example
$channelParticipantsRecent = ['_' => 'channelParticipantsRecent', ];
```
Or, if you're into Lua:
```
channelParticipantsRecent={_='channelParticipantsRecent', }
```

View File

@ -19,3 +19,12 @@ description: channelRoleEditor attributes, type and example
$channelRoleEditor = ['_' => 'channelRoleEditor', ];
```
Or, if you're into Lua:
```
channelRoleEditor={_='channelRoleEditor', }
```

View File

@ -19,3 +19,12 @@ description: channelRoleEmpty attributes, type and example
$channelRoleEmpty = ['_' => 'channelRoleEmpty', ];
```
Or, if you're into Lua:
```
channelRoleEmpty={_='channelRoleEmpty', }
```

View File

@ -19,3 +19,12 @@ description: channelRoleModerator attributes, type and example
$channelRoleModerator = ['_' => 'channelRoleModerator', ];
```
Or, if you're into Lua:
```
channelRoleModerator={_='channelRoleModerator', }
```

View File

@ -11,8 +11,8 @@ description: channels_channelParticipant attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|participant|[ChannelParticipant](../types/ChannelParticipant.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|participant|[ChannelParticipant](../types/ChannelParticipant.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -22,6 +22,15 @@ description: channels_channelParticipant attributes, type and example
### Example:
```
$channels_channelParticipant = ['_' => 'channels.channelParticipant', 'participant' => ChannelParticipant, 'users' => [Vector t], ];
$channels_channelParticipant = ['_' => 'channels.channelParticipant', 'participant' => ChannelParticipant, 'users' => [User], ];
```
Or, if you're into Lua:
```
channels_channelParticipant={_='channels.channelParticipant', participant=ChannelParticipant, users={User}, }
```

View File

@ -11,9 +11,9 @@ description: channels_channelParticipants attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|count|[int](../types/int.md) | Required|
|participants|Array of [ChannelParticipant](../types/ChannelParticipant.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|count|[int](../types/int.md) | Yes|
|participants|Array of [ChannelParticipant](../types/ChannelParticipant.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -23,6 +23,15 @@ description: channels_channelParticipants attributes, type and example
### Example:
```
$channels_channelParticipants = ['_' => 'channels.channelParticipants', 'count' => int, 'participants' => [Vector t], 'users' => [Vector t], ];
$channels_channelParticipants = ['_' => 'channels.channelParticipants', 'count' => int, 'participants' => [ChannelParticipant], 'users' => [User], ];
```
Or, if you're into Lua:
```
channels_channelParticipants={_='channels.channelParticipants', count=int, participants={ChannelParticipant}, users={User}, }
```

View File

@ -17,12 +17,12 @@ description: chat attributes, type and example
|admins\_enabled|[Bool](../types/Bool.md) | Optional|
|admin|[Bool](../types/Bool.md) | Optional|
|deactivated|[Bool](../types/Bool.md) | Optional|
|id|[int](../types/int.md) | Required|
|title|[string](../types/string.md) | Required|
|photo|[ChatPhoto](../types/ChatPhoto.md) | Required|
|participants\_count|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|version|[int](../types/int.md) | Required|
|id|[int](../types/int.md) | Yes|
|title|[string](../types/string.md) | Yes|
|photo|[ChatPhoto](../types/ChatPhoto.md) | Yes|
|participants\_count|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
|version|[int](../types/int.md) | Yes|
|migrated\_to|[InputChannel](../types/InputChannel.md) | Optional|
@ -36,3 +36,12 @@ description: chat attributes, type and example
$chat = ['_' => 'chat', 'creator' => true, 'kicked' => true, 'left' => true, 'admins_enabled' => true, 'admin' => true, 'deactivated' => true, 'id' => int, 'title' => string, 'photo' => ChatPhoto, 'participants_count' => int, 'date' => int, 'version' => int, 'migrated_to' => InputChannel, ];
```
Or, if you're into Lua:
```
chat={_='chat', creator=true, kicked=true, left=true, admins_enabled=true, admin=true, deactivated=true, id=int, title=string, photo=ChatPhoto, participants_count=int, date=int, version=int, migrated_to=InputChannel, }
```

View File

@ -11,7 +11,7 @@ description: chatEmpty attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|id|[int](../types/int.md) | Required|
|id|[int](../types/int.md) | Yes|
@ -24,3 +24,12 @@ description: chatEmpty attributes, type and example
$chatEmpty = ['_' => 'chatEmpty', 'id' => int, ];
```
Or, if you're into Lua:
```
chatEmpty={_='chatEmpty', id=int, }
```

View File

@ -11,8 +11,8 @@ description: chatForbidden attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|id|[int](../types/int.md) | Required|
|title|[string](../types/string.md) | Required|
|id|[int](../types/int.md) | Yes|
|title|[string](../types/string.md) | Yes|
@ -25,3 +25,12 @@ description: chatForbidden attributes, type and example
$chatForbidden = ['_' => 'chatForbidden', 'id' => int, 'title' => string, ];
```
Or, if you're into Lua:
```
chatForbidden={_='chatForbidden', id=int, title=string, }
```

View File

@ -11,12 +11,12 @@ description: chatFull attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|id|[int](../types/int.md) | Required|
|participants|[ChatParticipants](../types/ChatParticipants.md) | Required|
|chat\_photo|[Photo](../types/Photo.md) | Required|
|notify\_settings|[PeerNotifySettings](../types/PeerNotifySettings.md) | Required|
|exported\_invite|[ExportedChatInvite](../types/ExportedChatInvite.md) | Required|
|bot\_info|Array of [BotInfo](../types/BotInfo.md) | Required|
|id|[int](../types/int.md) | Yes|
|participants|[ChatParticipants](../types/ChatParticipants.md) | Yes|
|chat\_photo|[Photo](../types/Photo.md) | Yes|
|notify\_settings|[PeerNotifySettings](../types/PeerNotifySettings.md) | Yes|
|exported\_invite|[ExportedChatInvite](../types/ExportedChatInvite.md) | Yes|
|bot\_info|Array of [BotInfo](../types/BotInfo.md) | Yes|
@ -26,6 +26,15 @@ description: chatFull attributes, type and example
### Example:
```
$chatFull = ['_' => 'chatFull', 'id' => int, 'participants' => ChatParticipants, 'chat_photo' => Photo, 'notify_settings' => PeerNotifySettings, 'exported_invite' => ExportedChatInvite, 'bot_info' => [Vector t], ];
$chatFull = ['_' => 'chatFull', 'id' => int, 'participants' => ChatParticipants, 'chat_photo' => Photo, 'notify_settings' => PeerNotifySettings, 'exported_invite' => ExportedChatInvite, 'bot_info' => [BotInfo], ];
```
Or, if you're into Lua:
```
chatFull={_='chatFull', id=int, participants=ChatParticipants, chat_photo=Photo, notify_settings=PeerNotifySettings, exported_invite=ExportedChatInvite, bot_info={BotInfo}, }
```

View File

@ -15,9 +15,9 @@ description: chatInvite attributes, type and example
|broadcast|[Bool](../types/Bool.md) | Optional|
|public|[Bool](../types/Bool.md) | Optional|
|megagroup|[Bool](../types/Bool.md) | Optional|
|title|[string](../types/string.md) | Required|
|photo|[ChatPhoto](../types/ChatPhoto.md) | Required|
|participants\_count|[int](../types/int.md) | Required|
|title|[string](../types/string.md) | Yes|
|photo|[ChatPhoto](../types/ChatPhoto.md) | Yes|
|participants\_count|[int](../types/int.md) | Yes|
|participants|Array of [User](../types/User.md) | Optional|
@ -28,6 +28,15 @@ description: chatInvite attributes, type and example
### Example:
```
$chatInvite = ['_' => 'chatInvite', 'channel' => true, 'broadcast' => true, 'public' => true, 'megagroup' => true, 'title' => string, 'photo' => ChatPhoto, 'participants_count' => int, 'participants' => [Vector t], ];
$chatInvite = ['_' => 'chatInvite', 'channel' => true, 'broadcast' => true, 'public' => true, 'megagroup' => true, 'title' => string, 'photo' => ChatPhoto, 'participants_count' => int, 'participants' => [User], ];
```
Or, if you're into Lua:
```
chatInvite={_='chatInvite', channel=true, broadcast=true, public=true, megagroup=true, title=string, photo=ChatPhoto, participants_count=int, participants={User}, }
```

View File

@ -11,7 +11,7 @@ description: chatInviteAlready attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|chat|[Chat](../types/Chat.md) | Required|
|chat|[Chat](../types/Chat.md) | Yes|
@ -24,3 +24,12 @@ description: chatInviteAlready attributes, type and example
$chatInviteAlready = ['_' => 'chatInviteAlready', 'chat' => Chat, ];
```
Or, if you're into Lua:
```
chatInviteAlready={_='chatInviteAlready', chat=Chat, }
```

View File

@ -19,3 +19,12 @@ description: chatInviteEmpty attributes, type and example
$chatInviteEmpty = ['_' => 'chatInviteEmpty', ];
```
Or, if you're into Lua:
```
chatInviteEmpty={_='chatInviteEmpty', }
```

View File

@ -11,7 +11,7 @@ description: chatInviteExported attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|link|[string](../types/string.md) | Required|
|link|[string](../types/string.md) | Yes|
@ -24,3 +24,12 @@ description: chatInviteExported attributes, type and example
$chatInviteExported = ['_' => 'chatInviteExported', 'link' => string, ];
```
Or, if you're into Lua:
```
chatInviteExported={_='chatInviteExported', link=string, }
```

View File

@ -11,9 +11,9 @@ description: chatParticipant attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|inviter\_id|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|inviter\_id|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -26,3 +26,12 @@ description: chatParticipant attributes, type and example
$chatParticipant = ['_' => 'chatParticipant', 'user_id' => int, 'inviter_id' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
chatParticipant={_='chatParticipant', user_id=int, inviter_id=int, date=int, }
```

View File

@ -11,9 +11,9 @@ description: chatParticipantAdmin attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|inviter\_id|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|inviter\_id|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -26,3 +26,12 @@ description: chatParticipantAdmin attributes, type and example
$chatParticipantAdmin = ['_' => 'chatParticipantAdmin', 'user_id' => int, 'inviter_id' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
chatParticipantAdmin={_='chatParticipantAdmin', user_id=int, inviter_id=int, date=int, }
```

View File

@ -11,7 +11,7 @@ description: chatParticipantCreator attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
@ -24,3 +24,12 @@ description: chatParticipantCreator attributes, type and example
$chatParticipantCreator = ['_' => 'chatParticipantCreator', 'user_id' => int, ];
```
Or, if you're into Lua:
```
chatParticipantCreator={_='chatParticipantCreator', user_id=int, }
```

View File

@ -11,9 +11,9 @@ description: chatParticipants attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|chat\_id|[int](../types/int.md) | Required|
|participants|Array of [ChatParticipant](../types/ChatParticipant.md) | Required|
|version|[int](../types/int.md) | Required|
|chat\_id|[int](../types/int.md) | Yes|
|participants|Array of [ChatParticipant](../types/ChatParticipant.md) | Yes|
|version|[int](../types/int.md) | Yes|
@ -23,6 +23,15 @@ description: chatParticipants attributes, type and example
### Example:
```
$chatParticipants = ['_' => 'chatParticipants', 'chat_id' => int, 'participants' => [Vector t], 'version' => int, ];
$chatParticipants = ['_' => 'chatParticipants', 'chat_id' => int, 'participants' => [ChatParticipant], 'version' => int, ];
```
Or, if you're into Lua:
```
chatParticipants={_='chatParticipants', chat_id=int, participants={ChatParticipant}, version=int, }
```

View File

@ -11,7 +11,7 @@ description: chatParticipantsForbidden attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|chat\_id|[int](../types/int.md) | Required|
|chat\_id|[int](../types/int.md) | Yes|
|self\_participant|[ChatParticipant](../types/ChatParticipant.md) | Optional|
@ -25,3 +25,12 @@ description: chatParticipantsForbidden attributes, type and example
$chatParticipantsForbidden = ['_' => 'chatParticipantsForbidden', 'chat_id' => int, 'self_participant' => ChatParticipant, ];
```
Or, if you're into Lua:
```
chatParticipantsForbidden={_='chatParticipantsForbidden', chat_id=int, self_participant=ChatParticipant, }
```

View File

@ -11,8 +11,8 @@ description: chatPhoto attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|photo\_small|[FileLocation](../types/FileLocation.md) | Required|
|photo\_big|[FileLocation](../types/FileLocation.md) | Required|
|photo\_small|[FileLocation](../types/FileLocation.md) | Yes|
|photo\_big|[FileLocation](../types/FileLocation.md) | Yes|
@ -25,3 +25,12 @@ description: chatPhoto attributes, type and example
$chatPhoto = ['_' => 'chatPhoto', 'photo_small' => FileLocation, 'photo_big' => FileLocation, ];
```
Or, if you're into Lua:
```
chatPhoto={_='chatPhoto', photo_small=FileLocation, photo_big=FileLocation, }
```

View File

@ -19,3 +19,12 @@ description: chatPhotoEmpty attributes, type and example
$chatPhotoEmpty = ['_' => 'chatPhotoEmpty', ];
```
Or, if you're into Lua:
```
chatPhotoEmpty={_='chatPhotoEmpty', }
```

View File

@ -12,34 +12,34 @@ description: config attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|phonecalls\_enabled|[Bool](../types/Bool.md) | Optional|
|date|[int](../types/int.md) | Required|
|expires|[int](../types/int.md) | Required|
|test\_mode|[Bool](../types/Bool.md) | Required|
|this\_dc|[int](../types/int.md) | Required|
|dc\_options|Array of [DcOption](../types/DcOption.md) | Required|
|chat\_size\_max|[int](../types/int.md) | Required|
|megagroup\_size\_max|[int](../types/int.md) | Required|
|forwarded\_count\_max|[int](../types/int.md) | Required|
|online\_update\_period\_ms|[int](../types/int.md) | Required|
|offline\_blur\_timeout\_ms|[int](../types/int.md) | Required|
|offline\_idle\_timeout\_ms|[int](../types/int.md) | Required|
|online\_cloud\_timeout\_ms|[int](../types/int.md) | Required|
|notify\_cloud\_delay\_ms|[int](../types/int.md) | Required|
|notify\_default\_delay\_ms|[int](../types/int.md) | Required|
|chat\_big\_size|[int](../types/int.md) | Required|
|push\_chat\_period\_ms|[int](../types/int.md) | Required|
|push\_chat\_limit|[int](../types/int.md) | Required|
|saved\_gifs\_limit|[int](../types/int.md) | Required|
|edit\_time\_limit|[int](../types/int.md) | Required|
|rating\_e\_decay|[int](../types/int.md) | Required|
|stickers\_recent\_limit|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Yes|
|expires|[int](../types/int.md) | Yes|
|test\_mode|[Bool](../types/Bool.md) | Yes|
|this\_dc|[int](../types/int.md) | Yes|
|dc\_options|Array of [DcOption](../types/DcOption.md) | Yes|
|chat\_size\_max|[int](../types/int.md) | Yes|
|megagroup\_size\_max|[int](../types/int.md) | Yes|
|forwarded\_count\_max|[int](../types/int.md) | Yes|
|online\_update\_period\_ms|[int](../types/int.md) | Yes|
|offline\_blur\_timeout\_ms|[int](../types/int.md) | Yes|
|offline\_idle\_timeout\_ms|[int](../types/int.md) | Yes|
|online\_cloud\_timeout\_ms|[int](../types/int.md) | Yes|
|notify\_cloud\_delay\_ms|[int](../types/int.md) | Yes|
|notify\_default\_delay\_ms|[int](../types/int.md) | Yes|
|chat\_big\_size|[int](../types/int.md) | Yes|
|push\_chat\_period\_ms|[int](../types/int.md) | Yes|
|push\_chat\_limit|[int](../types/int.md) | Yes|
|saved\_gifs\_limit|[int](../types/int.md) | Yes|
|edit\_time\_limit|[int](../types/int.md) | Yes|
|rating\_e\_decay|[int](../types/int.md) | Yes|
|stickers\_recent\_limit|[int](../types/int.md) | Yes|
|tmp\_sessions|[int](../types/int.md) | Optional|
|pinned\_dialogs\_count\_max|[int](../types/int.md) | Required|
|call\_receive\_timeout\_ms|[int](../types/int.md) | Required|
|call\_ring\_timeout\_ms|[int](../types/int.md) | Required|
|call\_connect\_timeout\_ms|[int](../types/int.md) | Required|
|call\_packet\_timeout\_ms|[int](../types/int.md) | Required|
|disabled\_features|Array of [DisabledFeature](../types/DisabledFeature.md) | Required|
|pinned\_dialogs\_count\_max|[int](../types/int.md) | Yes|
|call\_receive\_timeout\_ms|[int](../types/int.md) | Yes|
|call\_ring\_timeout\_ms|[int](../types/int.md) | Yes|
|call\_connect\_timeout\_ms|[int](../types/int.md) | Yes|
|call\_packet\_timeout\_ms|[int](../types/int.md) | Yes|
|disabled\_features|Array of [DisabledFeature](../types/DisabledFeature.md) | Yes|
@ -49,6 +49,15 @@ description: config attributes, type and example
### Example:
```
$config = ['_' => 'config', 'phonecalls_enabled' => true, 'date' => int, 'expires' => int, 'test_mode' => Bool, 'this_dc' => int, 'dc_options' => [Vector t], 'chat_size_max' => int, 'megagroup_size_max' => int, 'forwarded_count_max' => int, 'online_update_period_ms' => int, 'offline_blur_timeout_ms' => int, 'offline_idle_timeout_ms' => int, 'online_cloud_timeout_ms' => int, 'notify_cloud_delay_ms' => int, 'notify_default_delay_ms' => int, 'chat_big_size' => int, 'push_chat_period_ms' => int, 'push_chat_limit' => int, 'saved_gifs_limit' => int, 'edit_time_limit' => int, 'rating_e_decay' => int, 'stickers_recent_limit' => int, 'tmp_sessions' => int, 'pinned_dialogs_count_max' => int, 'call_receive_timeout_ms' => int, 'call_ring_timeout_ms' => int, 'call_connect_timeout_ms' => int, 'call_packet_timeout_ms' => int, 'disabled_features' => [Vector t], ];
$config = ['_' => 'config', 'phonecalls_enabled' => true, 'date' => int, 'expires' => int, 'test_mode' => Bool, 'this_dc' => int, 'dc_options' => [DcOption], 'chat_size_max' => int, 'megagroup_size_max' => int, 'forwarded_count_max' => int, 'online_update_period_ms' => int, 'offline_blur_timeout_ms' => int, 'offline_idle_timeout_ms' => int, 'online_cloud_timeout_ms' => int, 'notify_cloud_delay_ms' => int, 'notify_default_delay_ms' => int, 'chat_big_size' => int, 'push_chat_period_ms' => int, 'push_chat_limit' => int, 'saved_gifs_limit' => int, 'edit_time_limit' => int, 'rating_e_decay' => int, 'stickers_recent_limit' => int, 'tmp_sessions' => int, 'pinned_dialogs_count_max' => int, 'call_receive_timeout_ms' => int, 'call_ring_timeout_ms' => int, 'call_connect_timeout_ms' => int, 'call_packet_timeout_ms' => int, 'disabled_features' => [DisabledFeature], ];
```
Or, if you're into Lua:
```
config={_='config', phonecalls_enabled=true, date=int, expires=int, test_mode=Bool, this_dc=int, dc_options={DcOption}, chat_size_max=int, megagroup_size_max=int, forwarded_count_max=int, online_update_period_ms=int, offline_blur_timeout_ms=int, offline_idle_timeout_ms=int, online_cloud_timeout_ms=int, notify_cloud_delay_ms=int, notify_default_delay_ms=int, chat_big_size=int, push_chat_period_ms=int, push_chat_limit=int, saved_gifs_limit=int, edit_time_limit=int, rating_e_decay=int, stickers_recent_limit=int, tmp_sessions=int, pinned_dialogs_count_max=int, call_receive_timeout_ms=int, call_ring_timeout_ms=int, call_connect_timeout_ms=int, call_packet_timeout_ms=int, disabled_features={DisabledFeature}, }
```

View File

@ -11,8 +11,8 @@ description: contact attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|mutual|[Bool](../types/Bool.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|mutual|[Bool](../types/Bool.md) | Yes|
@ -25,3 +25,12 @@ description: contact attributes, type and example
$contact = ['_' => 'contact', 'user_id' => int, 'mutual' => Bool, ];
```
Or, if you're into Lua:
```
contact={_='contact', user_id=int, mutual=Bool, }
```

View File

@ -11,8 +11,8 @@ description: contactBlocked attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|date|[int](../types/int.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|date|[int](../types/int.md) | Yes|
@ -25,3 +25,12 @@ description: contactBlocked attributes, type and example
$contactBlocked = ['_' => 'contactBlocked', 'user_id' => int, 'date' => int, ];
```
Or, if you're into Lua:
```
contactBlocked={_='contactBlocked', user_id=int, date=int, }
```

View File

@ -19,3 +19,12 @@ description: contactLinkContact attributes, type and example
$contactLinkContact = ['_' => 'contactLinkContact', ];
```
Or, if you're into Lua:
```
contactLinkContact={_='contactLinkContact', }
```

View File

@ -19,3 +19,12 @@ description: contactLinkHasPhone attributes, type and example
$contactLinkHasPhone = ['_' => 'contactLinkHasPhone', ];
```
Or, if you're into Lua:
```
contactLinkHasPhone={_='contactLinkHasPhone', }
```

View File

@ -19,3 +19,12 @@ description: contactLinkNone attributes, type and example
$contactLinkNone = ['_' => 'contactLinkNone', ];
```
Or, if you're into Lua:
```
contactLinkNone={_='contactLinkNone', }
```

View File

@ -19,3 +19,12 @@ description: contactLinkUnknown attributes, type and example
$contactLinkUnknown = ['_' => 'contactLinkUnknown', ];
```
Or, if you're into Lua:
```
contactLinkUnknown={_='contactLinkUnknown', }
```

View File

@ -11,8 +11,8 @@ description: contactStatus attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|user\_id|[int](../types/int.md) | Required|
|status|[UserStatus](../types/UserStatus.md) | Required|
|user\_id|[int](../types/int.md) | Yes|
|status|[UserStatus](../types/UserStatus.md) | Yes|
@ -25,3 +25,12 @@ description: contactStatus attributes, type and example
$contactStatus = ['_' => 'contactStatus', 'user_id' => int, 'status' => UserStatus, ];
```
Or, if you're into Lua:
```
contactStatus={_='contactStatus', user_id=int, status=UserStatus, }
```

View File

@ -11,8 +11,8 @@ description: contacts_blocked attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|blocked|Array of [ContactBlocked](../types/ContactBlocked.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|blocked|Array of [ContactBlocked](../types/ContactBlocked.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -22,6 +22,15 @@ description: contacts_blocked attributes, type and example
### Example:
```
$contacts_blocked = ['_' => 'contacts.blocked', 'blocked' => [Vector t], 'users' => [Vector t], ];
$contacts_blocked = ['_' => 'contacts.blocked', 'blocked' => [ContactBlocked], 'users' => [User], ];
```
Or, if you're into Lua:
```
contacts_blocked={_='contacts.blocked', blocked={ContactBlocked}, users={User}, }
```

View File

@ -11,9 +11,9 @@ description: contacts_blockedSlice attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|count|[int](../types/int.md) | Required|
|blocked|Array of [ContactBlocked](../types/ContactBlocked.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|count|[int](../types/int.md) | Yes|
|blocked|Array of [ContactBlocked](../types/ContactBlocked.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -23,6 +23,15 @@ description: contacts_blockedSlice attributes, type and example
### Example:
```
$contacts_blockedSlice = ['_' => 'contacts.blockedSlice', 'count' => int, 'blocked' => [Vector t], 'users' => [Vector t], ];
$contacts_blockedSlice = ['_' => 'contacts.blockedSlice', 'count' => int, 'blocked' => [ContactBlocked], 'users' => [User], ];
```
Or, if you're into Lua:
```
contacts_blockedSlice={_='contacts.blockedSlice', count=int, blocked={ContactBlocked}, users={User}, }
```

View File

@ -11,8 +11,8 @@ description: contacts_contacts attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|contacts|Array of [Contact](../types/Contact.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|contacts|Array of [Contact](../types/Contact.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -22,6 +22,15 @@ description: contacts_contacts attributes, type and example
### Example:
```
$contacts_contacts = ['_' => 'contacts.contacts', 'contacts' => [Vector t], 'users' => [Vector t], ];
$contacts_contacts = ['_' => 'contacts.contacts', 'contacts' => [Contact], 'users' => [User], ];
```
Or, if you're into Lua:
```
contacts_contacts={_='contacts.contacts', contacts={Contact}, users={User}, }
```

View File

@ -19,3 +19,12 @@ description: contacts_contactsNotModified attributes, type and example
$contacts_contactsNotModified = ['_' => 'contacts.contactsNotModified', ];
```
Or, if you're into Lua:
```
contacts_contactsNotModified={_='contacts.contactsNotModified', }
```

View File

@ -11,9 +11,9 @@ description: contacts_found attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|results|Array of [Peer](../types/Peer.md) | Required|
|chats|Array of [Chat](../types/Chat.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|results|Array of [Peer](../types/Peer.md) | Yes|
|chats|Array of [Chat](../types/Chat.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -23,6 +23,15 @@ description: contacts_found attributes, type and example
### Example:
```
$contacts_found = ['_' => 'contacts.found', 'results' => [Vector t], 'chats' => [Vector t], 'users' => [Vector t], ];
$contacts_found = ['_' => 'contacts.found', 'results' => [Peer], 'chats' => [Chat], 'users' => [User], ];
```
Or, if you're into Lua:
```
contacts_found={_='contacts.found', results={Peer}, chats={Chat}, users={User}, }
```

View File

@ -11,9 +11,9 @@ description: contacts_importedContacts attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|imported|Array of [ImportedContact](../types/ImportedContact.md) | Required|
|retry\_contacts|Array of [long](../types/long.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|imported|Array of [ImportedContact](../types/ImportedContact.md) | Yes|
|retry\_contacts|Array of [long](../types/long.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -23,6 +23,15 @@ description: contacts_importedContacts attributes, type and example
### Example:
```
$contacts_importedContacts = ['_' => 'contacts.importedContacts', 'imported' => [Vector t], 'retry_contacts' => [Vector t], 'users' => [Vector t], ];
$contacts_importedContacts = ['_' => 'contacts.importedContacts', 'imported' => [ImportedContact], 'retry_contacts' => [long], 'users' => [User], ];
```
Or, if you're into Lua:
```
contacts_importedContacts={_='contacts.importedContacts', imported={ImportedContact}, retry_contacts={long}, users={User}, }
```

View File

@ -11,9 +11,9 @@ description: contacts_link attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|my\_link|[ContactLink](../types/ContactLink.md) | Required|
|foreign\_link|[ContactLink](../types/ContactLink.md) | Required|
|user|[User](../types/User.md) | Required|
|my\_link|[ContactLink](../types/ContactLink.md) | Yes|
|foreign\_link|[ContactLink](../types/ContactLink.md) | Yes|
|user|[User](../types/User.md) | Yes|
@ -26,3 +26,12 @@ description: contacts_link attributes, type and example
$contacts_link = ['_' => 'contacts.link', 'my_link' => ContactLink, 'foreign_link' => ContactLink, 'user' => User, ];
```
Or, if you're into Lua:
```
contacts_link={_='contacts.link', my_link=ContactLink, foreign_link=ContactLink, user=User, }
```

View File

@ -11,9 +11,9 @@ description: contacts_resolvedPeer attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|peer|[Peer](../types/Peer.md) | Required|
|chats|Array of [Chat](../types/Chat.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|peer|[Peer](../types/Peer.md) | Yes|
|chats|Array of [Chat](../types/Chat.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -23,6 +23,15 @@ description: contacts_resolvedPeer attributes, type and example
### Example:
```
$contacts_resolvedPeer = ['_' => 'contacts.resolvedPeer', 'peer' => Peer, 'chats' => [Vector t], 'users' => [Vector t], ];
$contacts_resolvedPeer = ['_' => 'contacts.resolvedPeer', 'peer' => Peer, 'chats' => [Chat], 'users' => [User], ];
```
Or, if you're into Lua:
```
contacts_resolvedPeer={_='contacts.resolvedPeer', peer=Peer, chats={Chat}, users={User}, }
```

View File

@ -11,9 +11,9 @@ description: contacts_topPeers attributes, type and example
| Name | Type | Required |
|----------|:-------------:|---------:|
|categories|Array of [TopPeerCategoryPeers](../types/TopPeerCategoryPeers.md) | Required|
|chats|Array of [Chat](../types/Chat.md) | Required|
|users|Array of [User](../types/User.md) | Required|
|categories|Array of [TopPeerCategoryPeers](../types/TopPeerCategoryPeers.md) | Yes|
|chats|Array of [Chat](../types/Chat.md) | Yes|
|users|Array of [User](../types/User.md) | Yes|
@ -23,6 +23,15 @@ description: contacts_topPeers attributes, type and example
### Example:
```
$contacts_topPeers = ['_' => 'contacts.topPeers', 'categories' => [Vector t], 'chats' => [Vector t], 'users' => [Vector t], ];
$contacts_topPeers = ['_' => 'contacts.topPeers', 'categories' => [TopPeerCategoryPeers], 'chats' => [Chat], 'users' => [User], ];
```
Or, if you're into Lua:
```
contacts_topPeers={_='contacts.topPeers', categories={TopPeerCategoryPeers}, chats={Chat}, users={User}, }
```

View File

@ -19,3 +19,12 @@ description: contacts_topPeersNotModified attributes, type and example
$contacts_topPeersNotModified = ['_' => 'contacts.topPeersNotModified', ];
```
Or, if you're into Lua:
```
contacts_topPeersNotModified={_='contacts.topPeersNotModified', }
```

View File

@ -14,9 +14,9 @@ description: dcOption attributes, type and example
|ipv6|[Bool](../types/Bool.md) | Optional|
|media\_only|[Bool](../types/Bool.md) | Optional|
|tcpo\_only|[Bool](../types/Bool.md) | Optional|
|id|[int](../types/int.md) | Required|
|ip\_address|[string](../types/string.md) | Required|
|port|[int](../types/int.md) | Required|
|id|[int](../types/int.md) | Yes|
|ip\_address|[string](../types/string.md) | Yes|
|port|[int](../types/int.md) | Yes|
@ -29,3 +29,12 @@ description: dcOption attributes, type and example
$dcOption = ['_' => 'dcOption', 'ipv6' => true, 'media_only' => true, 'tcpo_only' => true, 'id' => int, 'ip_address' => string, 'port' => int, ];
```
Or, if you're into Lua:
```
dcOption={_='dcOption', ipv6=true, media_only=true, tcpo_only=true, id=int, ip_address=string, port=int, }
```

View File

@ -0,0 +1,35 @@
---
title: decryptedMessageActionAbortKey
description: decryptedMessageActionAbortKey attributes, type and example
---
## Constructor: decryptedMessageActionAbortKey\_20
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|exchange\_id|[long](../types/long.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionAbortKey_20 = ['_' => 'decryptedMessageActionAbortKey', 'exchange_id' => long, ];
```
Or, if you're into Lua:
```
decryptedMessageActionAbortKey_20={_='decryptedMessageActionAbortKey', exchange_id=long, }
```

View File

@ -0,0 +1,37 @@
---
title: decryptedMessageActionAcceptKey
description: decryptedMessageActionAcceptKey attributes, type and example
---
## Constructor: decryptedMessageActionAcceptKey\_20
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|exchange\_id|[long](../types/long.md) | Yes|
|g\_b|[bytes](../types/bytes.md) | Yes|
|key\_fingerprint|[long](../types/long.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionAcceptKey_20 = ['_' => 'decryptedMessageActionAcceptKey', 'exchange_id' => long, 'g_b' => bytes, 'key_fingerprint' => long, ];
```
Or, if you're into Lua:
```
decryptedMessageActionAcceptKey_20={_='decryptedMessageActionAcceptKey', exchange_id=long, g_b=bytes, key_fingerprint=long, }
```

View File

@ -0,0 +1,36 @@
---
title: decryptedMessageActionCommitKey
description: decryptedMessageActionCommitKey attributes, type and example
---
## Constructor: decryptedMessageActionCommitKey\_20
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|exchange\_id|[long](../types/long.md) | Yes|
|key\_fingerprint|[long](../types/long.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionCommitKey_20 = ['_' => 'decryptedMessageActionCommitKey', 'exchange_id' => long, 'key_fingerprint' => long, ];
```
Or, if you're into Lua:
```
decryptedMessageActionCommitKey_20={_='decryptedMessageActionCommitKey', exchange_id=long, key_fingerprint=long, }
```

View File

@ -0,0 +1,35 @@
---
title: decryptedMessageActionDeleteMessages
description: decryptedMessageActionDeleteMessages attributes, type and example
---
## Constructor: decryptedMessageActionDeleteMessages\_8
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|random\_ids|Array of [long](../types/long.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionDeleteMessages_8 = ['_' => 'decryptedMessageActionDeleteMessages', 'random_ids' => [long], ];
```
Or, if you're into Lua:
```
decryptedMessageActionDeleteMessages_8={_='decryptedMessageActionDeleteMessages', random_ids={long}, }
```

View File

@ -0,0 +1,30 @@
---
title: decryptedMessageActionFlushHistory
description: decryptedMessageActionFlushHistory attributes, type and example
---
## Constructor: decryptedMessageActionFlushHistory\_8
[Back to constructors index](index.md)
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionFlushHistory_8 = ['_' => 'decryptedMessageActionFlushHistory', ];
```
Or, if you're into Lua:
```
decryptedMessageActionFlushHistory_8={_='decryptedMessageActionFlushHistory', }
```

View File

@ -0,0 +1,30 @@
---
title: decryptedMessageActionNoop
description: decryptedMessageActionNoop attributes, type and example
---
## Constructor: decryptedMessageActionNoop\_20
[Back to constructors index](index.md)
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionNoop_20 = ['_' => 'decryptedMessageActionNoop', ];
```
Or, if you're into Lua:
```
decryptedMessageActionNoop_20={_='decryptedMessageActionNoop', }
```

View File

@ -0,0 +1,35 @@
---
title: decryptedMessageActionNotifyLayer
description: decryptedMessageActionNotifyLayer attributes, type and example
---
## Constructor: decryptedMessageActionNotifyLayer\_17
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|layer|[int](../types/int.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionNotifyLayer_17 = ['_' => 'decryptedMessageActionNotifyLayer', 'layer' => int, ];
```
Or, if you're into Lua:
```
decryptedMessageActionNotifyLayer_17={_='decryptedMessageActionNotifyLayer', layer=int, }
```

View File

@ -0,0 +1,35 @@
---
title: decryptedMessageActionReadMessages
description: decryptedMessageActionReadMessages attributes, type and example
---
## Constructor: decryptedMessageActionReadMessages\_8
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|random\_ids|Array of [long](../types/long.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionReadMessages_8 = ['_' => 'decryptedMessageActionReadMessages', 'random_ids' => [long], ];
```
Or, if you're into Lua:
```
decryptedMessageActionReadMessages_8={_='decryptedMessageActionReadMessages', random_ids={long}, }
```

View File

@ -0,0 +1,36 @@
---
title: decryptedMessageActionRequestKey
description: decryptedMessageActionRequestKey attributes, type and example
---
## Constructor: decryptedMessageActionRequestKey\_20
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|exchange\_id|[long](../types/long.md) | Yes|
|g\_a|[bytes](../types/bytes.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionRequestKey_20 = ['_' => 'decryptedMessageActionRequestKey', 'exchange_id' => long, 'g_a' => bytes, ];
```
Or, if you're into Lua:
```
decryptedMessageActionRequestKey_20={_='decryptedMessageActionRequestKey', exchange_id=long, g_a=bytes, }
```

View File

@ -0,0 +1,36 @@
---
title: decryptedMessageActionResend
description: decryptedMessageActionResend attributes, type and example
---
## Constructor: decryptedMessageActionResend\_17
[Back to constructors index](index.md)
### Attributes:
| Name | Type | Required |
|----------|:-------------:|---------:|
|start\_seq\_no|[int](../types/int.md) | Yes|
|end\_seq\_no|[int](../types/int.md) | Yes|
### Type: [DecryptedMessageAction](../types/DecryptedMessageAction.md)
### Example:
```
$decryptedMessageActionResend_17 = ['_' => 'decryptedMessageActionResend', 'start_seq_no' => int, 'end_seq_no' => int, ];
```
Or, if you're into Lua:
```
decryptedMessageActionResend_17={_='decryptedMessageActionResend', start_seq_no=int, end_seq_no=int, }
```

Some files were not shown because too many files have changed in this diff Show More