diff options
Diffstat (limited to 'protocols/Telegram/tdlib/td/example/csharp/TdExample.cs')
-rw-r--r-- | protocols/Telegram/tdlib/td/example/csharp/TdExample.cs | 98 |
1 files changed, 61 insertions, 37 deletions
diff --git a/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs b/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs index be98e1a758..0c07ee7c7b 100644 --- a/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs +++ b/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -23,23 +23,18 @@ namespace TdExample private static TdApi.AuthorizationState _authorizationState = null; private static volatile bool _haveAuthorization = false; - private static volatile bool _quiting = false; + private static volatile bool _needQuit = false; + private static volatile bool _canQuit = false; private static volatile AutoResetEvent _gotAuthorization = new AutoResetEvent(false); private static readonly string _newLine = Environment.NewLine; - private static readonly string _commandsLine = "Enter command (gc <chatId> - GetChat, me - GetMe, sm <chatId> <message> - SendMessage, lo - LogOut, q - Quit): "; + private static readonly string _commandsLine = "Enter command (gc <chatId> - GetChat, me - GetMe, sm <chatId> <message> - SendMessage, lo - LogOut, r - Restart, q - Quit): "; private static volatile string _currentPrompt = null; private static Td.Client CreateTdClient() { - Td.Client result = Td.Client.Create(new UpdatesHandler()); - new Thread(() => - { - Thread.CurrentThread.IsBackground = true; - result.Run(); - }).Start(); - return result; + return Td.Client.Create(new UpdateHandler()); } private static void Print(string str) @@ -72,33 +67,48 @@ namespace TdExample } if (_authorizationState is TdApi.AuthorizationStateWaitTdlibParameters) { - TdApi.TdlibParameters parameters = new TdApi.TdlibParameters(); - parameters.DatabaseDirectory = "tdlib"; - parameters.UseMessageDatabase = true; - parameters.UseSecretChats = true; - parameters.ApiId = 94575; - parameters.ApiHash = "a3406de8d171bb422bb6ddf3bbd800e2"; - parameters.SystemLanguageCode = "en"; - parameters.DeviceModel = "Desktop"; - parameters.SystemVersion = "Unknown"; - parameters.ApplicationVersion = "1.0"; - parameters.EnableStorageOptimizer = true; + TdApi.SetTdlibParameters request = new TdApi.SetTdlibParameters(); + request.DatabaseDirectory = "tdlib"; + request.UseMessageDatabase = true; + request.UseSecretChats = true; + request.ApiId = 94575; + request.ApiHash = "a3406de8d171bb422bb6ddf3bbd800e2"; + request.SystemLanguageCode = "en"; + request.DeviceModel = "Desktop"; + request.ApplicationVersion = "1.0"; + request.EnableStorageOptimizer = true; - _client.Send(new TdApi.SetTdlibParameters(parameters), new AuthorizationRequestHandler()); - } - else if (_authorizationState is TdApi.AuthorizationStateWaitEncryptionKey) - { - _client.Send(new TdApi.CheckDatabaseEncryptionKey(), new AuthorizationRequestHandler()); + _client.Send(request, new AuthorizationRequestHandler()); } else if (_authorizationState is TdApi.AuthorizationStateWaitPhoneNumber) { string phoneNumber = ReadLine("Please enter phone number: "); - _client.Send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, false, false), new AuthorizationRequestHandler()); + _client.Send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, null), new AuthorizationRequestHandler()); + } + else if (_authorizationState is TdApi.AuthorizationStateWaitEmailAddress) + { + string emailAddress = ReadLine("Please enter email address: "); + _client.Send(new TdApi.SetAuthenticationEmailAddress(emailAddress), new AuthorizationRequestHandler()); + } + else if (_authorizationState is TdApi.AuthorizationStateWaitEmailCode) + { + string code = ReadLine("Please enter email authentication code: "); + _client.Send(new TdApi.CheckAuthenticationEmailCode(new TdApi.EmailAddressAuthenticationCode(code)), new AuthorizationRequestHandler()); + } + else if (_authorizationState is TdApi.AuthorizationStateWaitOtherDeviceConfirmation state) + { + Console.WriteLine("Please confirm this login link on another device: " + state.Link); } else if (_authorizationState is TdApi.AuthorizationStateWaitCode) { string code = ReadLine("Please enter authentication code: "); - _client.Send(new TdApi.CheckAuthenticationCode(code, "", ""), new AuthorizationRequestHandler()); + _client.Send(new TdApi.CheckAuthenticationCode(code), new AuthorizationRequestHandler()); + } + else if (_authorizationState is TdApi.AuthorizationStateWaitRegistration) + { + string firstName = ReadLine("Please enter your first name: "); + string lastName = ReadLine("Please enter your last name: "); + _client.Send(new TdApi.RegisterUser(firstName, lastName), new AuthorizationRequestHandler()); } else if (_authorizationState is TdApi.AuthorizationStateWaitPassword) { @@ -123,9 +133,11 @@ namespace TdExample else if (_authorizationState is TdApi.AuthorizationStateClosed) { Print("Closed"); - if (!_quiting) + if (!_needQuit) { _client = CreateTdClient(); // recreate _client after previous has closed + } else { + _canQuit = true; } } else @@ -172,8 +184,12 @@ namespace TdExample _haveAuthorization = false; _client.Send(new TdApi.LogOut(), _defaultHandler); break; + case "r": + _haveAuthorization = false; + _client.Send(new TdApi.Close(), _defaultHandler); + break; case "q": - _quiting = true; + _needQuit = true; _haveAuthorization = false; _client.Send(new TdApi.Close(), _defaultHandler); break; @@ -195,37 +211,45 @@ namespace TdExample TdApi.ReplyMarkup replyMarkup = new TdApi.ReplyMarkupInlineKeyboard(new TdApi.InlineKeyboardButton[][] { row, row, row }); TdApi.InputMessageContent content = new TdApi.InputMessageText(new TdApi.FormattedText(message, null), false, true); - _client.Send(new TdApi.SendMessage(chatId, 0, false, false, replyMarkup, content), _defaultHandler); + _client.Send(new TdApi.SendMessage(chatId, 0, 0, null, replyMarkup, content), _defaultHandler); } static void Main() { // disable TDLib log - Td.Log.SetVerbosityLevel(0); - if (!Td.Log.SetFilePath("tdlib.log")) + Td.Client.Execute(new TdApi.SetLogVerbosityLevel(0)); + if (Td.Client.Execute(new TdApi.SetLogStream(new TdApi.LogStreamFile("tdlib.log", 1 << 27, false))) is TdApi.Error) { throw new System.IO.IOException("Write access to the current directory is required"); } + new Thread(() => + { + Thread.CurrentThread.IsBackground = true; + Td.Client.Run(); + }).Start(); // create Td.Client _client = CreateTdClient(); // test Client.Execute - _defaultHandler.OnResult(_client.Execute(new TdApi.GetTextEntities("@telegram /test_command https://telegram.org telegram.me @gif @test"))); + _defaultHandler.OnResult(Td.Client.Execute(new TdApi.GetTextEntities("@telegram /test_command https://telegram.org telegram.me @gif @test"))); // main loop - while (!_quiting) + while (!_needQuit) { // await authorization _gotAuthorization.Reset(); _gotAuthorization.WaitOne(); - _client.Send(new TdApi.GetChats(Int64.MaxValue, 0, 100), _defaultHandler); // preload chat list + _client.Send(new TdApi.LoadChats(null, 100), _defaultHandler); // preload main chat list while (_haveAuthorization) { GetCommand(); } } + while (!_canQuit) { + Thread.Sleep(1); + } } private class DefaultHandler : Td.ClientResultHandler @@ -236,7 +260,7 @@ namespace TdExample } } - private class UpdatesHandler : Td.ClientResultHandler + private class UpdateHandler : Td.ClientResultHandler { void Td.ClientResultHandler.OnResult(TdApi.BaseObject @object) { |