예제 #1
0
        public async Task <Respuestas> CerrarSesion(string pathArchivo)
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                TeleSharp.TL.Auth.TLRequestLogOut x = new TeleSharp.TL.Auth.TLRequestLogOut();

                contexto = Iniciar();
                await contexto.ConnectAsync();

                var cerrado = await contexto.SendRequestAsync <Boolean>(x);

                JObject objeto = JObject.Parse(File.ReadAllText(pathArchivo.Replace("Registros.txt", "Sesion.txt")));
                info.Expiracion.Add(DateTime.Now.AddMilliseconds(objeto.Value <double>("SessionExpires")).ToString("MM/dd/yy H:mm:ss"));
                GuardarArchivo(pathArchivo, info);
                if (!contexto.IsUserAuthorized())
                {
                    respuesta.MESSAGE = "sesion cerrada exitosamente...";
                    respuesta.STATUS  = true;
                    contexto.Dispose();
                    File.Delete(HttpContext.Current.Server.MapPath("~/Resources/session/session.dat"));
                    File.Delete(HttpContext.Current.Server.MapPath("~/Resources/session/Registros.txt"));
                    File.Delete(HttpContext.Current.Server.MapPath("~/Resources/session/Sesion.txt"));
                }
                else
                {
                    respuesta.MESSAGE = "no se pudo cerrar sesion... probablemente ya se cerro anteriormente";
                    respuesta.STATUS  = false;
                }
                return(respuesta);
            }
            catch (Exception e)
            {
                TeleSharp.TL.Auth.TLRequestLogOut x = new TeleSharp.TL.Auth.TLRequestLogOut();
                var cerrado = await contexto.SendRequestAsync <Boolean>(x);

                JObject objeto = JObject.Parse(File.ReadAllText(pathArchivo.Replace("Registros.txt", "Sesion.txt")));
                info.Expiracion.Add(DateTime.Now.AddMilliseconds(objeto.Value <double>("SessionExpires")).ToString("MM/dd/yy H:mm:ss"));
                GuardarArchivo(pathArchivo, info);
                if (cerrado)
                {
                    respuesta.MESSAGE = "sesion cerrada exitosamente...";
                    respuesta.STATUS  = true;
                    contexto.Dispose();
                    File.Delete(HttpContext.Current.Server.MapPath("~/Resources/session/session.dat"));
                    File.Delete(HttpContext.Current.Server.MapPath("~/Resources/session/Registros.txt"));
                    File.Delete(HttpContext.Current.Server.MapPath("~/Resources/session/Sesion.txt"));
                }
                else
                {
                    respuesta.MESSAGE = "No se pudo cerrar sesión..." + e.Message;
                    respuesta.STATUS  = false;
                }
                return(respuesta);
            }
        }
예제 #2
0
        public async Task <Respuestas> VerificarSesion(string pathArchivo)
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                contexto = Iniciar();
                TLContacts contactos = new TLContacts();
                info = CargarDeArchivo <Informacion_sesion>(pathArchivo);
                if (info == null)
                {
                    info = new Informacion_sesion();
                }
                TLUser usuario = new TLUser();
                await contexto.ConnectAsync();

                if (contexto.IsUserAuthorized())
                {
                    contactos = await contexto.GetContactsAsync();

                    List <Usuarios> lista = new List <Usuarios>();
                    foreach (var item in contactos.Users.OfType <TLUser>())
                    {
                        var contacto = new Usuarios
                        {
                            Nombre   = item.FirstName + item.LastName,
                            Telefono = "+" + item.Phone
                        };
                        lista.Add(contacto);
                    }
                    info.contactos    = lista.OrderBy(x => x.Nombre).ToList();
                    respuesta.STATUS  = true;
                    respuesta.MESSAGE = "Reconexion exitosa exitosa...";
                    respuesta.data    = info;
                }
                else
                {
                    respuesta.STATUS  = false;
                    respuesta.data    = info;
                    respuesta.MESSAGE = "Reconexion fallida, intente autenticar de nuevo...";
                }
                JObject objeto = JObject.Parse(File.ReadAllText(pathArchivo.Replace("Registros.txt", "Sesion.txt")));
                info.Expiracion.Add(DateTime.Now.AddMilliseconds(objeto.Value <double>("SessionExpires")).ToString("MM/dd/yy H:mm:ss"));
                GuardarArchivo(pathArchivo, info);
                return(respuesta);
            }
            catch (Exception e)
            {
                respuesta.MESSAGE = "No se pudo hacer la verificacion..." + ((string.IsNullOrEmpty(e.InnerException.Message)) ? e.Message : e.InnerException.Message);
                if (respuesta.MESSAGE.ToUpper().Contains("AUTH_KEY_UNREGISTERED"))
                {
                    respuesta.MESSAGE = "Debe Autenticarse solicitando su código";
                }
                respuesta.STATUS = false;
                return(respuesta);
            }
        }
예제 #3
0
        /// <summary>
        /// Necesarios: NumeroDestino, Imagen, DescripcionImagen si se quiere
        /// </summary>
        /// <param name="nuevo"></param>
        /// <returns></returns>
        public async Task <Respuestas> EnviarImagen(Mensaje nuevo)
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                var numeroformateado = nuevo.NumeroDestino.StartsWith("+") ?
                                       nuevo.NumeroDestino.Substring(1) :
                                       nuevo.NumeroDestino;
                contexto = Iniciar();
                await contexto.ConnectAsync();

                var contactos = new TLContacts();
                contactos = await contexto.GetContactsAsync();

                var usuariodestino = contactos.Users.OfType <TLUser>().FirstOrDefault(x => x.Phone == numeroformateado);
                if (usuariodestino == null)
                {
                    respuesta.MESSAGE = "El numero" + numeroformateado + " no esta en la lista de sus contactos";
                    respuesta.STATUS  = false;
                    return(respuesta);
                }
                MemoryStream imagen = new MemoryStream(Convert.FromBase64String(nuevo.Imagen));
                //var im = Image.FromStream(imagen);
                //Image imagen_redimensionada = ResizeImage(im, 300, 60);
                //args.Image = imagen_redimensionada;
                StreamReader imageStream = new StreamReader(imagen); //verificar encoding

                var archivo = new TLInputFile();
                archivo = (TLInputFile)await contexto.UploadFile("Image" + (new Random().Next()) + ".jpg", imageStream);

                if (archivo != null)
                {
                    await contexto.SendUploadedPhoto(new TLInputPeerUser()
                    {
                        UserId = usuariodestino.Id
                    }, archivo, nuevo.DescripcionImagen);

                    respuesta.MESSAGE = "Imagen enviada a: " + numeroformateado;
                    respuesta.STATUS  = true;
                    return(respuesta);
                }
                else
                {
                    respuesta.MESSAGE = "No se pudo enviar imagen, ERROR INTERNO...";
                    respuesta.STATUS  = false;
                    return(respuesta);
                }
            }
            catch (Exception e)
            {
                respuesta.MESSAGE = " no se pudo enviar imagen..." + e.Message;
                respuesta.STATUS  = false;
                return(respuesta);
            }
        }
예제 #4
0
        public async Task <Respuestas> EnviarImagenACanal(Mensaje nuevo)
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                contexto = Iniciar();
                TLDialogs conversaciones = new TLDialogs();
                await contexto.ConnectAsync();

                conversaciones = (TLDialogs)await contexto.GetUserDialogsAsync();

                var grupodestino = conversaciones.Chats.OfType <TLChannel>().FirstOrDefault(x => x.Title.ToUpper() == nuevo.GrupoOCanalDestino.ToUpper());
                if (grupodestino == null)
                {
                    respuesta.STATUS  = false;
                    respuesta.MESSAGE = "No se pudo encontrar a usuario...";
                    return(respuesta);
                }


                MemoryStream imagen = new MemoryStream(Convert.FromBase64String(nuevo.Imagen));
                //var im = Image.FromStream(imagen);
                //Image imagen_redimensionada = ResizeImage(im, 300, 60);
                //args.Image = imagen_redimensionada;
                StreamReader imageStream = new StreamReader(imagen); //verificar encoding

                var archivo = new TLInputFile();
                archivo = (TLInputFile)await contexto.UploadFile("Image" + (new Random().Next()) + ".jpg", imageStream);

                if (archivo != null)
                {
                    await contexto.SendUploadedPhoto(new TLInputPeerChannel()
                    {
                        AccessHash = (long)grupodestino.AccessHash, ChannelId = grupodestino.Id
                    }, archivo, nuevo.DescripcionImagen);

                    respuesta.MESSAGE = "Imagen enviada a: " + grupodestino.Title;
                    respuesta.STATUS  = true;
                    return(respuesta);
                }
                else
                {
                    respuesta.MESSAGE = "No se pudo enviar imagen, ERROR INTERNO...";
                    respuesta.STATUS  = false;
                    return(respuesta);
                }
            }
            catch (Exception e)
            {
                respuesta.MESSAGE = " no se pudo enviar imagen..." + e.Message;
                respuesta.STATUS  = false;
                return(respuesta);
            }
        }
