Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Valid api_id must be provided #2155

Closed
PaperPlane28 opened this issue Oct 1, 2022 · 13 comments
Closed

Valid api_id must be provided #2155

PaperPlane28 opened this issue Oct 1, 2022 · 13 comments

Comments

@PaperPlane28
Copy link

I can normally use tdjson in version 1.8.5 of tdlib, but in version 1.8.6 I am prompted "Valid api_id must be provided". How can I solve this problem?

@ChristianB86
Copy link

I can confirm the issue. I'm using tdjson in c++ and setup the parameters with this json-string:
{ "@type": "setTdlibParameters", "parameters": { "database_directory": "xyz", "use_message_database": 1, "use_secret_chats": 1, "api_id": 12345, "api_hash": "abcde12345", "system_language_code": "en", "device_model": "Desktop", "application_version": "2.0", "enable_storage_optimizer": 1 } }

I get this error right after sending the string with td_send:

[ 3][t 4][1664643717.633993625][Td.cpp:2947][#1][!Td][&td_requests] Receive request 3: setTdlibParameters {
use_test_dc = false
database_directory = ""
files_directory = ""
database_encryption_key = bytes [0] { }
use_file_database = false
use_chat_info_database = false
use_message_database = false
use_secret_chats = false
api_id = 0
api_hash = ""
system_language_code = ""
device_model = ""
system_version = ""
application_version = ""
enable_storage_optimizer = false
ignore_file_names = false
}
[ 3][t 4][1664643717.634454488][Td.cpp:4014][#1][!Td][&td_requests] Sending error for request 3: error { code = 400 message = "Valid api_id must be provided. Can be obtained at https://my.telegram.org" }

@PaperPlane28
Copy link
Author

PaperPlane28 commented Oct 1, 2022

我可以确认问题。我在 C++ 中使用 tdjson 并使用这个 json-string 设置参数: { "@type": "setTdlibParameters", "parameters": { "database_directory": "xyz", "use_message_database": 1, "use_secret_chats": 1, "api_id": 12345, "api_hash": "abcde12345", "system_language_code": "en", "device_model": "Desktop", "application_version": "2.0", "enable_storage_optimizer": 1 } }

使用 td_send 发送字符串后,我立即收到此错误:

[3][t 4][1664643717.633993625][Td.cpp:2947][ #1 ][!Td][&td_requests] 接收请求 3:setTdlibParameters {
use_test_dc = false
database_directory = ""
files_directory = ""
database_encryption_key = bytes [0 ] { }
use_file_database = false
use_chat_info_database = false
use_message_database = false
use_secret_chats = false
api_id = 0
api_hash = ""
system_language_code = ""
device_model = ""
system_version = ""
application_version = ""
enable_storage_optimizer = false
ignore_file_names = false
}
[3] [t 4][1664643717.634454488][Td.cpp:4014][ #1][!Td][&td_requests] 请求 3 发送错误:错误 { code = 400 message = "必须提供有效的 api_id。可在https://my.telegram.org获得" }

Thanks for your help ,Is this an official TD question

@levlam
Copy link
Contributor

levlam commented Oct 1, 2022

Authorization flow was significantly changed in TDLib 1.8.6: two new authorization states were added, one authorization state was removed, and setTdlibParameters request was changed. See

//@class AuthorizationState @description Represents the current authorization state of the TDLib client
//@description Initializetion parameters are needed. Call `setTdlibParameters` to provide them
authorizationStateWaitTdlibParameters = AuthorizationState;
//@description TDLib needs the user's phone number to authorize. Call `setAuthenticationPhoneNumber` to provide the phone number, or use `requestQrCodeAuthentication`, or `checkAuthenticationBotToken` for other authentication options
authorizationStateWaitPhoneNumber = AuthorizationState;
//@description TDLib needs the user's email address to authorize. Call `setAuthenticationEmailAddress` to provide the email address, or directly call `checkAuthenticationEmailCode` with Apple ID/Google ID token if allowed
//@allow_apple_id True, if authorization through Apple ID is allowed @allow_google_id True, if authorization through Google ID is allowed
authorizationStateWaitEmailAddress allow_apple_id:Bool allow_google_id:Bool = AuthorizationState;
//@description TDLib needs the user's authentication code sent to an email address to authorize. Call `checkAuthenticationEmailCode` to provide the code
//@allow_apple_id True, if authorization through Apple ID is allowed @allow_google_id True, if authorization through Google ID is allowed
//@code_info Information about the sent authentication code
//@next_phone_number_authorization_date Point in time (Unix timestamp) when the user will be able to authorize with a code sent to the user's phone number; 0 if unknown
authorizationStateWaitEmailCode allow_apple_id:Bool allow_google_id:Bool code_info:emailAddressAuthenticationCodeInfo next_phone_number_authorization_date:int32 = AuthorizationState;
//@description TDLib needs the user's authentication code to authorize @code_info Information about the authorization code that was sent
authorizationStateWaitCode code_info:authenticationCodeInfo = AuthorizationState;
//@description The user needs to confirm authorization on another logged in device by scanning a QR code with the provided link @link A tg:// URL for the QR code. The link will be updated frequently
authorizationStateWaitOtherDeviceConfirmation link:string = AuthorizationState;
//@description The user is unregistered and need to accept terms of service and enter their first name and last name to finish registration @terms_of_service Telegram terms of service
authorizationStateWaitRegistration terms_of_service:termsOfService = AuthorizationState;
//@description The user has been authorized, but needs to enter a 2-step verification password to start using the application @password_hint Hint for the password; may be empty @has_recovery_email_address True, if a recovery email address has been set up
//@recovery_email_address_pattern Pattern of the email address to which the recovery email was sent; empty until a recovery email has been sent
authorizationStateWaitPassword password_hint:string has_recovery_email_address:Bool recovery_email_address_pattern:string = AuthorizationState;
//@description The user has been successfully authorized. TDLib is now ready to answer queries
authorizationStateReady = AuthorizationState;
//@description The user is currently logging out
authorizationStateLoggingOut = AuthorizationState;
//@description TDLib is closing, all subsequent queries will be answered with the error 500. Note that closing TDLib can take a while. All resources will be freed only after authorizationStateClosed has been received
authorizationStateClosing = AuthorizationState;
//@description TDLib client is in its final state. All databases are closed and all resources are released. No other updates will be received after this. All queries will be responded to
//-with error code 500. To continue working, one must create a new instance of the TDLib client
authorizationStateClosed = AuthorizationState;
for up-to-date scheme for authorization states in TDLib 1.8.6 and
//@description Sets the parameters for TDLib initialization. Works only when the current authorization state is authorizationStateWaitTdlibParameters
//@use_test_dc Pass true to use Telegram test environment instead of the production environment
//@database_directory The path to the directory for the persistent database; if empty, the current working directory will be used
//@files_directory The path to the directory for storing files; if empty, database_directory will be used
//@database_encryption_key Encryption key for the database
//@use_file_database Pass true to keep information about downloaded and uploaded files between application restarts
//@use_chat_info_database Pass true to keep cache of users, basic groups, supergroups, channels and secret chats between restarts. Implies use_file_database
//@use_message_database Pass true to keep cache of chats and messages between restarts. Implies use_chat_info_database
//@use_secret_chats Pass true to enable support for secret chats
//@api_id Application identifier for Telegram API access, which can be obtained at https://my.telegram.org
//@api_hash Application identifier hash for Telegram API access, which can be obtained at https://my.telegram.org
//@system_language_code IETF language tag of the user's operating system language; must be non-empty
//@device_model Model of the device the application is being run on; must be non-empty
//@system_version Version of the operating system the application is being run on. If empty, the version is automatically detected by TDLib
//@application_version Application version; must be non-empty
//@enable_storage_optimizer Pass true to automatically delete old files in background
//@ignore_file_names Pass true to ignore original file names for downloaded files. Otherwise, downloaded files are saved under names as close as possible to the original name
setTdlibParameters use_test_dc:Bool database_directory:string files_directory:string database_encryption_key:bytes use_file_database:Bool use_chat_info_database:Bool use_message_database:Bool use_secret_chats:Bool api_id:int32 api_hash:string system_language_code:string device_model:string system_version:string application_version:string enable_storage_optimizer:Bool ignore_file_names:Bool = Ok;
//@description Sets the phone number of the user and sends an authentication code to the user. Works only when the current authorization state is authorizationStateWaitPhoneNumber,
//-or if there is no pending authentication query and the current authorization state is authorizationStateWaitCode, authorizationStateWaitRegistration, or authorizationStateWaitPassword
//@phone_number The phone number of the user, in international format @settings Settings for the authentication of the user's phone number; pass null to use default settings
setAuthenticationPhoneNumber phone_number:string settings:phoneNumberAuthenticationSettings = Ok;
//@description Sets the email address of the user and sends an authentication code to the email address. Works only when the current authorization state is authorizationStateWaitEmailAddress @email_address The email address of the user
setAuthenticationEmailAddress email_address:string = Ok;
//@description Resends an authentication code to the user. Works only when the current authorization state is authorizationStateWaitCode, the next_code_type of the result is not null and the server-specified timeout has passed, or when the current authorization state is authorizationStateWaitEmailCode
resendAuthenticationCode = Ok;
//@description Checks the authentication of a email address. Works only when the current authorization state is authorizationStateWaitEmailCode @code Email address authentication to check
checkAuthenticationEmailCode code:EmailAddressAuthentication = Ok;
//@description Checks the authentication code. Works only when the current authorization state is authorizationStateWaitCode @code Authentication code to check
checkAuthenticationCode code:string = Ok;
//@description Requests QR code authentication by scanning a QR code on another logged in device. Works only when the current authorization state is authorizationStateWaitPhoneNumber,
//-or if there is no pending authentication query and the current authorization state is authorizationStateWaitCode, authorizationStateWaitRegistration, or authorizationStateWaitPassword
//@other_user_ids List of user identifiers of other users currently using the application
requestQrCodeAuthentication other_user_ids:vector<int53> = Ok;
//@description Finishes user registration. Works only when the current authorization state is authorizationStateWaitRegistration
//@first_name The first name of the user; 1-64 characters @last_name The last name of the user; 0-64 characters
registerUser first_name:string last_name:string = Ok;
//@description Checks the 2-step verification password for correctness. Works only when the current authorization state is authorizationStateWaitPassword @password The 2-step verification password to check
checkAuthenticationPassword password:string = Ok;
//@description Requests to send a 2-step verification password recovery code to an email address that was previously set up. Works only when the current authorization state is authorizationStateWaitPassword
requestAuthenticationPasswordRecovery = Ok;
//@description Checks whether a 2-step verification password recovery code sent to an email address is valid. Works only when the current authorization state is authorizationStateWaitPassword @recovery_code Recovery code to check
checkAuthenticationPasswordRecoveryCode recovery_code:string = Ok;
//@description Recovers the 2-step verification password with a password recovery code sent to an email address that was previously set up. Works only when the current authorization state is authorizationStateWaitPassword
//@recovery_code Recovery code to check @new_password New 2-step verification password of the user; may be empty to remove the password @new_hint New password hint; may be empty
recoverAuthenticationPassword recovery_code:string new_password:string new_hint:string = Ok;
//@description Checks the authentication token of a bot; to log in as a bot. Works only when the current authorization state is authorizationStateWaitPhoneNumber. Can be used instead of setAuthenticationPhoneNumber and checkAuthenticationCode to log in @token The bot token
checkAuthenticationBotToken token:string = Ok;
for methods to be used during authorization.

@ChristianB86
Copy link

Changed the json-string to:

{
"@type": "setTdlibParameters",
"use_test_dc": false,
"database_directory": "xyz",
"file_directory": "",
"use_file_database": false,
"use_chat_info_database": false,
"use_message_database": 1,
"use_secret_chats": 1,
"api_id": 12345,
"api_hash": "abcdef12345",
"system_language_code": "en",
"device_model": "Desktop",
"system_version": "",
"application_version": "2.0",
"enable_storage_optimizer": 1,
"ignore_file_names": false
}

Now the error is solved. Thank you

@PaperPlane28
Copy link
Author

Authorization flow was significantly changed in TDLib 1.8.6: two new authorization states were added, one authorization state was removed, and setTdlibParameters request was changed. See

//@class AuthorizationState @description Represents the current authorization state of the TDLib client
//@description Initializetion parameters are needed. Call `setTdlibParameters` to provide them
authorizationStateWaitTdlibParameters = AuthorizationState;
//@description TDLib needs the user's phone number to authorize. Call `setAuthenticationPhoneNumber` to provide the phone number, or use `requestQrCodeAuthentication`, or `checkAuthenticationBotToken` for other authentication options
authorizationStateWaitPhoneNumber = AuthorizationState;
//@description TDLib needs the user's email address to authorize. Call `setAuthenticationEmailAddress` to provide the email address, or directly call `checkAuthenticationEmailCode` with Apple ID/Google ID token if allowed
//@allow_apple_id True, if authorization through Apple ID is allowed @allow_google_id True, if authorization through Google ID is allowed
authorizationStateWaitEmailAddress allow_apple_id:Bool allow_google_id:Bool = AuthorizationState;
//@description TDLib needs the user's authentication code sent to an email address to authorize. Call `checkAuthenticationEmailCode` to provide the code
//@allow_apple_id True, if authorization through Apple ID is allowed @allow_google_id True, if authorization through Google ID is allowed
//@code_info Information about the sent authentication code
//@next_phone_number_authorization_date Point in time (Unix timestamp) when the user will be able to authorize with a code sent to the user's phone number; 0 if unknown
authorizationStateWaitEmailCode allow_apple_id:Bool allow_google_id:Bool code_info:emailAddressAuthenticationCodeInfo next_phone_number_authorization_date:int32 = AuthorizationState;
//@description TDLib needs the user's authentication code to authorize @code_info Information about the authorization code that was sent
authorizationStateWaitCode code_info:authenticationCodeInfo = AuthorizationState;
//@description The user needs to confirm authorization on another logged in device by scanning a QR code with the provided link @link A tg:// URL for the QR code. The link will be updated frequently
authorizationStateWaitOtherDeviceConfirmation link:string = AuthorizationState;
//@description The user is unregistered and need to accept terms of service and enter their first name and last name to finish registration @terms_of_service Telegram terms of service
authorizationStateWaitRegistration terms_of_service:termsOfService = AuthorizationState;
//@description The user has been authorized, but needs to enter a 2-step verification password to start using the application @password_hint Hint for the password; may be empty @has_recovery_email_address True, if a recovery email address has been set up
//@recovery_email_address_pattern Pattern of the email address to which the recovery email was sent; empty until a recovery email has been sent
authorizationStateWaitPassword password_hint:string has_recovery_email_address:Bool recovery_email_address_pattern:string = AuthorizationState;
//@description The user has been successfully authorized. TDLib is now ready to answer queries
authorizationStateReady = AuthorizationState;
//@description The user is currently logging out
authorizationStateLoggingOut = AuthorizationState;
//@description TDLib is closing, all subsequent queries will be answered with the error 500. Note that closing TDLib can take a while. All resources will be freed only after authorizationStateClosed has been received
authorizationStateClosing = AuthorizationState;
//@description TDLib client is in its final state. All databases are closed and all resources are released. No other updates will be received after this. All queries will be responded to
//-with error code 500. To continue working, one must create a new instance of the TDLib client
authorizationStateClosed = AuthorizationState;

for up-to-date scheme for authorization states in TDLib 1.8.6 and

//@description Sets the parameters for TDLib initialization. Works only when the current authorization state is authorizationStateWaitTdlibParameters
//@use_test_dc Pass true to use Telegram test environment instead of the production environment
//@database_directory The path to the directory for the persistent database; if empty, the current working directory will be used
//@files_directory The path to the directory for storing files; if empty, database_directory will be used
//@database_encryption_key Encryption key for the database
//@use_file_database Pass true to keep information about downloaded and uploaded files between application restarts
//@use_chat_info_database Pass true to keep cache of users, basic groups, supergroups, channels and secret chats between restarts. Implies use_file_database
//@use_message_database Pass true to keep cache of chats and messages between restarts. Implies use_chat_info_database
//@use_secret_chats Pass true to enable support for secret chats
//@api_id Application identifier for Telegram API access, which can be obtained at https://my.telegram.org
//@api_hash Application identifier hash for Telegram API access, which can be obtained at https://my.telegram.org
//@system_language_code IETF language tag of the user's operating system language; must be non-empty
//@device_model Model of the device the application is being run on; must be non-empty
//@system_version Version of the operating system the application is being run on. If empty, the version is automatically detected by TDLib
//@application_version Application version; must be non-empty
//@enable_storage_optimizer Pass true to automatically delete old files in background
//@ignore_file_names Pass true to ignore original file names for downloaded files. Otherwise, downloaded files are saved under names as close as possible to the original name
setTdlibParameters use_test_dc:Bool database_directory:string files_directory:string database_encryption_key:bytes use_file_database:Bool use_chat_info_database:Bool use_message_database:Bool use_secret_chats:Bool api_id:int32 api_hash:string system_language_code:string device_model:string system_version:string application_version:string enable_storage_optimizer:Bool ignore_file_names:Bool = Ok;
//@description Sets the phone number of the user and sends an authentication code to the user. Works only when the current authorization state is authorizationStateWaitPhoneNumber,
//-or if there is no pending authentication query and the current authorization state is authorizationStateWaitCode, authorizationStateWaitRegistration, or authorizationStateWaitPassword
//@phone_number The phone number of the user, in international format @settings Settings for the authentication of the user's phone number; pass null to use default settings
setAuthenticationPhoneNumber phone_number:string settings:phoneNumberAuthenticationSettings = Ok;
//@description Sets the email address of the user and sends an authentication code to the email address. Works only when the current authorization state is authorizationStateWaitEmailAddress @email_address The email address of the user
setAuthenticationEmailAddress email_address:string = Ok;
//@description Resends an authentication code to the user. Works only when the current authorization state is authorizationStateWaitCode, the next_code_type of the result is not null and the server-specified timeout has passed, or when the current authorization state is authorizationStateWaitEmailCode
resendAuthenticationCode = Ok;
//@description Checks the authentication of a email address. Works only when the current authorization state is authorizationStateWaitEmailCode @code Email address authentication to check
checkAuthenticationEmailCode code:EmailAddressAuthentication = Ok;
//@description Checks the authentication code. Works only when the current authorization state is authorizationStateWaitCode @code Authentication code to check
checkAuthenticationCode code:string = Ok;
//@description Requests QR code authentication by scanning a QR code on another logged in device. Works only when the current authorization state is authorizationStateWaitPhoneNumber,
//-or if there is no pending authentication query and the current authorization state is authorizationStateWaitCode, authorizationStateWaitRegistration, or authorizationStateWaitPassword
//@other_user_ids List of user identifiers of other users currently using the application
requestQrCodeAuthentication other_user_ids:vector<int53> = Ok;
//@description Finishes user registration. Works only when the current authorization state is authorizationStateWaitRegistration
//@first_name The first name of the user; 1-64 characters @last_name The last name of the user; 0-64 characters
registerUser first_name:string last_name:string = Ok;
//@description Checks the 2-step verification password for correctness. Works only when the current authorization state is authorizationStateWaitPassword @password The 2-step verification password to check
checkAuthenticationPassword password:string = Ok;
//@description Requests to send a 2-step verification password recovery code to an email address that was previously set up. Works only when the current authorization state is authorizationStateWaitPassword
requestAuthenticationPasswordRecovery = Ok;
//@description Checks whether a 2-step verification password recovery code sent to an email address is valid. Works only when the current authorization state is authorizationStateWaitPassword @recovery_code Recovery code to check
checkAuthenticationPasswordRecoveryCode recovery_code:string = Ok;
//@description Recovers the 2-step verification password with a password recovery code sent to an email address that was previously set up. Works only when the current authorization state is authorizationStateWaitPassword
//@recovery_code Recovery code to check @new_password New 2-step verification password of the user; may be empty to remove the password @new_hint New password hint; may be empty
recoverAuthenticationPassword recovery_code:string new_password:string new_hint:string = Ok;
//@description Checks the authentication token of a bot; to log in as a bot. Works only when the current authorization state is authorizationStateWaitPhoneNumber. Can be used instead of setAuthenticationPhoneNumber and checkAuthenticationCode to log in @token The bot token
checkAuthenticationBotToken token:string = Ok;

for methods to be used during authorization.

Thanks for your help

@PaperPlane28
Copy link
Author

Changed the json-string to:

{
"@type": "setTdlibParameters",
"use_test_dc": false,
"database_directory": "xyz",
"file_directory": "",
"use_file_database": false,
"use_chat_info_database": false,
"use_message_database": 1,
"use_secret_chats": 1,
"api_id": 12345,
"api_hash": "abcdef12345",
"system_language_code": "en",
"device_model": "Desktop",
"system_version": "",
"application_version": "2.0",
"enable_storage_optimizer": 1,
"ignore_file_names": false
}

Now the error is solved. Thank you

Thanks for your help

@andrey882006
Copy link

andrey882006 commented Mar 27, 2023

Hello. Please tell me who has already worked with the tdlib library? Because I have such a problem: after authorization (at the end writes {"@type":"ok"}), I'm trying to send a request like: {"@type":"SendMessage","chat_id":"-1001628740950","input_message_content":{"@type":"inputMessageText","text":{"@type":"FormattedText","text":"Hello!"}}}
However , when listening to the response I get {"@type":"updateOption","name":"message_text_length_max","value":{"@type":"optionValueInteger","value":"4096"}}

If I listen to the answer again, I get for example:
{"@type":"updateOption","name":"suggested_video_note_video_bitrate","value":{"@type":"optionValueInteger","value":"1000"}}

And so on.. That is, the request does not work, but it does not issue any error, it constantly sends some kind of @type":"updateOption" with different parameters.

Please tell me who knows what's wrong? And how should this library work in general?)

@AYMENJD
Copy link
Contributor

AYMENJD commented Mar 27, 2023

@andrey882006 You are not correctly handling updates.

See: https://core.telegram.org/tdlib/getting-started.

@andrey882006
Copy link

@andrey882006Вы неправильно обрабатываете обновления.

См.: https://core.telegram.org/tdlib/getting-started .

I looked, and more than once - but somehow I didn't find anything about it there.
So how is it right, can you tell me?

@andrey882006
Copy link

Изменил строку json на:

{
"@type": "setTdlibParameters",
"use_test_dc": ложь,
"database_directory": "xyz",
"file_directory": "",
"use_file_database": ложь,
"use_chat_info_database": ложь,
"use_message_database": 1,
"use_secret_chats": 1 ,
"api_id": 12345,
"api_hash": "abcdef12345",
"system_language_code": "en",
"device_model": "Desktop",
"system_version": "",
"application_version": "2.0",
"enable_storage_optimizer": 1,
"ignore_file_names": ложь
}

Теперь ошибка устранена. Спасибо

Hello, I see you already have experience working with the tdlib library. Could you please suggest such a problem: after authorization (at the end writes {"@type":"ok"}), I'm trying to send a request like: {"@type":"SendMessage","chat_id":"-1001628740950","input_message_content":{"@type":"inputMessageText","text":{"@type":"FormattedText","text":"Hello!"}}}
However , when listening to the response I get {"@type":"updateOption","name":"message_text_length_max","value":{"@type":"optionValueInteger","value":"4096"}}

If I listen to the answer again, I get for example:
{"@type":"updateOption","name":"suggested_video_note_video_bitrate","value":{"@type":"optionValueInteger","value":"1000"}}

And so on.. That is, the request does not work, but it does not issue any error, it constantly sends some kind of @type":"updateOption" with different parameters.

Please tell me who knows what's wrong? And how should this library work in general?

@AYMENJD
Copy link
Contributor

AYMENJD commented Mar 28, 2023

@andrey882006 The wrong that you are not correctly handling updates.

Each time you call td_receive you get an unprocessed update or response to a sent request using td_send. And the mentioned updates are unprocessed updates. You must loop through td_receive to process all updates and responses.

On initialzation TDLib may send number of important updates such as updateOption updates.

@andrey882006
Copy link

@andrey882006 Ошибка в том, что вы неправильно обрабатываете обновления.

Каждый раз, когда вы звоните, td_receiveвы получаете необработанное обновление или ответ на отправленный запрос с использованием td_send. И упомянутые обновления являются необработанными обновлениями. Вы должны выполнить цикл td_receiveдля обработки всех обновлений и ответов.

При инициализации TDLib может отправить ряд важных обновлений, таких как updateOptionобновления.

OK, tell me, the first time I listen, instead of authorization data, the library gives me the answer: {"@type":"updateOption","name":"version","value":{"@type":"optionValueString","value":"1.7.9"}}

Is this normal at all? And if so, how do I handle this update?

@AYMENJD
Copy link
Contributor

AYMENJD commented Mar 28, 2023

@andrey882006 Yes, it's normal because you didn't process that update.

Everything is described in docs: https://core.telegram.org/tdlib/getting-started

TDLib usage examples are here: https://github.com/tdlib/td/tree/master/example#tdlib-usage-and-build-examples

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants