# This file contains additional descriptions for TL objects, # for example for objects/fields that don't have a description # from Telegram documentation. # # By default, these descriptions are used as a fallback, # but can also be used to overwrite original documentation. # # This file is licensed under MIT license. # Big thanks to Durov team for not providing complete docs like this in the first place, # and instead spreading the docs across dozens of pages without proper formatting or anything. # Override TL objects' (classes/methods) description, or their arguments' descriptions. # Type is defined by the first 2 symbols in key ("o_" for class/method, "u_" for union) objects: o_mt_reqPq: desc: > Request for the first step of Authorization key derivation process. This method is deprecated, use {@link tl.mtproto.RawReqPqMultiRequest} instead. The difference is that when using this, only one server key is returned, while `req_pq_multi` will return multiple. arguments: nonce: Randomly generated number (32-bit) that will be used in the later steps o_mt_reqPqMulti: desc: > Request for the first step of Authorization key derivation process. arguments: nonce: Randomly generated number that will be used in the later steps o_mt_resPQ: desc: Response for the first step of Authorization key derivation process arguments: nonce: Client nonce that was generated earlier serverNonce: Random number generated by the server, used in the later steps pq: > Big endian representation of a natural number, which is a product of two different odd prime numbers. Normally, this value is `<= 2^63-1`. Client is expected to decompose this product to `p` and `q`. serverPublicKeyFingerprints: | List of public RSA key fingerprints, which are computed as follows: - First, the modulus and the exponent are extracted from the key - Then, the following TL type is written: `rsa_public_key n:string e:string = RSAPublicKey` - This is a bare type, meaning there's no 4-byte type number before it - `n` is the modulus, `e` is the exponent, encoded as big-endian - Finally, SHA1 is computed, and its last 8 bytes are taken and parsed as LE long (i.e. `parse_int64_le(sha1(rsa_public_key).slice(-8))`) Client is expected to choose out of those keys any single one that it has embedded in itself and return one of them in the following request. o_mt_reqDHParams: desc: Request for the second step of Authorization key derivation process. arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier p: Big endian encoded first factor. Note - `p < q` q: Big endian encoded second factor. Node - `p < q` publicKeyFingerprint: Fingerprint of the RSA key that the client has chosen encryptedData: | Encrypted payload, obtained as follows: - Let `newNonce` be a random 32-bit number - Let `data` be a serialization of either {@link tl.mtproto.RawP_q_inner_data} or {@link tl.mtproto.RawP_q_inner_data_temp} with the generated `newNonce` - `dataWithHash = concat(sha1(data), data, random_bytes(235 - data.length))` - `encryptedData = dataWithHash ^ key.exponent % key.modulus`, where `key` is the server public key which was chosen o_mt_p_q_inner_data: desc: Inner data used for {@link tl.mtproto.RawReqDHParamsRequest} arguments: pq: Original product of `p` and `q` sent by the server p: Big endian encoded first factor. Note - `p < q` q: Big endian encoded second factor. Node - `p < q` nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier newNonce: New client nonce generated o_mt_p_q_inner_data_temp: desc: > Inner data used for {@link tl.mtproto.RawReqDHParamsRequest}. Unlike {@link tl.mtproto.RawP_q_inner_data}, this is used to generate a temporary key. arguments: pq: Original product of `p` and `q` sent by the server p: Big endian encoded first factor. Note - `p < q` q: Big endian encoded second factor. Node - `p < q` nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier newNonce: New client nonce generated expiresIn: > Maximum number of seconds that this key will be valid for. The server might discard the key earlier. o_mt_server_DH_params_fail: desc: PQ decomposition was incorrect, try again. arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier o_mt_server_DH_params_ok: desc: PQ decomposition was correct, server-side variables for DH are returned arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier encryptedAnswer: | Encrypted DH parameters, obtained as follows: - Let `answer` be a serialization of {@link tl.mtproto.RawServer_DH_inner_data} - `hash1 = sha1(concat(newNonce, serverNonce))` - `hash2 = sha1(concat(serverNonce, newNonce))` - `hash3 = sha1(concat(newNonce, newNonce))` - `key = concat(hash1, hash2.slice(0, 12))` - `iv = concat(hash2.slice(12, 20), hash3, newNonce.slice(0, 4))` - `encryptedAnswer = aes256_ige_encrypt(answer, key, iv) o_mt_server_DH_inner_data: desc: > Inner data that is returned in {@link tl.mtproto.RawServer_DH_params_ok}, containing server-side variables for Diffie-Hellman exchange arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier g: '`g` number (generator) used for Diffie-Hellman' dhPrime: '`p` prime number (modulus) used for Diffie-Hellman' gA: '`gA` number (`gA = g ^ A % p`, where `A` is server secret) used for Diffie-Hellman' serverTime: Server UNIX timestamp (in seconds) o_mt_setClientDHParams: desc: Request containing encrypted client-side variables for Diffie-Hellman exchange arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier encryptedData: | Encrypted DH parameters, obtained as follows: - Let `B` be a random 2048-bit (256 bytes) integer - `gB = g ^ B % dhPrime` (Diffie-Hellman) - Let `data` be a serialization of {@link tl.mtproto.RawClient_DH_inner_data} - `dataWithHash = concat(sha1(data), data, padding))`, where `padding` is 0-15 random bytes, such that `dataWithHash.length` is divisible by 16 - `encryptedData = aes256_ige_encrypt(dataWithHash, key, iv)`, where `key` and `iv` are the same as ones used in {@link tl.mtproto.RawServer_DH_params_ok} o_mt_client_DH_inner_data: desc: > Inner data of {@link tl.mtproto.RawSetClientDHParamsRequest}, containing client-side variables for Diffie-Hellman exchange arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier retryId: > Retry ID. When requesting for the first time, `0`, then last `authKeyAuxHash` is used gB: '`gB` number (`gB = g ^ B % p`, where `B` is client secret) used for Diffie-Hellman' с_mt_dh_gen_ok: desc: > DH exchange was successful, and auth key is `gA ^ b % dhPrime`, and `authKeyAuxHash = sha1(authKey).slice(0, 8)` arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier newNonceHash1: > Nonce hash, computed as follows: `sha1(concat([newNonce, [0x01], authKeyAuxHash])` o_mt_dh_gen_retry: desc: > DH exchange need to be retried. Current auth key is `gA ^ b % dhPrime`, and `authKeyAuxHash = sha1(authKey).slice(0, 8)`, but they will change. When this is received, you are expected to send another {@link tl.mtproto.RawSetClientDHParamsRequest}. arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier newNonceHash2: > Nonce hash, computed as follows: `sha1(concat([newNonce, [0x02], authKeyAuxHash])` o_mt_dh_gen_fail: desc: DH exchange failed. You should restart the entire authorization flow. arguments: nonce: Client nonce that was generated earlier serverNonce: Server nonce that was received earlier newNonceHash3: > Nonce hash, computed as follows: `sha1(concat([newNonce, [0x03], authKeyAuxHash])` o_mt_rpc_result: desc: Result of an RPC call arguments: reqMsgId: Requesting message ID result: Result of the call o_mt_rpc_error: desc: > RPC call resulted in an error, information about that error. Error is still a result, and thus it is sent as a `result` of {@link tl.mtproto.RawRpc_result} arguments: errorCode: Numeric error code (like 404) errorMessage: String error code с_mt_rpc_answer_unknown: description: Nothing is known about this RPC call o_mt_rpc_answer_dropped_running: desc: > Response was canceled while the RPC query was being processed (where the RPC query itself was still fully processed); in this case, the same rpc_answer_dropped_running is also returned in response to the original query, and both of these responses require an acknowledgment from the client. o_mt_rpc_answer_dropped: desc: The RPC response was removed from the server’s outgoing queue arguments: msgId: Message ID of the RPC response seqNo: Seq NO of the RPC response bytes: Length in bytes of the RPC response o_mt_future_salt: desc: Information about a single future server salt arguments: validSince: UNIX time in seconds from when this salt will be used validUntil: UNIX time in seconds until which this salt will be used salt: The server salt itself o_mt_future_salts: desc: Information about future server salts arguments: reqMsgId: Requesting message ID now: Current server UNIX timestamp in seconds salts: List of future salts o_mt_pong: desc: Response to a {@link tl.mtproto.RawPingRequest} arguments: msgId: Message ID that contained `mt_ping` pingId: Ping ID that was sent in `mt_ping` o_mt_ping: desc: Ping a server to test connection arguments: pingId: Random ping ID o_mt_pingDelayDisconnect: desc: > Works like ping. In addition, after this is received, the server starts a timer which will close the current connection `disconnectDelay` seconds later unless it receives a new message of the same type which automatically resets all previous timers. If the client sends these pings once every 60 seconds, for example, it may set `disconnect_delay` equal to 75 seconds. arguments: pingId: Random ping ID disconnectDelay: Disconnect delay in seconds o_mt_destroy_session: desc: > Used by the client to notify the server that it may forget the data from a different session belonging to the same user (i.e. with the same `authKeyId`). The result of this being applied to the current session is undefined. arguments: sessionId: Old session ID o_mt_destroy_session_ok: desc: Session was succesfully destroyed arguments: sessionId: Old session ID o_mt_destroy_session_none: desc: Session was not destroyed because it does not exist arguments: sessionId: Old session ID o_mt_new_session_created: desc: > The server notifies the client that a new session (from the server’s standpoint) had to be created to handle a client message. If, after this, the server receives a message with an even smaller `msg_id` within the same session, a similar notification will be generated for this `msg_id` as well. No such notifications are generated for high msg_id values. This notification must be acknowledged by the client. It is necessary, for instance, for the client to understand that there is, in fact, a “gap” in the stream of notifications received from the server (the user may have failed to receive notifications during some period of time). Client should also resend all the messages that were sent before `firstMsgId` arguments: firstMsgId: First message ID that is known by the server to be from this session. uniqueId: Random number generated by the server every time a session is (re-)created serverSalt: Current server salt o_mt_msg_container: desc: A simple container that carries several messages arguments: messages: List of messages in the container o_mt_message: desc: A message in the container arguments: msgId: Original message ID seqno: Original message seq No bytes: Length of the message body: Contents of the message o_mt_msg_copy: desc: A copy of a message arguments: origMessage: Original message o_mt_gzip_packed: desc: > An object, which was gzipped. At the present time, it is supported in the body of an RPC response (i.e., as result in `rpc_result`) and generated by the server for a limited number of high-level queries. In addition, in the future it may be used to transmit non-service messages (i. e. RPC queries) from client to server. arguments: packedData: Gzipped contents of the message o_mt_msgs_ack: desc: > Receipt of virtually all messages (with the exception of some purely service ones as well as the plain-text messages used in the protocol for creating an authorization key) must be acknowledged. This requires the use of the this service message (not requiring an acknowledgment itself) A server usually acknowledges the receipt of a message from a client (normally, an RPC query) using an RPC response. If a response is a long time coming, a server may first send a receipt acknowledgment, and somewhat later, the RPC response itself. A client normally acknowledges the receipt of a message from a server (usually, an RPC response) by adding an acknowledgment to the next RPC query if it is not transmitted too late (if it is generated, say, 60-120 seconds following the receipt of a message from the server). However, if for a long period of time there is no reason to send messages to the server or if there is a large number of unacknowledged messages from the server (say, over 16), the client transmits a stand-alone acknowledgment. arguments: msgIds: IDs of messages to be acknowledged. Maximum 8192 IDs. o_mt_bad_msg_notification: desc: Used by the server to notify client that the sent message was incorrect. arguments: badMsgId: ID of the "bad" message badMsgSeqno: Seq No of the "bad" message errorCode: | Error code. Known values: - `16`: Message ID was too small. Most likely, client time is wrong, it would be worthwhile to synchronize it using notification's message ID and re-send the original message with the "correct" message ID or wrap it in a container with a new message ID if the original message had waited too long on the client to be transmitted. - `17`: Message ID was too big. Similar to the previous case, the client time has to be synchronized, and the message re-sent - `18`: Incorrect two lower order msg_id bits. The server expects client message ID to be divisible by 4. - `19`: Container message ID is the same as the message ID of the previous message - `20`: Message is too old, and it cannot be verified whether the server has received a message with this ID or not - `32`: Message seq No was too small (the server has already received a message with a higher or same seq No) - `33`: Message seq No was too big (the server has already received a message with a lower or same seq No) - `34`: An even seq No expected (not content-relevant), but odd received - `35`: An odd seq No expected (content-relevant), but even received - `48`: Incorrect server salt was used. In practice, `mt_bad_server_salt` is used instead. - `64`: Incorrect container o_mt_bad_server_salt: desc: Used by the server to notify client that the sent message was incorrect. arguments: badMsgId: ID of the "bad" message badMsgSeqno: Seq No of the "bad" message errorCode: Always `48` newServerSalt: New server salt to be used o_mt_msg_resend_req: desc: | Explicit Request to Re-Send Messages The remote party immediately responds by re-sending the requested messages, normally using the same connection that was used to transmit the query. If at least one message with requested ID does not exist or has already been forgotten, or has been sent by the requesting party (known from parity), `MsgsStateInfo` is returned for all messages requested as if the `MsgResendReq` query had been a `MsgsStateReq` query as well. arguments: msgIds: IDs of the messages to be resent (up to 8192 IDs) o_mt_msg_resend_ans_req: desc: | Explicit Request to Re-Send Answers The remote party immediately responds by re-sending *answers* to the requested messages, normally using the same connection that was used to transmit the query. `MsgsStateInfo` is returned for all messages requested as if the `MsgResendReq` query had been a `MsgsStateReq` query as well. arguments: msgIds: IDs of the messages answers to which should be resent (up to 8192 IDs) o_mt_msgs_state_req: desc: > Request for Message Status Information. If either party has not received information on the status of its outgoing messages for a while, it may explicitly request it from the other party arguments: msgIds: IDs of the messages state of which should be sent (up to 8192 IDs) o_mt_msgs_state_info: desc: Informational Message regarding Status of Messages arguments: reqMsgId: Requesting message ID info: | Byte array containing exactly one byte for each message ID: - `1`: nothing is known about the message (ID is too small, the other party may have forgotten it) - `2`: message was not received (ID falls within the range of stored identifiers; however, the other party has certainly not received a message like that) - `3`: message not received (ID is too big; however, the other party has certainly not received it yet) - `4`: message received (note that this response is also at the same time a receipt acknowledgment) - `+8`: message already acknowledged - `+16`: message not requiring acknowledgment - `+32`: RPC query contained in message being processed or processing already complete - `+64`: content-related response to message already generated - `+128`: other party knows for a fact that message is already received o_mt_msgs_all_info: desc: > Voluntary Communication of Status of Messages. Either party may voluntarily inform the other party of the status of the messages transmitted by the other party. arguments: msgIds: Message IDs that the other party is being informed about info: Byte array in the same format as {@link tl.mtproto.RawMsgs_state_info} o_mt_msg_detailed_info: desc: | Extended Voluntary Communication of Status of One Message. Normally used by the server to respond to the receipt of a duplicate message ID, especially if a response to the message has already been generated and the response is large. If the response is small, the server may re-send the answer itself instead. This message can also be used as a notification instead of resending a large message. arguments: msgId: Original message ID that this message is informing about answerMsgId: Message ID that was the response to that message bytes: Size of the answer message status: Always `0`, but this may change in the future o_mt_msg_new_detailed_info: desc: > Similar to {@link tl.mtproto.RawMsg_detailed_info}, but used to notify about messages that were created on the server not in response to an RPC query (e.g. updates) and were transmitted to the client some time ago, but not acknowledged arguments: answerMsgId: ID of the message that was sent by the server bytes: Size of the answer message status: Always `0`, but this may change in the future o_mt_rpcDropAnswer: desc: > Cancellation of an RPC query. In certain situations, the client does not want to receive a response to an already transmitted RPC query, for example because the response turns out to be long and the client has decided to do without it because of insufficient link capacity. Simply interrupting the connection will not have any effect because the server would re-send the missing response at the first opportunity. Therefore, the client needs a way to cancel receipt of the RPC response message, actually acknowledging its receipt prior to it being in fact received, which will settle the server down and prevent it from re-sending the response. However, the client does not know the RPC response's message ID prior to receiving the response; the only thing it knows is the requesting message ID, i.e. the message ID of the relevant RPC query. Therefore, this special query is used arguments: reqMsgId: ID of a message containing an RPC query to be cancelled # Override arguments wherever they are, based on the filters arguments: - name: gigagroup filters: - type: "true" desc: Is this a broadcast group? # Replace any description, based on regex. Used to fix typos. regex: - regex: \bchanel\b repl: channel - regex: \bgeoposition\b repl: geo position - regex: \bgeogroup\b repl: geo group - regex: \bunixdate\b|Unix timestamp repl: UNIX timestamp in seconds - regex: \bstickerset\b repl: stickerset - regex: \bonly "foursquare" needs\b repl: only "foursquare" and "gplaces" need # gender-neutral pronouns - regex: \bhis\b repl: their - regex: \bhim\b repl: them