예제 #5
0
        public async Task <Respuestas> EnviarMensajeAGrupo(Mensaje nuevo, string pathArchivo)
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                contexto = Iniciar();
                TLDialogs conversaciones = new TLDialogs();
                await contexto.ConnectAsync();

                conversaciones = (TLDialogs)await contexto.GetUserDialogsAsync();

                var grupodestino = conversaciones.Chats.OfType <TLChat>().FirstOrDefault(x => x.Title.ToUpper() == nuevo.GrupoOCanalDestino.ToUpper());
                if (grupodestino == null)
                {
                    respuesta.STATUS  = false;
                    respuesta.MESSAGE = "No se pudo encontrar a usuario...";
                    return(respuesta);
                }
                bool completado = await contexto.SendTypingAsync(new TLInputPeerChat()
                {
                    ChatId = grupodestino.Id
                });

                await Task.Delay(3000);

                if (completado)
                {
                    await contexto.SendMessageAsync(new TLInputPeerChat()
                    {
                        ChatId = grupodestino.Id
                    }, nuevo.TextoContenido);
                }
                else
                {
                    respuesta.STATUS  = false;
                    respuesta.MESSAGE = "No se pudo sincronizar conexion con Telegram...";
                    return(respuesta);
                }
                respuesta.STATUS  = true;
                respuesta.MESSAGE = "Mensaje enviado a: " + grupodestino.Title;
                return(respuesta);
            }
            catch (Exception e)
            {
                respuesta.STATUS  = false;
                respuesta.MESSAGE = "No se pudo enviar mensaje: " + e.Message;
                return(respuesta);
            }
        }
예제 #6
0
        public async Task <Respuestas> AutenticarUsuario(string codigo, string filepath)
        {
            try
            {
                Respuestas respuesta = new Respuestas();
                contexto = Iniciar();
                TLContacts contactos = new TLContacts();
                info = CargarDeArchivo <Informacion_sesion>(filepath);
                info.Codigo_autenticacion = codigo;
                TLUser usuario = null;
                await contexto.ConnectAsync();

                if (contexto.IsConnected)
                {
                    usuario = await contexto.MakeAuthAsync(info.NumeroPropietario, info.Codigo_solicitud, info.Codigo_autenticacion);

                    if (usuario != null)
                    {
                        info.NombreUsuario = usuario.FirstName;
                        contactos          = await contexto.GetContactsAsync();

                        List <Usuarios> lista = new List <Usuarios>();
                        foreach (var item in contactos.Users.OfType <TLUser>())
                        {
                            var contacto = new Usuarios
                            {
                                Nombre   = item.FirstName + " " + item.LastName,
                                Telefono = "+" + item.Phone
                            };
                            lista.Add(contacto);
                        }
                        info.contactos = lista.OrderBy(x => x.Nombre).ToList();
                        JObject objeto = JObject.Parse(File.ReadAllText(filepath.Replace("Registros.txt", "Sesion.txt")));
                        info.Expiracion.Add(DateTime.Now.AddMilliseconds(objeto.Value <double>("SessionExpires")).ToString("MM/dd/yy H:mm:ss"));
                        GuardarArchivo(filepath, info);
                        respuesta.STATUS  = true;
                        respuesta.MESSAGE = "Autenticación exitosa...";
                        respuesta.data    = info;
                        return(respuesta);
                    }
                    else
                    {
                        respuesta.MESSAGE = "no se pudo obtener datos de usuario...";
                        respuesta.STATUS  = false;
                        return(respuesta);
                    }
                }
                else
                {
                    respuesta.MESSAGE = "ya se encuentra autenticado...";
                    respuesta.STATUS  = false;
                    contexto.Dispose();
                    return(respuesta);
                }
            }
            catch (Exception e)
            {
                return(new Respuestas()
                {
                    STATUS = false, MESSAGE = "No se pudo autenticar usuario" + e.InnerException.Message
                });
            }
        }
