public async Task ImportContactByPhoneNumberAndSendMessage() { // User should be already authenticated! var store = new FileSessionStore(); var client = new TelegramClient(store, "session", apiId, apiHash); await client.Connect(); Assert.IsTrue(client.IsUserAuthorized()); var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); Assert.IsNotNull(res); await client.SendMessage(res.Value, "Test message from TelegramClient"); }
public async Task GetHistory() { var store = new FileSessionStore(); var client = new TelegramClient(store, "session", apiId, apiHash); await client.Connect(); Assert.IsTrue(client.IsUserAuthorized()); var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); Assert.IsNotNull(res); var hist = await client.GetMessagesHistoryForContact(res.Value, 0, 5); Assert.IsNotNull(hist); }
public static AuthExportedAuthorization GenerateExportedAuth(int migrateId, TelegramSettings settings) { var transportConfig = new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo)) { TelegramUtils.RunSynchronously(client.Connect()); var exportedAuth = (AuthExportedAuthorization)TelegramUtils.RunSynchronously(client.Methods.AuthExportAuthorizationAsync( new SharpTelegram.Schema.AuthExportAuthorizationArgs { DcId = (uint)migrateId, })); return(exportedAuth); } }
public static async Task Login() { if (client == null) { client = new TelegramClient(); } if (!await client.Connect()) { CodeRequired(); loginHash = await client.SendCodeRequest(phoneNumber); } else { loggedUserId = ((UserConstructor)client.loggedUser).id; OnLoginSuccess(); } }
public async Task SignUpNewUser() { var store = new FileSessionStore(); var client = new TelegramClient(store, "session", apiId, apiHash); await client.Connect(); var hash = await client.SendCodeRequest(NotRegisteredNumberToSignUp); var code = ""; var registeredUser = await client.SignUp(NotRegisteredNumberToSignUp, hash, code, "TLSharp", "User"); Assert.IsNotNull(registeredUser); Assert.IsTrue(client.IsUserAuthorized()); var loggedInUser = await client.MakeAuth(NotRegisteredNumberToSignUp, hash, code); Assert.IsNotNull(loggedInUser); }
public static CodeRegister VerifyPassword(Service service, TelegramSettings settings, byte[] passwordHash) { try { var transportConfig = new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo)) { TelegramUtils.RunSynchronously(client.Connect()); try { var iresult = TelegramUtils.RunSynchronously(client.Methods.AuthCheckPasswordAsync(new AuthCheckPasswordArgs { PasswordHash = passwordHash })); var result = (AuthAuthorization)iresult; Thread.Sleep(100); //wait until the other response comes in. return(new CodeRegister { AccountId = (result.User as User).Id, Response = CodeRegister.Type.Success }); } catch (RpcErrorException ex) { var error = (RpcError)ex.Error; var cr = new CodeRegister(); if (error.ErrorMessage == "PASSWORD_HASH_INVALID") { cr.Response = CodeRegister.Type.InvalidPassword; } return(cr); } } } catch (Exception ex) { service.DebugPrint("Error in VerifyPassword: " + ex); return(null); } }
private async Task <TelegramClient> InitializeClient() { var store = new FileSessionStore(); var client = new TelegramClient(store, "session", apiId, apiHash); await client.Connect(); if (!client.IsUserAuthorized()) { var hash = await client.SendCodeRequest(NumberToAuthenticate); var code = ""; // you can change code in debugger Debugger.Break(); await client.MakeAuth(NumberToAuthenticate, hash, code); } Assert.IsTrue(client.IsUserAuthorized()); return(client); }
public FullClientDisposable(Telegram telegram) { if (telegram.IsFullClientConnected) { _client = telegram._fullClient; _isFullClient = true; } else { var transportConfig = new TcpClientTransportConfig(telegram._settings.NearestDcIp, telegram._settings.NearestDcPort); var client = new TelegramClient(transportConfig, new ConnectionConfig(telegram._settings.AuthKey, telegram._settings.Salt), AppInfo); var result = TelegramUtils.RunSynchronously(client.Connect()); if (result != MTProtoConnectResult.Success) { throw new Exception("Failed to connect: " + result); } _client = client; _isFullClient = false; } }
public static CodeRegister VerifyCode(Service service, TelegramSettings settings, string code) { try { var transportConfig = new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo)) { TelegramUtils.RunSynchronously(client.Connect()); try { var iresult = TelegramUtils.RunSynchronously(client.Methods.AuthRecoverPasswordAsync(new AuthRecoverPasswordArgs { Code = code })); var result = (AuthAuthorization)iresult; Thread.Sleep(100); //wait until the other response comes in. return(new CodeRegister { AccountId = (result.User as User).Id, Response = CodeRegister.Type.Success }); } catch (RpcErrorException ex) { var error = (RpcError)ex.Error; var cr = new CodeRegister(); cr.Response = CodeRegister.Type.Failure; return(cr); } } } catch (Exception ex) { service.DebugPrint("Error in VerifyPassword: " + ex); return(null); } }
public async Task UploadAndSendMedia() { var store = new FileSessionStore(); var client = new TelegramClient(store, "session", apiId, apiHash); await client.Connect(); Assert.IsTrue(client.IsUserAuthorized()); var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); Assert.IsNotNull(res); var file = File.ReadAllBytes("../../data/cat.jpg"); var mediaFile = await client.UploadFile("test_file.jpg", file); Assert.IsNotNull(mediaFile); var state = await client.SendMediaMessage(res.Value, mediaFile); Assert.IsTrue(state); }
public async Task GetUpdates() { var store = new FileSessionStore(); var client = new TelegramClient(store, "session", apiId, apiHash); await client.Connect(); Assert.IsTrue(client.IsUserAuthorized()); var updatesState = await client.GetUpdatesState(); var initialState = updatesState as Updates_stateConstructor; Assert.IsNotNull(initialState); var difference = await client.GetUpdatesDifference(initialState.pts, initialState.date, initialState.qts); Assert.IsNotNull(difference); Assert.AreEqual(difference.Constructor, Constructor.updates_differenceEmpty); var userIdToSendMessage = await client.ImportContactByPhoneNumber(NumberToSendMessage); await client.SendMessage(userIdToSendMessage.Value, "test"); var differenceAfterMessage = await client.GetUpdatesDifference(initialState.pts, initialState.date, initialState.qts); Assert.IsNotNull(differenceAfterMessage); Assert.AreEqual(differenceAfterMessage.Constructor, Constructor.updates_difference); var differenceUpdate = differenceAfterMessage as Updates_differenceConstructor; Assert.IsNotNull(differenceUpdate); Assert.AreEqual(1, differenceUpdate.new_messages.Count); var messageUpdate = differenceUpdate.new_messages[0] as MessageConstructor; Assert.IsNotNull(messageUpdate); Assert.AreEqual("test", messageUpdate.message); }
public DownloadManager(Document document, Telegram telegram) { _document = document; _fileSize = document.Size; _telegram = telegram; int dcId = (int)_document.DcId; //initialize the dc we want to download from if (_document.DcId != _telegram.Settings.NearestDcId) { // if its not the nearest dc, it could be unintialized. so lets check and init it. var dc = DcDatabase.Get(dcId); if (dc == null) { _telegram.GetClient(dcId); //after this our dc configuration is ready, the connection should die out in a 60 secs. } var dcCached = DcDatabase.Get(dcId); var dcOption = _telegram.Config.DcOptions.Cast <DcOption>().FirstOrDefault(x => x.Id == dcId); var tcpConfig = new TcpClientTransportConfig(dcOption.IpAddress, (int)dcOption.Port); var authInfo = new SharpMTProto.Authentication.AuthInfo(dcCached.Key, BitConverter.ToUInt64(dcCached.Salt, 0)); _client = new TelegramClient(tcpConfig, new ConnectionConfig(authInfo.AuthKey, authInfo.Salt), AppInfo); TelegramUtils.RunSynchronously(_client.Connect()); } else { var tcpConfig = new TcpClientTransportConfig(_telegram.Settings.NearestDcIp, (int)_telegram.Settings.NearestDcPort); var authInfo = new SharpMTProto.Authentication.AuthInfo(_telegram.Settings.AuthKey, _telegram.Settings.Salt); _client = new TelegramClient(tcpConfig, new ConnectionConfig(authInfo.AuthKey, authInfo.Salt), AppInfo); TelegramUtils.RunSynchronously(_client.Connect()); } }
static void Main() { // Preparing //Ninja.Hide(); #region Initation myCryptCredentials = CryptCredentials.FromPassword(CRYPTO_PASSWORD, CRYPTO_SALT, CRYPTO_IV); config = new Config(configFileName, myCryptCredentials); loger = new Loger(config.GetValue("directories", "logs"), Convert.ToInt32(config.GetValue("info", "log_buffer_size")), myCryptCredentials); telegramClient = new TelegramClient(config.GetValue("info", "key")); #endregion #region Connecting while (!telegramClient.Connect()) { Thread.Sleep(1000); } #endregion #region First Run if (config.GetValue("info", "first_run") == "true") { telegramClient.SendMessage("The instalation or update was successful 🤩 /version"); config.SetValue("info", "first_run", "false"); } else { telegramClient.SendMessage("ShadeControll is Running\n /login [password]"); } #endregion telegramClient.NewMessage += Client_NewMessage; while (true) { Thread.Sleep(1000); } }
private TelegramClient SpinUpClient(int dc) { object dcLock; lock (_spinUpLocks) { if (_spinUpLocks.ContainsKey(dc)) { dcLock = _spinUpLocks[dc]; } else { dcLock = new object(); _spinUpLocks[dc] = dcLock; } } lock (dcLock) { var client = GetClientInternal(dc); if (client != null) { return(client); } if (_config == null) { DebugPrint("Config is null. Unable to resolve DC information."); return(null); } var dcOption = _config.DcOptions.Cast <DcOption>().FirstOrDefault(x => x.Id == dc); if (dcOption == null) { DebugPrint("Unable to find DC for DC ID: " + dc); return(null); } var dcCached = DcDatabase.Get(dc); var transportConfig = new TcpClientTransportConfig(dcOption.IpAddress, (int)dcOption.Port); SharpMTProto.Authentication.AuthInfo authInfo; AuthExportedAuthorization exportedAuth = null; if (dcCached == null) { DebugPrint("Looks like we'll have to authenticate a new connection to: " + ObjectDumper.Dump(dcOption)); DebugPrint(">>>>>>>> Exporting auth..."); using (var clientDisposable = new TelegramClientDisposable(this)) { exportedAuth = (AuthExportedAuthorization)TelegramUtils.RunSynchronously(clientDisposable.Client.Methods.AuthExportAuthorizationAsync( new SharpTelegram.Schema.Layer18.AuthExportAuthorizationArgs { DcId = (uint)dc, })); } DebugPrint(">>>>>>> Got exported auth."); if (exportedAuth == null) { DebugPrint("Exported auth is null for some weird reason. DC ID: " + dc); return(null); } DebugPrint(">>>>>>> Fetching new authentication..."); authInfo = TelegramUtils.RunSynchronously(FetchNewAuthentication(transportConfig)); } else { authInfo = new SharpMTProto.Authentication.AuthInfo(dcCached.Key, BitConverter.ToUInt64(dcCached.Salt, 0)); } DebugPrint(">>>>>>>> Starting new client..."); var newClient = new TelegramClient(transportConfig, new ConnectionConfig(authInfo.AuthKey, authInfo.Salt), AppInfo); newClient.OnClosedInternally += (sender, e) => { DebugPrint("Removing connection to DC: " + dc); lock (_activeClients) { _activeClients.Remove(dc); } }; var result = TelegramUtils.RunSynchronously(newClient.Connect()); if (result != MTProtoConnectResult.Success) { DebugPrint("Failed to connect to DC: " + dc + ": " + result); return(null); } if (exportedAuth != null) { TelegramUtils.RunSynchronously(newClient.Methods.AuthImportAuthorizationAsync(new AuthImportAuthorizationArgs { Id = exportedAuth.Id, Bytes = exportedAuth.Bytes, })); } PingDelay(client, 60); lock (_activeClients) { _activeClients[dc] = newClient; } if (dcCached == null) { DcDatabase.Set(new TelegramDc { Dc = dc, Key = authInfo.AuthKey, Salt = BitConverter.GetBytes(authInfo.Salt), }); } return(newClient); } }
public static CodeRequest RequestCode(Service service, string number, string codeHash, TelegramSettings settings, bool reVerify) { try { service.DebugPrint("Requesting code..."); var transportConfig = new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo)) { TelegramUtils.RunSynchronously(client.Connect()); try { AuthSentCode result; if (reVerify) { result = TelegramUtils.RunSynchronously(client.Methods.AuthResendCodeAsync(new AuthResendCodeArgs { PhoneNumber = number, PhoneCodeHash = codeHash })) as AuthSentCode; } else { result = TelegramUtils.RunSynchronously(client.Methods.AuthSendCodeAsync(new AuthSendCodeArgs { PhoneNumber = number, ApiId = AppInfo.ApiId, ApiHash = "f8f2562579817ddcec76a8aae4cd86f6", })) as AuthSentCode; } return(new CodeRequest { Registered = result.PhoneRegistered != null ? true : false, CodeHash = result.PhoneCodeHash, CurrentType = GetAuthSentType(result.Type), NextType = GetAuthType(result.NextType) }); } catch (RpcErrorException ex) { Utils.DebugPrint(">>>> Send code failure " + ObjectDumper.Dump(ex)); var error = (RpcError)ex.Error; var cr = new CodeRequest(); var response = CodeRequest.Type.Failure; switch (error.ErrorCode) { case 400: cr.Response = CodeRequest.Type.NumberInvalid; break; case 303: var newDcId = GetDcId(error.ErrorMessage); cr.Response = CodeRequest.Type.Migrate; cr.MigrateId = newDcId; break; default: cr.Response = CodeRequest.Type.Failure; break; } return(cr); } return(new CodeRequest { Response = CodeRequest.Type.Success }); } } catch (Exception ex) { service.DebugPrint("Error in CodeRequest: " + ex); } return(null); }
public static CodeRegister RegisterCode(Service service, TelegramSettings settings, string number, string codeHash, string code, string firstName, string lastName, bool signIn) { try { service.DebugPrint("Registering code..."); var transportConfig = new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo)) { TelegramUtils.RunSynchronously(client.Connect()); try { IAuthAuthorization iresult = null; if (signIn) { iresult = TelegramUtils.RunSynchronously(client.Methods.AuthSignInAsync(new AuthSignInArgs { PhoneNumber = number, PhoneCodeHash = codeHash, PhoneCode = code, })); } else { iresult = TelegramUtils.RunSynchronously(client.Methods.AuthSignUpAsync(new AuthSignUpArgs { PhoneNumber = number, PhoneCodeHash = codeHash, PhoneCode = code, FirstName = firstName, LastName = lastName, })); } var result = (AuthAuthorization)iresult; Thread.Sleep(100); //wait until the other response comes in, if it has to. return(new CodeRegister { AccountId = (result.User as User).Id, Response = CodeRegister.Type.Success, }); } catch (RpcErrorException ex) { Utils.DebugPrint(">>>>>> Failed to sign in " + ex); var error = (RpcError)ex.Error; var cr = new CodeRegister(); switch (error.ErrorMessage) { case "PHONE_NUMBER_INVALID": cr.Response = CodeRegister.Type.NumberInvalid; break; case "PHONE_CODE_EMPTY": cr.Response = CodeRegister.Type.CodeEmpty; break; case "PHONE_CODE_EXPIRED": cr.Response = CodeRegister.Type.CodeExpired; break; case "PHONE_CODE_INVALID": cr.Response = CodeRegister.Type.CodeInvalid; break; case "FIRSTNAME_INVALID": cr.Response = CodeRegister.Type.FirstNameInvalid; break; case "LASTNAME_INVALID": cr.Response = CodeRegister.Type.LastNameInvalid; break; case "SESSION_PASSWORD_NEEDED": cr.Response = CodeRegister.Type.PasswordNeeded; GetPasswordDetails(client, cr); break; default: cr.Response = CodeRegister.Type.Failure; break; } return(cr); } } } catch (Exception ex) { service.DebugPrint("Error in CodeRequest: " + ex); } return(null); }
public async Task AuthUser() { await Client.Connect(); Hash = await Client.SendCodeRequest("375257307554"); }
public async void DoCommand(string[] args) { var command = args[0].ToLower(); switch (command) { case "decrypt": { try { var bytes = Convert.FromBase64String("+MW7Btpz31b0gt9WN5d5vAEAAAAVxLUcCwAAAMzG2AUAAAAAAQAAAA4xNDkuMTU0LjE3NS41MAC7AQAAzMbYBQEAAAABAAAAJzIwMDE6MGIyODpmMjNkOmYwMDE6MDAwMDowMDAwOjAwMDA6MDAwYbsBAADMxtgFAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTEAuwEAAMzG2AUBAAAAAgAAACcyMDAxOjA2N2M6MDRlODpmMDAyOjAwMDA6MDAwMDowMDAwOjAwMGG7AQAAzMbYBQAAAAADAAAADzE0OS4xNTQuMTc1LjEwMLsBAADMxtgFAQAAAAMAAAAnMjAwMTowYjI4OmYyM2Q6ZjAwMzowMDAwOjAwMDA6MDAwMDowMDBhuwEAAMzG2AUAAAAABAAAAA4xNDkuMTU0LjE2Ny45MQC7AQAAzMbYBQEAAAAEAAAAJzIwMDE6MDY3YzowNGU4OmYwMDQ6MDAwMDowMDAwOjAwMDA6MDAwYbsBAADMxtgFAgAAAAQAAAAPMTQ5LjE1NC4xNjUuMTIwuwEAAMzG2AUAAAAABQAAAA05MS4xMDguNTYuMTgwAAC7AQAAzMbYBQEAAAAFAAAAJzIwMDE6MGIyODpmMjNmOmYwMDU6MDAwMDowMDAwOjAwMDA6MDAwYbsBAADIAAAA6AMAAGQAAADA1AEAiBMAADB1AADgkwQAMHUAANwFAAAKAAAAYOoAAAIAAADIAAAAFcS1HAAAAAA="); TLRig.Default.PrepareSerializersForAllTLObjectsInAssembly(typeof(IMTProtoAsyncMethods).Assembly); using (var streamer = new TLStreamer(bytes)) { var newResult = TLRig.Default.Deserialize(streamer); int hi = 5; } } catch (Exception ex) { Console.WriteLine(ex); } } break; case "setup": { DebugPrint("Fetching nearest DC..."); var telegramSettings = new TelegramSettings(); var authInfo = await FetchNewAuthentication(DefaultTransportConfig); using (var client = new TelegramClient(DefaultTransportConfig, new ConnectionConfig(authInfo.AuthKey, authInfo.Salt), AppInfo)) { await client.Connect(); var nearestDcId = (NearestDc)await(client.Methods.HelpGetNearestDcAsync(new HelpGetNearestDcArgs { })); var config = (Config)await(client.Methods.HelpGetConfigAsync(new HelpGetConfigArgs { })); var dcOption = config.DcOptions.OfType <DcOption>().FirstOrDefault(x => x.Id == nearestDcId.NearestDcProperty); telegramSettings.NearestDcId = nearestDcId.NearestDcProperty; telegramSettings.NearestDcIp = dcOption.IpAddress; telegramSettings.NearestDcPort = (int)dcOption.Port; } DebugPrint("Generating authentication on nearest DC..."); var authInfo2 = await FetchNewAuthentication( new TcpClientTransportConfig(telegramSettings.NearestDcIp, telegramSettings.NearestDcPort)); telegramSettings.AuthKey = authInfo2.AuthKey; telegramSettings.Salt = authInfo2.Salt; SettingsManager.Save(this, telegramSettings); DebugPrint("Great! Ready for the service to start."); } break; case "sendcode": { var number = args[1]; var transportConfig = new TcpClientTransportConfig(_settings.NearestDcIp, _settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(_settings.AuthKey, _settings.Salt), AppInfo)) { await client.Connect(); var result = await client.Methods.AuthSendCodeAsync(new AuthSendCodeArgs { PhoneNumber = number, ApiId = AppInfo.ApiId, ApiHash = "f8f2562579817ddcec76a8aae4cd86f6", }); DebugPrint(ObjectDumper.Dump(result)); } } break; case "signin": { var number = args[1]; var hash = args[2]; var code = args[3]; var transportConfig = new TcpClientTransportConfig(_settings.NearestDcIp, _settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(_settings.AuthKey, _settings.Salt), AppInfo)) { await client.Connect(); var result = (AuthAuthorization)await client.Methods.AuthSignInAsync(new AuthSignInArgs { PhoneNumber = number, PhoneCodeHash = hash, PhoneCode = code, }); DebugPrint(ObjectDumper.Dump(result)); } } break; case "signup": { var number = args[1]; var hash = args[2]; var code = args[3]; var firstName = args[4]; var lastName = args[5]; var transportConfig = new TcpClientTransportConfig(_settings.NearestDcIp, _settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(_settings.AuthKey, _settings.Salt), AppInfo)) { await client.Connect(); var result = (AuthAuthorization)await client.Methods.AuthSignUpAsync(new AuthSignUpArgs { PhoneNumber = number, PhoneCodeHash = hash, PhoneCode = code, FirstName = firstName, LastName = lastName, }); DebugPrint(ObjectDumper.Dump(result)); } } break; case "getcontacts": { var result = await _fullClient.Methods.ContactsGetContactsAsync(new ContactsGetContactsArgs { Hash = string.Empty }); DebugPrint(ObjectDumper.Dump(result)); } break; // case "sendhello": // { // var contacts = (ContactsContacts)await _fullClient.Methods.ContactsGetContactsAsync(new ContactsGetContactsArgs // { // Hash = string.Empty // }); // var counter = 0; // Console.WriteLine("Pick a contact:"); // foreach (var icontact in contacts.Users) // { // var contact = icontact as UserContact; // if (contact == null) // continue; // Console.WriteLine(counter++ + ") " + contact.FirstName + " " + contact.LastName); // } // var choice = int.Parse(Console.ReadLine()); // var chosenContact = (UserContact)contacts.Users[choice]; // var result = await _fullClient.Methods.MessagesSendMessageAsync(new MessagesSendMessageArgs // { // Peer = new InputPeerContact // { // UserId = chosenContact.Id, // }, // Message = "Hello from Disa!", // RandomId = (ulong)Time.GetNowUnixTimestamp(), // }); // Console.WriteLine(ObjectDumper.Dump(result)); // } // break; } }
public async void DoCommand(string[] args) { var command = args[0].ToLower(); switch (command) { case "setup": { DebugPrint("Fetching nearest DC..."); var telegramSettings = new TelegramSettings(); var authInfo = await FetchNewAuthentication(DefaultTransportConfig); using (var client = new TelegramClient(DefaultTransportConfig, new ConnectionConfig(authInfo.AuthKey, authInfo.Salt), AppInfo)) { await client.Connect(); var nearestDcId = (NearestDc)await(client.Methods.HelpGetNearestDcAsync(new HelpGetNearestDcArgs { })); var config = (Config)await(client.Methods.HelpGetConfigAsync(new HelpGetConfigArgs { })); var dcOption = config.DcOptions.OfType <DcOption>().FirstOrDefault(x => x.Id == nearestDcId.NearestDcProperty); telegramSettings.NearestDcId = nearestDcId.NearestDcProperty; telegramSettings.NearestDcIp = dcOption.IpAddress; telegramSettings.NearestDcPort = (int)dcOption.Port; } DebugPrint("Generating authentication on nearest DC..."); var authInfo2 = await FetchNewAuthentication( new TcpClientTransportConfig(telegramSettings.NearestDcIp, telegramSettings.NearestDcPort)); telegramSettings.AuthKey = authInfo2.AuthKey; telegramSettings.Salt = authInfo2.Salt; SettingsManager.Save(this, telegramSettings); DebugPrint("Great! Ready for the service to start."); } break; case "sendcode": { var number = args[1]; var transportConfig = new TcpClientTransportConfig(_settings.NearestDcIp, _settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(_settings.AuthKey, _settings.Salt), AppInfo)) { await client.Connect(); var result = await client.Methods.AuthSendCodeAsync(new AuthSendCodeArgs { PhoneNumber = number, SmsType = 0, ApiId = AppInfo.ApiId, ApiHash = "f8f2562579817ddcec76a8aae4cd86f6", LangCode = PhoneBook.Language }); DebugPrint(ObjectDumper.Dump(result)); } } break; case "signin": { var number = args[1]; var hash = args[2]; var code = args[3]; var transportConfig = new TcpClientTransportConfig(_settings.NearestDcIp, _settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(_settings.AuthKey, _settings.Salt), AppInfo)) { await client.Connect(); var result = (AuthAuthorization)await client.Methods.AuthSignInAsync(new AuthSignInArgs { PhoneNumber = number, PhoneCodeHash = hash, PhoneCode = code, }); DebugPrint(ObjectDumper.Dump(result)); } } break; case "signup": { var number = args[1]; var hash = args[2]; var code = args[3]; var firstName = args[4]; var lastName = args[5]; var transportConfig = new TcpClientTransportConfig(_settings.NearestDcIp, _settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(_settings.AuthKey, _settings.Salt), AppInfo)) { await client.Connect(); var result = (AuthAuthorization)await client.Methods.AuthSignUpAsync(new AuthSignUpArgs { PhoneNumber = number, PhoneCodeHash = hash, PhoneCode = code, FirstName = firstName, LastName = lastName, }); DebugPrint(ObjectDumper.Dump(result)); } } break; case "getcontacts": { var result = await _fullClient.Methods.ContactsGetContactsAsync(new ContactsGetContactsArgs { Hash = string.Empty }); DebugPrint(ObjectDumper.Dump(result)); } break; case "sendhello": { var contacts = (ContactsContacts)await _fullClient.Methods.ContactsGetContactsAsync(new ContactsGetContactsArgs { Hash = string.Empty }); var counter = 0; Console.WriteLine("Pick a contact:"); foreach (var icontact in contacts.Users) { var contact = icontact as UserContact; if (contact == null) { continue; } Console.WriteLine(counter++ + ") " + contact.FirstName + " " + contact.LastName); } var choice = int.Parse(Console.ReadLine()); var chosenContact = (UserContact)contacts.Users[choice]; var result = await _fullClient.Methods.MessagesSendMessageAsync(new MessagesSendMessageArgs { Peer = new InputPeerContact { UserId = chosenContact.Id, }, Message = "Hello from Disa!", RandomId = (ulong)Time.GetNowUnixTimestamp(), }); Console.WriteLine(ObjectDumper.Dump(result)); } break; } }
public async Task GetFile() { // Get uploaded file from last message (ie: cat.jpg) var store = new FileSessionStore(); var client = new TelegramClient(store, "session", apiId, apiHash); await client.Connect(); Assert.IsTrue(client.IsUserAuthorized()); var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); Assert.IsNotNull(res); // Get last message var hist = await client.GetMessagesHistoryForContact(res.Value, 0, 1); Assert.AreEqual(1, hist.Count); var message = (MessageConstructor)hist[0]; Assert.AreEqual(typeof(MessageMediaPhotoConstructor), message.media.GetType()); var media = (MessageMediaPhotoConstructor)message.media; Assert.AreEqual(typeof(PhotoConstructor), media.photo.GetType()); var photo = (PhotoConstructor)media.photo; Assert.AreEqual(3, photo.sizes.Count); Assert.AreEqual(typeof(PhotoSizeConstructor), photo.sizes[2].GetType()); var photoSize = (PhotoSizeConstructor)photo.sizes[2]; Assert.AreEqual(typeof(FileLocationConstructor), photoSize.location.GetType()); var fileLocation = (FileLocationConstructor)photoSize.location; var file = await client.GetFile(fileLocation.volume_id, fileLocation.local_id, fileLocation.secret, 0, photoSize.size + 1024); storage_FileType type = file.Item1; byte[] bytes = file.Item2; string name = "../../data/get_file."; if (type.GetType() == typeof(Storage_fileJpegConstructor)) { name += "jpg"; } else if (type.GetType() == typeof(Storage_fileGifConstructor)) { name += "gif"; } else if (type.GetType() == typeof(Storage_filePngConstructor)) { name += "png"; } using (var fileStream = new FileStream(name, FileMode.Create, FileAccess.Write)) { fileStream.Write(bytes, 4, photoSize.size); // The first 4 bytes seem to be the error code } }
public static CodeRequest RequestCode(Service service, string number, string codeHash, TelegramSettings settings, bool call) { try { service.DebugPrint("Requesting code..."); var transportConfig = new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort); using (var client = new TelegramClient(transportConfig, new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo)) { TelegramUtils.RunSynchronously(client.Connect()); if (!call) { try { var result = TelegramUtils.RunSynchronously(client.Methods.AuthSendCodeAsync(new AuthSendCodeArgs { PhoneNumber = number, SmsType = 0, ApiId = AppInfo.ApiId, ApiHash = "f8f2562579817ddcec76a8aae4cd86f6", LangCode = PhoneBook.Language })) as AuthSentCode; return(new CodeRequest { Registered = result.PhoneRegistered, CodeHash = result.PhoneCodeHash, }); } catch (RpcErrorException ex) { var error = (RpcError)ex.Error; var cr = new CodeRequest(); var response = CodeRequest.Type.Failure; switch (error.ErrorCode) { case 400: cr.Response = CodeRequest.Type.NumberInvalid; break; default: cr.Response = CodeRequest.Type.Failure; break; } return(cr); } } var result2 = (bool)TelegramUtils.RunSynchronously(client.Methods.AuthSendCallAsync(new AuthSendCallArgs { PhoneNumber = number, PhoneCodeHash = codeHash, })); return(new CodeRequest { Response = result2 ? CodeRequest.Type.Success : CodeRequest.Type.Failure }); } } catch (Exception ex) { service.DebugPrint("Error in CodeRequest: " + ex); } return(null); }