Example #1
0
        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");
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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();
            }
        }
Example #5
0
        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);
        }
Example #6
0
 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);
     }
 }
Example #7
0
        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);
        }
Example #8
0
 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;
     }
 }
Example #9
0
 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);
     }
 }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
            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());
                }
            }
Example #13
0
        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);
            }
        }
Example #15
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
        public async Task AuthUser()
        {
            await Client.Connect();

            Hash = await Client.SendCodeRequest("375257307554");
        }
Example #18
0
        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;
            }
        }
Example #19
0
        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;
            }
        }
Example #20
0
        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
            }
        }
Example #21
0
        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);
        }