예제 #7
0
        public async Task <Respuestas> EnviarMensajeAUsuarioN(Mensaje nuevo, string pathArchivo, string nombreUsuario = "")
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                var numeroformateado = nuevo.NumeroDestino.StartsWith("+") ?
                                       nuevo.NumeroDestino.Substring(1) :
                                       nuevo.NumeroDestino;
                contexto = Iniciar();
                await contexto.ConnectAsync();

                var nvoContacto = new TLInputPhoneContact()
                {
                    Phone = numeroformateado, FirstName = ((string.IsNullOrEmpty(nuevo.NombreNuevoUsuario) ? "user" + numeroformateado : nuevo.NombreNuevoUsuario)), LastName = string.Empty
                };

                var req = new TLRequestImportContacts()
                {
                    Contacts = new TLVector <TLInputPhoneContact>()
                    {
                        nvoContacto
                    }
                };
                var resultado = await contexto.SendRequestAsync <TLImportedContacts>(req);

                //aqui carga 1ro infaliblemente el user_id 1ro... y es extraible...
                if (resultado.Users.Count > 0)
                {
                    var idnuevo        = resultado.Users.OfType <TLUser>().ElementAtOrDefault(0).Id;
                    var usuarioDestino = resultado.Users.OfType <TLUser>().FirstOrDefault(x => x.Id == idnuevo);
                    if (usuarioDestino == null)
                    {
                        respuesta.MESSAGE = "No se encontro usuario Destino, verifique que sea un número telefónico asociado a una cuenta Telegram...";
                        respuesta.STATUS  = false;
                        return(respuesta);
                    }
                    bool completado = false;
                    completado = await contexto.SendTypingAsync(new TLInputPeerUser()
                    {
                        UserId = usuarioDestino.Id
                    });

                    await Task.Delay(3000);

                    if (completado)
                    {
                        await contexto.SendMessageAsync(new TLInputPeerUser()
                        {
                            UserId = usuarioDestino.Id
                        }, nuevo.TextoContenido);
                    }
                    else
                    {
                        respuesta.MESSAGE = "No se pudo sincronizar con Telegram, intente nuevamente o pruebe reautenticando...";
                        respuesta.STATUS  = false;
                        return(respuesta);
                    }
                    respuesta.MESSAGE = "Mensaje enviado exitosamente a: " + numeroformateado;
                    respuesta.STATUS  = true;
                    return(respuesta);
                }
                else
                {
                    respuesta.MESSAGE = "Error interno, no se pudo enviar mensaje a nuevo usuario";
                    respuesta.STATUS  = false;
                    return(respuesta);
                }
            }
            catch (Exception e)
            {
                respuesta.MESSAGE = "No se pudo enviar mensaje error: " + e.Message;
                respuesta.STATUS  = false;
                return(respuesta);
            }
        }
예제 #8
0
        public async Task <Respuestas> EnviarImagenAUsuarioN(Mensaje nuevo)
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                var numeroformateado = nuevo.NumeroDestino.StartsWith("+") ?
                                       nuevo.NumeroDestino.Substring(1) :
                                       nuevo.NumeroDestino;
                contexto = Iniciar();
                await contexto.ConnectAsync();

                var nvoContacto = new TLInputPhoneContact()
                {
                    Phone = numeroformateado, FirstName = ((string.IsNullOrEmpty(nuevo.NombreNuevoUsuario) ? "user" + numeroformateado : nuevo.NombreNuevoUsuario)), LastName = string.Empty
                };
                var contactos = new List <TLInputPhoneContact>()
                {
                    nvoContacto
                };

                var req = new TLRequestImportContacts()
                {
                    Contacts = new TLVector <TLInputPhoneContact>()
                    {
                        nvoContacto
                    }
                };
                var resultado = await contexto.SendRequestAsync <TLImportedContacts>(req);

                //aqui carga 1ro infaliblemente el user_id 1ro... y es extraible...
                if (resultado.Users.Count > 0)
                {
                    var idnuevo        = resultado.Users.OfType <TLUser>().ElementAtOrDefault(0).Id;
                    var usuarioDestino = resultado.Users.OfType <TLUser>().FirstOrDefault(x => x.Id == idnuevo);
                    if (usuarioDestino == null)
                    {
                        respuesta.MESSAGE = "No se encontro usuario Destino, verifique que sea un número telefónico asociado a una cuenta Telegram...";
                        respuesta.STATUS  = false;
                        return(respuesta);
                    }


                    MemoryStream imagen = new MemoryStream(Convert.FromBase64String(nuevo.Imagen));
                    //var im = Image.FromStream(imagen);
                    //Image imagen_redimensionada = ResizeImage(im, 300, 60);
                    //args.Image = imagen_redimensionada;
                    StreamReader imageStream = new StreamReader(imagen); //verificar encoding

                    var archivo = new TLInputFile();
                    archivo = (TLInputFile)await contexto.UploadFile("Image" + (new Random().Next()) + ".jpg", imageStream);

                    if (archivo != null)
                    {
                        await contexto.SendUploadedPhoto(new TLInputPeerUser()
                        {
                            UserId = usuarioDestino.Id
                        }, archivo, nuevo.DescripcionImagen);

                        respuesta.MESSAGE = "Imagen enviada a: " + numeroformateado;
                        respuesta.STATUS  = true;
                        return(respuesta);
                    }
                    else
                    {
                        respuesta.MESSAGE = "No se pudo enviar imagen, ERROR INTERNO...";
                        respuesta.STATUS  = false;
                        return(respuesta);
                    }
                }
                else
                {
                    respuesta.MESSAGE = "Error interno, no se pudo enviar mensaje a nuevo usuario";
                    respuesta.STATUS  = false;
                    return(respuesta);
                }
            }
            catch (Exception e)
            {
                respuesta.MESSAGE = "No se pudo enviar mensaje error: " + e.Message;
                respuesta.STATUS  = false;
                return(respuesta);
            }
        }
예제 #9
0
        public async Task <Respuestas> EnviarMensaje(Mensaje nuevo, string pathArchivo)
        {
            Respuestas respuesta = new Respuestas();

            try
            {
                contexto = Iniciar();
                TLContacts contactos = new TLContacts();
                await contexto.ConnectAsync();

                contactos = await contexto.GetContactsAsync();

                List <Usuarios> lista = new List <Usuarios>();
                foreach (var item in contactos.Users.OfType <TLUser>())
                {
                    var contacto = new Usuarios
                    {
                        Nombre   = item.FirstName + " " + item.LastName,
                        Telefono = "+" + item.Phone
                    };
                    lista.Add(contacto);
                }
                info.contactos = lista.OrderBy(x => x.Nombre).ToList();
                var numeroformateado = nuevo.NumeroDestino.StartsWith("+") ?
                                       nuevo.NumeroDestino.Substring(1) :
                                       nuevo.NumeroDestino;
                var usuariodestino = contactos.Users.OfType <TLUser>().FirstOrDefault(x => x.Phone == numeroformateado);
                if (usuariodestino == null)
                {
                    respuesta.STATUS  = false;
                    respuesta.MESSAGE = "No se pudo encontrar a usuario...";
                    return(respuesta);
                }
                bool completado = await contexto.SendTypingAsync(new TLInputPeerUser()
                {
                    UserId = usuariodestino.Id
                });

                await Task.Delay(3000);

                if (completado)
                {
                    await contexto.SendMessageAsync(new TLInputPeerUser()
                    {
                        UserId = usuariodestino.Id
                    }, nuevo.TextoContenido);
                }
                else
                {
                    respuesta.STATUS  = false;
                    respuesta.MESSAGE = "No se pudo sincronizar conexion con Telegram...";
                    return(respuesta);
                }
                respuesta.STATUS  = true;
                respuesta.MESSAGE = "Mensaje enviado a: " + usuariodestino.FirstName;
                return(respuesta);
            }
            catch (Exception e)
            {
                respuesta.MESSAGE = "no se pudo enviar mensaje: " + e.Message;
                respuesta.STATUS  = false;
                return(respuesta);
            }
        }