Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: 79137913 en 29 Julio 2014, 23:49 pm



Título: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 29 Julio 2014, 23:49 pm
HOLA!!!

Antes que nada Gracias a Shiroko por desarrollar el api junto a venom0ux, y tambien a fermino por salvarme algunas dudas y por darme la idea de empezar a implementar WhatsAPI.

En este post no se explicara que es WhatsAPI (https://github.com/venomous0x/WhatsAPI), aclaro que no se usara WhatsAPI (https://github.com/venomous0x/WhatsAPI) sino WhatsAPI.Net (https://github.com/perezdidac/WhatsAPINet), tampoco se enseñara paso a paso y menos se daran indicaciones sobre el uso del lenguaje VB.Net.

Que vamos a necesitar:
Si es posible el ultimo VisualStudio (http://www.visualstudio.com/es-es/visual-studio-homepage-vs.aspx), sino cualquier otro servira.
WART (https://github.com/shirioko/WART) (descargar el Exe)
WhatsAppAPI.dll (http://www.mediafire.com/download/2zq48ba272yju7y/WhatsAppApi.rar) (Les dejo la ultima version a la fecha subida a Mediafire, pero intenten bajar una que este actualizada o compilenla del source en github (https://github.com/perezdidac/WhatsAPINet)).
Y por ultimo de ser posible una linea de telefono en la que no utilicemos WhatsApp (asi no se nos complican las cosas, el celular de la abuela servirá).

Empezamos:

Abrimos el WART, Colocamos nuestro numero(Sin + y sin ceros al principio, por ejemplo un numero para argentina seria 5492235352914 o 542235352914 [Nunca supe la diferencia entre con nueve y sin nueve]) y apretamos el boton Request Code
(http://i.imgur.com/3KZEsmR.png)
Una vez hecho esto te llegara un SMS o una llamada dandote un codigo, Colocalo en Code y presiona Confirm Code, luego nos dara una contraseña. (en caso de perder la contraseña, como ya estan registrados solo tienen que poner el numero y Clickear en Check Existing.)

La contraseña que nos dio la tenemos que copiar y guardar en un archivo de texto llamado "WAPASS.txt" en la carpeta donde se ejecute nuestra aplicacion, para testeos o debug, obviamente sera en "ruta_al_proyecto/bin/debug/WAPASS.txt".

Despues vamos a hacer un proyecto nuevo y vamos a agregar un modulo "mWhatsApp".
Código
  1. Module mWhatsApp
  2.    Dim WAPass As String
  3.    Const WANum As String = "5492236685519"
  4.    Dim wa As WhatsApp
  5.    Public Sub InitWA(ByVal NickName As String, Optional ByVal debug As Boolean = False)
  6.        WAPass = File.ReadAllText(My.Application.Info.DirectoryPath & "\WAPASS.txt")
  7.        wa = New WhatsApp(WANum, WAPass, NickName, debug)
  8.        AddHandler wa.OnLoginSuccess, AddressOf wa_OnLoginSuccess
  9.        AddHandler wa.OnLoginFailed, AddressOf wa_OnLoginFailed
  10.        AddHandler wa.OnGetMessage, AddressOf wa_OnGetMessage
  11.        AddHandler wa.OnGetMessageReceivedClient, AddressOf wa_OnGetMessageReceivedClient
  12.        AddHandler wa.OnGetMessageReceivedServer, AddressOf wa_OnGetMessageReceivedServer
  13.        AddHandler wa.OnNotificationPicture, AddressOf wa_OnNotificationPicture
  14.        AddHandler wa.OnGetPresence, AddressOf wa_OnGetPresence
  15.        AddHandler wa.OnGetGroupParticipants, AddressOf wa_OnGetGroupParticipants
  16.        AddHandler wa.OnGetLastSeen, AddressOf wa_OnGetLastSeen
  17.        AddHandler wa.OnGetTyping, AddressOf wa_OnGetTyping
  18.        AddHandler wa.OnGetPaused, AddressOf wa_OnGetPaused
  19.        AddHandler wa.OnGetMessageImage, AddressOf wa_OnGetMessageImage
  20.        AddHandler wa.OnGetMessageAudio, AddressOf wa_OnGetMessageAudio
  21.        AddHandler wa.OnGetMessageVideo, AddressOf wa_OnGetMessageVideo
  22.        AddHandler wa.OnGetMessageLocation, AddressOf wa_OnGetMessageLocation
  23.        AddHandler wa.OnGetMessageVcard, AddressOf wa_OnGetMessageVcard
  24.        AddHandler wa.OnGetPhoto, AddressOf wa_OnGetPhoto
  25.        AddHandler wa.OnGetPhotoPreview, AddressOf wa_OnGetPhotoPreview
  26.        AddHandler wa.OnGetGroups, AddressOf wa_OnGetGroups
  27.        AddHandler wa.OnGetSyncResult, AddressOf wa_OnGetSyncResult
  28.        AddHandler wa.OnGetStatus, AddressOf wa_OnGetStatus
  29.        AddHandler wa.OnGetPrivacySettings, AddressOf wa_OnGetPrivacySettings
  30.        AddHandler WhatsAppApi.Helper.DebugAdapter.Instance.OnPrintDebug, AddressOf Instance_OnPrintDebug
  31.        wa.Connect()
  32.        Dim datFile As String = getDatFileName(WANum)
  33.        Dim nextChallenge() As Byte
  34.        If (File.Exists(datFile)) Then
  35.            Dim foo As String = File.ReadAllText(datFile)
  36.            nextChallenge = Convert.FromBase64String(foo)
  37.        End If
  38.        wa.Login(nextChallenge)
  39.        ProcessChat(wa)
  40.    End Sub
  41.    Public Function SendWA(ByVal MSG As String, Num As String) As Boolean
  42.        Dim usrMan As New WhatsUserManager()
  43.        Dim tmpUser = usrMan.CreateUser(Num, "User")
  44.        wa.SendMessage(Num, MSG)
  45.  
  46.  
  47.        Return True
  48.    End Function
  49.    Public Sub Instance_OnPrintDebug(value As Object)
  50.        Debug.Print(value)
  51.    End Sub
  52.    Public Sub wa_OnGetPrivacySettings(settings As Dictionary(Of WhatsApp.VisibilityCategory, WhatsApp.VisibilitySetting))
  53.  
  54.    End Sub
  55.    Public Sub wa_OnGetStatus(form As String, type As String, name As String, status As String)
  56.  
  57.    End Sub
  58.    Public Function getDatFileName(pn As String) As String
  59.        Dim filename As String = String.Format("{0}.next.dat", pn)
  60.        Return Path.Combine(Directory.GetCurrentDirectory(), filename)
  61.    End Function
  62.    Public Sub wa_OnGetSyncResult(index As Integer, sid As String, existingUsers As Dictionary(Of String, String), failedNumbers As String())
  63.  
  64.    End Sub
  65.    Public Sub wa_OnGetGroups(groups As WaGroupInfo())
  66.  
  67.    End Sub
  68.    Public Sub wa_OnGetPhotoPreview(from As String, id As String, data() As Byte)
  69.        File.WriteAllBytes(String.Format("preview_{0}.jpg", from), data)
  70.    End Sub
  71.    Public Sub wa_OnGetPhoto(from As String, id As String, data() As Byte)
  72.        File.WriteAllBytes(String.Format("{0}.jpg", from), Data)
  73.    End Sub
  74.    Public Sub wa_OnGetMessageVcard(from As String, id As String, name As String, data() As Byte)
  75.        File.WriteAllBytes(String.Format("{0}.vcf", name), Data)
  76.    End Sub
  77.    Public Sub wa_OnGetMessageLocation(from As String, id As String, lon As Double, lat As Double, url As String, name As String, preview() As Byte)
  78.        File.WriteAllBytes(String.Format("{0}{1end sub.jpg", lat, lon), preview)
  79.    End Sub
  80.    Public Sub wa_OnGetMessageVideo(from As String, id As String, filename As String, fileSize As Integer, url As String, preview() As Byte)
  81.        OnGetMedia(filename, url, preview)
  82.    End Sub
  83.    Public Sub OnGetMedia(file As String, url As String, data() As Byte)
  84.        My.Computer.FileSystem.WriteAllBytes(String.Format("preview_{0}.jpg", file), data, False)
  85.        Dim WA_WC As New WebClient
  86.        WA_WC.DownloadFileAsync(New Uri(url), file, 0)
  87.    End Sub
  88.    Public Sub wa_OnGetMessageAudio(from As String, id As String, filename As String, filesize As Integer, url As String, preview() As Byte)
  89.        OnGetMedia(filename, url, preview)
  90.    End Sub
  91.    Public Sub wa_OnGetMessageImage(from As String, id As String, filename As String, size As Integer, url As String, preview() As Byte)
  92.        OnGetMedia(filename, url, preview)
  93.    End Sub
  94.    Public Sub wa_OnGetPaused(from As String)
  95.  
  96.    End Sub
  97.    Public Sub wa_OnGetTyping(from As String)
  98.  
  99.    End Sub
  100.    Public Sub wa_OnGetLastSeen(from As String, lastseen As DateTime)
  101.  
  102.    End Sub
  103.    Public Sub wa_OnGetMessageReceivedServer(from As String, id As String)
  104.  
  105.    End Sub
  106.    Public Sub wa_OnGetMessageReceivedClient(from As String, id As String)
  107.  
  108.    End Sub
  109.    Public Sub wa_OnGetGroupParticipants(gjid As String, jids() As String)
  110.  
  111.    End Sub
  112.    Public Sub wa_OnGetPresence(from As String, type As String)
  113.  
  114.    End Sub
  115.    Public Sub wa_OnNotificationPicture(type As String, jid As String, id As String)
  116.  
  117.    End Sub
  118.    Public Sub wa_OnGetMessage(node As ProtocolTreeNode, from As String, id As String, name As String, message As String, receipt_sent As Boolean)
  119.        Dim Number As String = Split(from, "@")(0)
  120.  
  121.    End Sub
  122.    Private Sub wa_OnLoginFailed(data As String)
  123.        End
  124.    End Sub
  125.    Private Sub wa_OnLoginSuccess(phoneNumber As String, data() As Byte)
  126.        ' next password
  127.        Dim sdata As String = Convert.ToBase64String(data)
  128.        My.Computer.FileSystem.WriteAllText(getDatFileName(WANum), sdata, False)
  129.    End Sub
  130.    Private Sub ProcessChat(wa As WhatsApp)
  131.        Dim thRecv = New Thread(AddressOf ProcessChatT) : thRecv.IsBackground = True
  132.        thRecv.Start()
  133.    End Sub
  134.    Sub ProcessChatT(t)
  135.        Try
  136.            While wa IsNot Nothing
  137.                wa.PollMessages()
  138.                Thread.Sleep(100)
  139.                Continue While
  140.            End While
  141.        Catch generatedExceptionName As ThreadAbortException
  142.        End Try
  143.  
  144.    End Sub
  145. End Module

Una vez agregado este codigo vamos a Agregar codigo al form principal para terminar con este ejemplito. (Mi from se llama Principal, ojo)
Código
  1.    Private Sub Principal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2.        InitWA("Tutorial By 79137913")
  3.        Call SendWA("Prueba 1", "ACAPONEELNUMEROALQUEQUIERASMANDARELMENSAJE")
  4.    End Sub

En InitWA pones el Nick que quieras y en SendWa pones el mensaje seguido del numero al que quieras enviar un mensaje

Nota: para que no sea spam ambas personas deben estar en sus respectivas listas de contactos, por ende agrega al sistema a tu lista de contactos antes de enviar mensajes para que no se bloquee el usuario.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: jalvear1 en 30 Octubre 2014, 22:19 pm
Amigo tengo una pregunta, quiero saber caunto tiempo de duracion tiene esta aplicacion ya que a los clientes de mi empresa les envio un mensaje diario , de sus ingresos segun el software que manejann con nosotros, son casi 100 clientes yo use ese codigo para hacer un programa de envio masivo, ahi algun problema, nos puede bloquear whatsapp el envio de mensajes , puede que en algun momento el codigo no siga sirviendo, o no voy a tener problemas ya que me sirvio de mucho.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: joel_del en 30 Octubre 2014, 22:49 pm
Una pregunta, no hay peligro de que Whatsapp me bloquee mi aplicación y no me deje volver a enviar mensajes, no has escuchado casos? Gracias por responder


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: engel lex en 30 Octubre 2014, 23:04 pm
que tal si revisan los términos de servicio de whatssapp? jalvear1 probablemente el departamento legal te pueda ayudar con eso y puedas respondernos aquí esa duda...


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 31 Octubre 2014, 13:36 pm
HOLA!!!

Jalvear1, te invito a la proxima que uses los codigos de aqui primero agradecer y luego en el caso que tengas un prolema ahi preguntar.

Si, lo mas probable es que haya bloqueado el numero por spam, eso pasa cuando le envias mensajes a numeros que no te tienen agendado, tenes que hacer que todos tus clientes agenden el numero, sino no podes.

El numero que tenes ya no sirve, vas a tener que utilizar otro.

En cuanto a lo que dice Joel_del , no no bloquean la aplicacion, no tienen manera de identificarla, lo que bloquean es el numero.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: jalvear1 en 31 Octubre 2014, 14:33 pm
amigo que pena contigo ,  :-X muchas gracias por el aporte me ha sido de mucha ayuda disculpame por no agradecer. :D


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: pachoduran en 25 Noviembre 2014, 01:54 am
Hola, muy interesante este tema, hice la prueba y me ha funcionado muy bien, he tratado de enviar un mensaje con una foto y no he podido, podrian ayudarme?

Modifique la funcion SendWA del ejemplo para poder enviar imagenes:

Código
  1.    Public Function SendWA(ByVal MSG As String, ByVal Num As String) As Boolean
  2.        Dim usrMan As New WhatsUserManager()
  3.        Dim imgSegnature As Image
  4.  
  5.        Dim tmpUser = usrMan.CreateUser(Num, "User")
  6.        imgSegnature = Image.FromFile("p.jpg")
  7.        Dim ms = New MemoryStream()
  8.        imgSegnature.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg) ' Use appropriate format here
  9.        Dim bytes = ms.ToArray()
  10.  
  11.        wa.SendMessageImage(Num, bytes, ApiBase.ImageType.JPEG)
  12.  
  13.        Return True
  14.    End Function

Siempre se bloquea y nunca envia la imagen.

Muchas gracias. Dios los bendiga


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: laercio.tersi en 8 Enero 2015, 22:00 pm
Amigos não consegui fazer funcionar

estou usando o visual studio 2012

Código
  1.  InitWA = coloquei o meu usuario
  2.  Call SendWA("mensagem para enviar", "numero para envio")
  3.  
  4.    Const WANum As String = "aqui não sei oque coloco" ' muito obrigado pela ajuda



[MOD]: Estás en una comunidad Española, porfavor, intenta utilizar el traductor de Google la próxima vez.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 9 Enero 2015, 17:32 pm
HOLA!!!

Utitliza vb2013 por favor

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: findesemana en 12 Febrero 2015, 03:53 am
Hola! Gracias por el tutorial! pero necesito un poco de ayuda..
He seguido los pasos pero me daba varios errores. Entonces empece a importar librerias hasta que me quedo un solo error en la linea:
   AddHandler wa.OnGetGroups, AddressOf wa_OnGetGroups
Pregunto: No tendras un ejemplo funcionando que puedas subir?
DE verdad me interesa el tema.. Gracias por tu ayuda de antemano..
PD estoy usando vb 2013

por favor por favor por favor  :huh:


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: chesteralex en 14 Febrero 2015, 00:46 am
Buen día,

Antes que nada agradecer las maravillosas aportaciones que hacen en el foro.

Tengo una duda con respecto al codigo que se esta agregando en este ejemplo, yo he seguido todo los pasos pero me nunca entra en la condicion:

Código
  1. wa.Connect()
  2.        Dim datFile As String = getDatFileName(WANum)
  3.        Dim nextChallenge() As Byte
  4.        If (File.Exists(datFile)) Then
  5.            Dim foo As String = File.ReadAllText(datFile)
  6.            nextChallenge = Convert.FromBase64String(foo)
  7.        End If

No me encuentra el archivo y nunca se crea el .dat que dice según el debugger.
Estoy haciendo algo mal?, me falta algún paso?

Agradezco sus comentarios.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: ChuchoVega en 27 Febrero 2015, 03:52 am
Hola! Gracias por el tutorial! pero necesito un poco de ayuda..
He seguido los pasos pero me daba varios errores. Entonces empece a importar librerias hasta que me quedo un solo error en la linea:
   AddHandler wa.OnGetGroups, AddressOf wa_OnGetGroups
Pregunto: No tendras un ejemplo funcionando que puedas subir?
DE verdad me interesa el tema.. Gracias por tu ayuda de antemano..
PD estoy usando vb 2013

por favor por favor por favor  :huh:

Hola! findesemana, una pregunta, cuales fueron las librerías que empezaste a importar? a mi aun me sigue marcando algunos errores, si me pudieras decir cuales fueron las librerías que le agregaste te lo agradecería mucho.
!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: Eleкtro en 27 Febrero 2015, 07:15 am
Odio este tipo de APIs desarrolladas para .Net sin ningún tipo de documentación .Net (XML), simplemente llegan a dificultar el majeo manejo hasta imposibilitar la comprensión y la utilización de los miembros definidos en el interior de la librería debido a un desarrollo inapropiado/descuidado al no existir documentación visualizable ni accesible en tiempo de diseño (mediante IntelliSense, Object Inspector) para una plataforma en donde hay que cuidar ciertos detalles esenciales si publicas algo cómo esto para el público.

Tras descargarme el código fuente de la última versión de WhatsAppi.Net, desarrollado en C#, y analizarlo muy, muy por encima, he podido comprobar que consta de 508 miembros públicos sin documentar, la mayoría de las classes definidas (95%) usan muchos usings de NameSpaces que no se utilizan (es decir, son totalmente innecesarios), hay un total de 427 conflictos de convenciones de nombres que no se han corregido, hay varios formatos de Strings con cantidades incorrectas de parámetros (ej: String.Format("{0}", 0, 1) ), absolutamente TODOS los event-handlers están incorrectamente definidos (no utilizan la firma 'sender, e'), y lo más importante de todo, uno de sus miembros tiene una considerable fuga de recursos ya que no libera las instancias disposables de los miembros definidos en la Class 'KeyStream', todo esto entre otro tipo de fallos generales que se pueden comprobar con un análisis básico de código en VS.

Sinceramente, yo personalmente no recomiendo la utilización de ninguna librería que esté desarrollada de una manera tan descuidada, a menos que usar esa librería sea el úncio recurso viable que exista para llevar a cabo la tarea requerida (cosa que dezconozco).


Pero debido a la gran espectación que ha causado este tema ...este post (y también porque estaba un poco aburrido xD), me he tomado el tiempo de analizar, corregir, y actualizar el snippet de ejemplo que compartió el compañero @79137913 en el primer post, puesto que a muchos usuarios les ha sido dificil comprender la integración del código, o le han dado errores de algún tipo al intentar integrarlo.

Aunque por otro lado, debo confesar que yo NO utilizo WhatsApp, así que las mejoras/adaptaciones/modificaciones que he realizado en el código original, son modificaciones que he llevado a cabo bastante 'a ciegas' ya que no podré testear los resultados en un dispositivo.





Primero, antes de mostrar la actualización del código, comentaré algunos fallos (que considero bastante graves) que ustedes deberán tener en cuenta si utilizan el código original que compartió el amigo @79137913 sin hacerle ninguna modificación adicional.

Por orden de importancia/gravedad:

1.
Código
  1.    Public Sub InitWA(ByVal NickName As String, Optional ByVal debug As Boolean = False)
  2.       WAPass = File.ReadAllText(My.Application.Info.DirectoryPath & "\WAPASS.txt")
  3.       wa = New WhatsApp(WANum, WAPass, NickName, debug)
  4.       AddHandler wa.OnLoginSuccess, AddressOf wa_OnLoginSuccess
  5.       AddHandler wa.OnLoginFailed, AddressOf wa_OnLoginFailed
  6.       AddHandler wa.OnGetMessage, AddressOf wa_OnGetMessage
  7.       AddHandler wa.OnGetMessageReceivedClient, AddressOf wa_OnGetMessageReceivedClient
  8.       AddHandler wa.OnGetMessageReceivedServer, AddressOf wa_OnGetMessageReceivedServer
  9.       AddHandler wa.OnNotificationPicture, AddressOf wa_OnNotificationPicture
  10.       AddHandler wa.OnGetPresence, AddressOf wa_OnGetPresence
  11.       AddHandler wa.OnGetGroupParticipants, AddressOf wa_OnGetGroupParticipants
  12.       AddHandler wa.OnGetLastSeen, AddressOf wa_OnGetLastSeen
  13.       AddHandler wa.OnGetTyping, AddressOf wa_OnGetTyping
  14.       AddHandler wa.OnGetPaused, AddressOf wa_OnGetPaused
  15.       AddHandler wa.OnGetMessageImage, AddressOf wa_OnGetMessageImage
  16.       AddHandler wa.OnGetMessageAudio, AddressOf wa_OnGetMessageAudio
  17.       AddHandler wa.OnGetMessageVideo, AddressOf wa_OnGetMessageVideo
  18.       AddHandler wa.OnGetMessageLocation, AddressOf wa_OnGetMessageLocation
  19.       AddHandler wa.OnGetMessageVcard, AddressOf wa_OnGetMessageVcard
  20.       AddHandler wa.OnGetPhoto, AddressOf wa_OnGetPhoto
  21.       AddHandler wa.OnGetPhotoPreview, AddressOf wa_OnGetPhotoPreview
  22.       AddHandler wa.OnGetGroups, AddressOf wa_OnGetGroups
  23.       AddHandler wa.OnGetSyncResult, AddressOf wa_OnGetSyncResult
  24.       AddHandler wa.OnGetStatus, AddressOf wa_OnGetStatus
  25.       AddHandler wa.OnGetPrivacySettings, AddressOf wa_OnGetPrivacySettings
  26.       AddHandler WhatsAppApi.Helper.DebugAdapter.Instance.OnPrintDebug, AddressOf Instance_OnPrintDebug
  27.       wa.Connect()
  28.       Dim datFile As String = getDatFileName(WANum)
  29.       Dim nextChallenge() As Byte
  30.       If (File.Exists(datFile)) Then
  31.           Dim foo As String = File.ReadAllText(datFile)
  32.           nextChallenge = Convert.FromBase64String(foo)
  33.       End If
  34.       wa.Login(nextChallenge)
  35.       ProcessChat(wa)
  36.   End Sub

Por cada vez que se llame al método 'InitWA', éste AÑADIRÁ (que no reemplazará) los listeners de los eventos especificados en el código, ya que en ningún momento se está comprobando si un evento está ya siendo escuchado, ni tampoco se están eliminando handlers anteriores con el uso de la declaración 'RemoveHandler', esto ocasionaría un comportamiento anormal en en los event-handlers definidos en el código.

Hay que tenerlo MUY en cuenta por ejemplo al desconectar (wa.Disconnect), y volver a llamar al método 'InitWa', por cada vez que se hiciera eso...


2.
Citar
Código
  1.    Public Sub OnGetMedia(file As String, url As String, data() As Byte)
  2.       My.Computer.FileSystem.WriteAllBytes(String.Format("preview_{0}.jpg", file), data, False)
  3.       Dim WA_WC As New WebClient
  4.       WA_WC.DownloadFileAsync(New Uri(url), file, 0)
  5.   End Sub

La aplicación que utilice este método, incrementará el consumo RAM indefinidamente según la cantidad de veces que se instancie el WebClient, ya que la instancia del WebClient jamás se llega a liberar.


3.
Citar
Código
  1.    Public Function SendWA(ByVal MSG As String, Num As String) As Boolean
  2.       Dim usrMan As New WhatsUserManager()
  3.       Dim tmpUser = usrMan.CreateUser(Num, "User")
  4.       wa.SendMessage(Num, MSG)
  5.       Return True
  6.   End Function

La función realmente no cumple ninguna utilidad, ya que en cualquier circunstancia siempre devolverá verdadero.

Lo que habría que tratar de devolver es Verdadero si el mensaje se envia, y Falso en caso contrario,
además, quizas ni siquiera haya que fijarse en devolver True o False, ya que la función "WhatsAppApi.SendMessage" devuelve una cadena de texto cuyo contenido desconozco, pero quizás contnega detalles sobre la validación de la operación ("Succes" o "Fail"), no lo se, ya que no puedo comprobarlo sin WhatsApp (y no voy a hacerle Reflection al ensamblado solo para descubrir que valor de texto envia dicha función).


4.
Citar
Código
  1.    Public Sub wa_OnGetMessageLocation(from As String, id As String, lon As Double, lat As Double, url As String, name As String, preview() As Byte)
  2.       File.WriteAllBytes(String.Format("{0}{1end sub.jpg", lat, lon), preview)
  3.   End Sub

El formato es erroneo, ya que el segundo parámetro está abierto, por lo tanto la longitud (lon) no se tendrá en cuenta en el formato del texto.





El código original estaba bastante vb6-estilizado, aunque es algo comprensible viniendo de un programador experimentado en VB6, por otro lado yo no acepto el uso de los wrappers de VB6 en .Net, y la estructurización del código era un poco "arreu" (descuidado) cómo decimos en mi tierra.

Por lo demás, he respetado mayormente el funcionamiento y la sintaxis del snippet original de @79137913.

¿Qué es lo que he hecho?
  • Corregir los errores mencionados arriba.
  • Corregir todas las convenciones de nombres en los miembros del código original (métodos y parámetros mal nombrados) para facilitarle la tarea de búsqueda/identificación al compiler.
      También he corregido aquellas definiciones de nombres que podían resultar en ambiguaciones (ej: file),
      pues quiero recordarles que algunas palabras reservadas cómo "'type', 'from', es preferible "escaparlas" al definirlas como nombres de variables,
      y otros nombres como "file", al importar el espacio de nombres "System.IO.File", directamente es preferible evitar ese tipo de nombramientos ambiguos y utilizar algo más específico (ej: fileObj, fileName, filePath, etc).
  • Añadir los Imports de los Namespaces requeridos para el uso del código, por los problemas que algunos usuarios han tenido con eso.
  • Traslación de Módulo a Clase.
  • Implementación de la interfáz IDisposable, para liberar la instancia de WhatsApp (WA) correctamente.
  • Implementación de una excepción específica, 'WALoginFailedException', que sustituye a la terminación de ejecución en el método 'OnLoginFailed' del código original.
  • Documentar todos los miembros del código. Aunque sigue siendo una documentación MUY incompleta a falta de documentación oficial por parte de los desarrolladores de la API para .Net.

¿Cómo utilizarlo?
Esteticamente el código modificado es diferente, pero su utilización es practicamente igual al código original,
especifiquen sus datos en las propiedades "Number", "Password" y/o "PasswordFilepath";
el método original 'InitWa' ha sido reemplazado por el nuevo método 'Initializecomponent';
el método original 'ProcessChat' ha sido reemplazado por el nuevo método 'ProcessChatAsync', y el nuevo método 'ProcessChat' ahora es sincrónico;
el método original 'SendWA' ha sido reemplazado por el nuevo método 'SendMessage' para enviar un mensaje, y el nuevo método 'TestMessage' para testear un mensaje con un usuario temporal.

Ejemplo de uso:

Código
  1. Public Class TestForm
  2.  
  3.    Private wa As WhatsAppHelper
  4.  
  5.    Private Sub Test()
  6.  
  7.        Me.wa = New WhatsAppHelper(nickName:="", [debug]:=False)
  8.  
  9.        Using wa
  10.  
  11.            Debug.WriteLine(Me.wa.Number)
  12.            Debug.WriteLine(Me.wa.Password)
  13.            Debug.WriteLine(Me.wa.TextEncoding.ToString)
  14.  
  15.            wa.ProcessChatAsync()
  16.            wa.SendMessage(msg:="mensaje", num:="num")
  17.  
  18.        End Using
  19.  
  20.    End Sub
  21.  
  22. End Class





Espero que a alguien le sirva este código para despejar mejor las dudas, tengan en cuenta que esto no lo he desarrollado para mi, yo odio WhatsApp y ni lo tengo ni lo uso, este código es con la única intención de intentar ayudarles, pero si tienen alguna duda o error al usarlo entonces será mejor que la consulten con el compañero @79137913 y no conmigo, porque, vuelvo a repetir, no puedo testear las modificaciones que hice (ni el ejemplo de uso que compartí).

Source:
Código
  1. #Region " Option statements "
  2.  
  3. Option Explicit On
  4. Option Strict On
  5. Option Infer Off
  6.  
  7. #End Region
  8.  
  9. #Region " Imports "
  10.  
  11. Imports System.IO
  12. Imports System.Linq
  13. Imports System.Net
  14. Imports System.Text
  15. Imports System.Threading
  16. Imports System.Threading.Tasks
  17.  
  18. Imports WhatsAppApi
  19. Imports WhatsAppApi.Account
  20. Imports WhatsAppApi.Helper
  21. Imports WhatsAppApi.Response
  22. Imports WhatsAppApi.ApiBase
  23.  
  24. #End Region
  25.  
  26. #Region " WhatsAppHelper "
  27.  
  28. ''' <summary>
  29. ''' Class WhatsAppHelper.
  30. ''' This class cannot be inherited.
  31. ''' </summary>
  32. Public NotInheritable Class WhatsAppHelper : Implements IDisposable
  33.  
  34. #Region " Objects "
  35.  
  36.    ''' <summary>
  37.    ''' The <see cref="WhatsAppApi.WhatsApp"/> instance.
  38.    ''' </summary>
  39.    Private WithEvents wa As WhatsApp
  40.  
  41.    ''' <summary>
  42.    ''' </summary>
  43.    Private WithEvents waDebugger As DebugAdapter
  44.  
  45. #End Region
  46.  
  47. #Region " Properties "
  48.  
  49.    ''' <summary>
  50.    ''' Gets the...
  51.    ''' </summary>
  52.    ''' <value>.</value>
  53.    Public ReadOnly Property Number As String
  54.        Get
  55.            Return "5492236685519"
  56.        End Get
  57.    End Property
  58.  
  59.    ''' <summary>
  60.    ''' Gets the...
  61.    ''' </summary>
  62.    ''' <value>.</value>
  63.    Public ReadOnly Property PasswordFilepath As String
  64.        Get
  65.            Return Path.Combine(Application.StartupPath, "WAPASS.txt")
  66.        End Get
  67.    End Property
  68.  
  69.    ''' <summary>
  70.    ''' Gets the...
  71.    ''' </summary>
  72.    ''' <value>.</value>
  73.    Public ReadOnly Property Password As String
  74.        Get
  75.  
  76.            Try
  77.                Return File.ReadAllText(Me.PasswordFilepath, Me.TextEncoding)
  78.  
  79.            Catch ex As FileNotFoundException
  80.                Throw New FileNotFoundException("WhatsApp password file not found.", Me.PasswordFilepath)
  81.  
  82.            Catch ex As Exception
  83.                Throw
  84.  
  85.            End Try
  86.  
  87.        End Get
  88.    End Property
  89.  
  90.    ''' <summary>
  91.    ''' Gets the...
  92.    ''' </summary>
  93.    ''' <value>.</value>
  94.    Public ReadOnly Property TextEncoding As Encoding
  95.        Get
  96.            Return Encoding.Default
  97.        End Get
  98.    End Property
  99.  
  100. #End Region
  101.  
  102. #Region " Exceptions "
  103.  
  104.    ''' <summary>
  105.    ''' Exception that is thrown when WhatsApp login has failed.
  106.    ''' </summary>
  107.    <Serializable>
  108.    Public NotInheritable Class WALoginFailedException : Inherits Exception
  109.  
  110.        ''' <summary>
  111.        ''' Initializes a new instance of the <see cref="WALoginFailedException"/> class.
  112.        ''' </summary>
  113.        Public Sub New()
  114.            MyBase.New("WhatsApp Login Failed")
  115.        End Sub
  116.  
  117.        ''' <summary>
  118.        ''' Initializes a new instance of the <see cref="WALoginFailedException"/> class.
  119.        ''' </summary>
  120.        ''' <param name="message">The message that describes the error.</param>
  121.        Public Sub New(message As String)
  122.            MyBase.New(message)
  123.        End Sub
  124.  
  125.    End Class
  126.  
  127. #End Region
  128.  
  129. #Region " Constructors "
  130.  
  131.    ''' <summary>
  132.    ''' Initializes a new instance of the <see cref="WhatsAppHelper"/> class.
  133.    ''' </summary>
  134.    ''' <param name="nickName">.</param>
  135.    ''' <param name="debug">.</param>
  136.    Public Sub New(ByVal nickName As String,
  137.                   Optional ByVal debug As Boolean = False)
  138.  
  139.        Me.InitializeComponent(nickName, debug)
  140.  
  141.    End Sub
  142.  
  143.    ''' <summary>
  144.    ''' Prevents a default instance of the <see cref="WhatsApp"/> class from being created.
  145.    ''' </summary>
  146.    Private Sub New()
  147.    End Sub
  148.  
  149. #End Region
  150.  
  151. #Region " Private Methods "
  152.  
  153.    ''' <summary>
  154.    ''' </summary>
  155.    ''' <param name="nickName">.</param>
  156.    ''' <param name="debug">.</param>
  157.    Private Sub InitializeComponent(ByVal nickName As String,
  158.                                    Optional ByVal debug As Boolean = False)
  159.  
  160.        Me.wa = New WhatsApp(Me.Number, Me.Password, nickName, debug)
  161.        Me.waDebugger = DebugAdapter.Instance
  162.        Me.wa.Connect()
  163.  
  164.        Dim datFile As String = Me.GetDatFileName(Me.Number)
  165.        Dim nextChallenge As Byte() = Nothing
  166.  
  167.        If File.Exists(datFile) Then
  168.            Dim text As String = File.ReadAllText(datFile, Me.TextEncoding)
  169.            nextChallenge = Convert.FromBase64String(text)
  170.        End If
  171.  
  172.        Me.wa.Login(nextChallenge)
  173.  
  174.    End Sub
  175.  
  176.    ''' <summary>
  177.    ''' </summary>
  178.    ''' <param name="pn">.</param>
  179.    ''' <returns>.</returns>
  180.    Private Function GetDatFileName(ByVal pn As String) As String
  181.  
  182.        Dim filename As String = String.Format("{0}.next.dat", pn)
  183.        Return Path.Combine(Application.StartupPath, filename)
  184.  
  185.    End Function
  186.  
  187.    ''' <summary>
  188.    ''' </summary>
  189.    ''' <param name="filename">.</param>
  190.    ''' <param name="url">The url to download.</param>
  191.    ''' <param name="data">.</param>
  192.    Private Sub DownloadMedia(ByVal filename As String,
  193.                              ByVal url As String,
  194.                              ByVal data As Byte())
  195.  
  196.        File.WriteAllBytes(String.Format("preview_{0}.jpg", filename), data)
  197.  
  198.        Dim waClient As New WebClient
  199.        Try
  200.            Using waClient
  201.                waClient.DownloadFileAsync(New Uri(url), filename, 0)
  202.            End Using
  203.  
  204.        Catch ex As Exception
  205.            Throw
  206.  
  207.        Finally
  208.            If waClient IsNot Nothing Then
  209.                waClient.Dispose()
  210.            End If
  211.  
  212.        End Try
  213.  
  214.    End Sub
  215.  
  216. #End Region
  217.  
  218. #Region " Public Methods "
  219.  
  220.    ''' <summary>
  221.    ''' </summary>
  222.    ''' <param name="msg">.</param>
  223.    ''' <param name="num">.</param>
  224.    ''' <returns>.</returns>
  225.    Public Function SendMessage(ByVal msg As String,
  226.                                ByVal num As String) As String
  227.  
  228.        Return wa.SendMessage([to]:=num, txt:=msg)
  229.  
  230.    End Function
  231.  
  232.    ''' <summary>
  233.    ''' </summary>
  234.    ''' <param name="msg">.</param>
  235.    ''' <param name="num">.</param>
  236.    ''' <returns><c>true</c> if successfull, <c>false</c> otherwise.</returns>
  237.    Public Function TestMessage(ByVal msg As String,
  238.                                ByVal num As String) As Boolean
  239.  
  240.        Dim tmpUser As WhatsUser = New WhatsUserManager().CreateUser(num, "User")
  241.  
  242.        Try
  243.            wa.SendMessage([to]:=num, txt:=msg)
  244.  
  245.        Catch ex As Exception
  246.            Return False
  247.  
  248.        End Try
  249.  
  250.        Return True
  251.  
  252.    End Function
  253.  
  254.    ''' <summary>
  255.    ''' </summary>
  256.    Public Sub ProcessChatAsync()
  257.  
  258.        Task.Factory.StartNew(Sub()
  259.                                  Me.ProcessChat(Me.wa)
  260.                              End Sub)
  261.  
  262.    End Sub
  263.  
  264.    ''' <summary>
  265.    ''' </summary>
  266.    Public Sub ProcessChat()
  267.  
  268.        While Me.wa IsNot Nothing
  269.  
  270.            Try
  271.                Me.wa.PollMessages()
  272.  
  273.            Catch ex As Exception
  274.                ' Throw
  275.  
  276.            End Try
  277.  
  278.            Thread.Sleep(millisecondsTimeout:=100)
  279.  
  280.        End While
  281.  
  282.    End Sub
  283.  
  284. #End Region
  285.  
  286. #Region " Event-Handlers "
  287.  
  288.    ''' <summary>
  289.    ''' Handles the OnGetPrivacySettings event of the <see cref="WA"/> instance.
  290.    ''' </summary>
  291.    ''' <param name="settings">.</param>
  292.    Private Sub WA_OnGetPrivacySettings(ByVal settings As Dictionary(Of VisibilityCategory, VisibilitySetting)) _
  293.    Handles wa.OnGetPrivacySettings
  294.  
  295.        ' Put your code here.
  296.  
  297.    End Sub
  298.  
  299.    ''' <summary>
  300.    ''' Handles the OnGetStatus event of the <see cref="WA"/> instance.
  301.    ''' </summary>
  302.    ''' <param name="form">.</param>
  303.    ''' <param name="type">.</param>
  304.    ''' <param name="name">.</param>
  305.    ''' <param name="status">.</param>
  306.    Private Sub WA_OnGetStatus(ByVal form As String,
  307.                               ByVal type As String,
  308.                               ByVal name As String,
  309.                               ByVal status As String) _
  310.    Handles wa.OnGetStatus
  311.  
  312.        ' Put your code here.
  313.  
  314.    End Sub
  315.  
  316.    ''' <summary>
  317.    ''' Handles the OnGetSyncResult event of the <see cref="WA"/> instance.
  318.    ''' </summary>
  319.    ''' <param name="index">.</param>
  320.    ''' <param name="sid">.</param>
  321.    ''' <param name="existingUsers">.</param>
  322.    ''' <param name="failedNumbers">.</param>
  323.    Private Sub WA_OnGetSyncResult(ByVal index As Integer,
  324.                                   ByVal sid As String,
  325.                                   ByVal existingUsers As Dictionary(Of String, String),
  326.                                   ByVal failedNumbers As String()) _
  327.    Handles wa.OnGetSyncResult
  328.  
  329.        ' Put your code here.
  330.  
  331.    End Sub
  332.  
  333.    ''' <summary>
  334.    ''' Handles the OnGetGroups event of the <see cref="WA"/> instance.
  335.    ''' </summary>
  336.    ''' <param name="groups">.</param>
  337.    Private Sub WA_OnGetGroups(ByVal groups As WaGroupInfo()) _
  338.    Handles wa.OnGetGroups
  339.  
  340.        ' Put your code here.
  341.  
  342.    End Sub
  343.  
  344.    ''' <summary>
  345.    ''' Handles the OnGetPhotoPreview event of the <see cref="WA"/> instance.
  346.    ''' </summary>
  347.    ''' <param name="from">.</param>
  348.    ''' <param name="id">.</param>
  349.    ''' <param name="data">.</param>
  350.    Private Sub WA_OnGetPhotoPreview(ByVal [from] As String,
  351.                                     ByVal id As String,
  352.                                     ByVal data As Byte()) _
  353.    Handles wa.OnGetPhotoPreview
  354.  
  355.        Try
  356.            File.WriteAllBytes(String.Format("preview_{0}.jpg", [from]), data)
  357.  
  358.        Catch ex As Exception
  359.            Throw
  360.  
  361.        End Try
  362.  
  363.    End Sub
  364.  
  365.    ''' <summary>
  366.    ''' Handles the OnGetPhoto event of the <see cref="WA"/> instance.
  367.    ''' </summary>
  368.    ''' <param name="from">.</param>
  369.    ''' <param name="id">.</param>
  370.    ''' <param name="data">.</param>
  371.    Private Sub WA_OnGetPhoto(ByVal [from] As String,
  372.                              ByVal id As String,
  373.                              ByVal data As Byte()) _
  374.    Handles wa.OnGetPhoto
  375.  
  376.        Try
  377.            File.WriteAllBytes(String.Format("{0}.jpg", [from]), data)
  378.  
  379.        Catch ex As Exception
  380.            Throw
  381.  
  382.        End Try
  383.  
  384.    End Sub
  385.  
  386.    ''' <summary>
  387.    ''' Handles the OnGetMessageVcard event of the <see cref="WA"/> instance.
  388.    ''' </summary>
  389.    ''' <param name="from">.</param>
  390.    ''' <param name="id">.</param>
  391.    ''' <param name="name">.</param>
  392.    ''' <param name="data">.</param>
  393.    Private Sub WA_OnGetMessageVcard(ByVal [from] As String,
  394.                                     ByVal id As String,
  395.                                     ByVal name As String,
  396.                                     ByVal data As Byte()) _
  397.    Handles wa.OnGetMessageVcard
  398.  
  399.        Try
  400.            File.WriteAllBytes(String.Format("{0}.vcf", name), data)
  401.  
  402.        Catch ex As Exception
  403.            Throw
  404.  
  405.        End Try
  406.  
  407.    End Sub
  408.  
  409.    ''' <summary>
  410.    ''' Handles the OnGetMessageLocation event of the <see cref="WA"/> instance.
  411.    ''' </summary>
  412.    ''' <param name="from">.</param>
  413.    ''' <param name="id">.</param>
  414.    ''' <param name="lon">.</param>
  415.    ''' <param name="lat">.</param>
  416.    ''' <param name="url">.</param>
  417.    ''' <param name="name">.</param>
  418.    ''' <param name="preview">.</param>
  419.    Private Sub WA_OnGetMessageLocation(ByVal [from] As String,
  420.                                        ByVal id As String,
  421.                                        ByVal lon As Double,
  422.                                        ByVal lat As Double,
  423.                                        ByVal url As String,
  424.                                        ByVal name As String,
  425.                                        ByVal preview() As Byte) _
  426.    Handles wa.OnGetMessageLocation
  427.  
  428.        Try
  429.            File.WriteAllBytes(String.Format("{0}{1}end sub.jpg", lat, lon), preview)
  430.  
  431.        Catch ex As Exception
  432.            Throw
  433.  
  434.        End Try
  435.  
  436.    End Sub
  437.  
  438.    ''' <summary>
  439.    ''' Handles the OnGetMessageVideo event of the <see cref="WA"/> instance.
  440.    ''' </summary>
  441.    ''' <param name="from">.</param>
  442.    ''' <param name="id">.</param>
  443.    ''' <param name="filename">.</param>
  444.    ''' <param name="fileSize">.</param>
  445.    ''' <param name="url">.</param>
  446.    ''' <param name="preview">.</param>
  447.    Private Sub WA_OnGetMessageVideo(ByVal [from] As String,
  448.                                     ByVal id As String,
  449.                                     ByVal filename As String,
  450.                                     ByVal fileSize As Integer,
  451.                                     ByVal url As String,
  452.                                     ByVal preview As Byte()) _
  453.    Handles wa.OnGetMessageVideo
  454.  
  455.        Me.DownloadMedia(filename, url, preview)
  456.  
  457.    End Sub
  458.  
  459.    ''' <summary>
  460.    ''' Handles the OnGetMessageAudio event of the <see cref="WA"/> instance.
  461.    ''' </summary>
  462.    ''' <param name="from">.</param>
  463.    ''' <param name="id">.</param>
  464.    ''' <param name="filename">.</param>
  465.    ''' <param name="filesize">.</param>
  466.    ''' <param name="url">.</param>
  467.    ''' <param name="preview">.</param>
  468.    Private Sub WA_OnGetMessageAudio(ByVal [from] As String,
  469.                                     ByVal id As String,
  470.                                     ByVal filename As String,
  471.                                     ByVal filesize As Integer,
  472.                                     ByVal url As String,
  473.                                     ByVal preview As Byte()) _
  474.    Handles wa.OnGetMessageAudio
  475.  
  476.        Me.DownloadMedia(filename, url, preview)
  477.  
  478.    End Sub
  479.  
  480.    ''' <summary>
  481.    ''' Handles the OnGetMessageImage event of the <see cref="WA"/> instance.
  482.    ''' </summary>
  483.    ''' <param name="from">.</param>
  484.    ''' <param name="id">.</param>
  485.    ''' <param name="filename">.</param>
  486.    ''' <param name="size">.</param>
  487.    ''' <param name="url">.</param>
  488.    ''' <param name="preview">.</param>
  489.    Private Sub WA_OnGetMessageImage(ByVal [from] As String,
  490.                                     ByVal id As String,
  491.                                     ByVal filename As String,
  492.                                     ByVal size As Integer,
  493.                                     ByVal url As String,
  494.                                     ByVal preview As Byte()) _
  495.    Handles wa.OnGetMessageImage
  496.  
  497.        Me.DownloadMedia(filename, url, preview)
  498.  
  499.    End Sub
  500.  
  501.    ''' <summary>
  502.    ''' Handles the OnGetPaused event of the <see cref="WA"/> instance.
  503.    ''' </summary>
  504.    ''' <param name="from">.</param>
  505.    Private Sub WA_OnGetPaused(ByVal [from] As String) _
  506.    Handles wa.OnGetPaused
  507.  
  508.        ' Put your code here.
  509.  
  510.    End Sub
  511.  
  512.    ''' <summary>
  513.    ''' Handles the OnGetTyping event of the <see cref="WA"/> instance.
  514.    ''' </summary>
  515.    ''' <param name="from">.</param>
  516.    Private Sub WA_OnGetTyping(ByVal [from] As String) _
  517.    Handles wa.OnGetTyping
  518.  
  519.        ' Put your code here.
  520.  
  521.    End Sub
  522.  
  523.    ''' <summary>
  524.    ''' Handles the OnGetLastSeen event of the <see cref="WA"/> instance.
  525.    ''' </summary>
  526.    ''' <param name="from">.</param>
  527.    ''' <param name="lastseen">.</param>
  528.    Private Sub WA_OnGetLastSeen(ByVal [from] As String,
  529.                                ByVal lastseen As Date) _
  530.    Handles wa.OnGetLastSeen
  531.  
  532.        ' Put your code here.
  533.  
  534.    End Sub
  535.  
  536.    ''' <summary>
  537.    ''' Handles the OnGetMessageReceivedServer event of the <see cref="WA"/> instance.
  538.    ''' </summary>
  539.    ''' <param name="from">.</param>
  540.    ''' <param name="id">.</param>
  541.    Private Sub WA_OnGetMessageReceivedServer(ByVal [from] As String,
  542.                                              ByVal id As String) _
  543.    Handles wa.OnGetMessageReceivedServer
  544.  
  545.        ' Put your code here.
  546.  
  547.    End Sub
  548.  
  549.    ''' <summary>
  550.    ''' Handles the OnGetMessageReceivedClient event of the <see cref="WA"/> instance.
  551.    ''' </summary>
  552.    ''' <param name="from">.</param>
  553.    ''' <param name="id">.</param>
  554.    Private Sub WA_OnGetMessageReceivedClient(ByVal [from] As String,
  555.                                              ByVal id As String) _
  556.    Handles wa.OnGetMessageReceivedClient
  557.  
  558.        ' Put your code here.
  559.  
  560.    End Sub
  561.  
  562.    ''' <summary>
  563.    ''' Handles the OnGetGroupParticipants event of the <see cref="WA"/> instance.
  564.    ''' </summary>
  565.    ''' <param name="gjid">.</param>
  566.    ''' <param name="jids">.</param>
  567.    Private Sub WA_OnGetGroupParticipants(ByVal gjid As String,
  568.                                          ByVal jids As String()) _
  569.    Handles wa.OnGetGroupParticipants
  570.  
  571.        ' Put your code here.
  572.  
  573.    End Sub
  574.  
  575.    ''' <summary>
  576.    ''' Handles the OnGetPresence event of the <see cref="WA"/> instance.
  577.    ''' </summary>
  578.    ''' <param name="from">.</param>
  579.    ''' <param name="type">.</param>
  580.    Private Sub WA_OnGetPresence(ByVal [from] As String,
  581.                                 ByVal type As String) _
  582.    Handles wa.OnGetPresence
  583.  
  584.        ' Put your code here.
  585.  
  586.    End Sub
  587.  
  588.    ''' <summary>
  589.    ''' Handles the OnNotificationPicture event of the <see cref="WA"/> instance.
  590.    ''' </summary>
  591.    ''' <param name="type">.</param>
  592.    ''' <param name="jid">.</param>
  593.    ''' <param name="id">.</param>
  594.    Private Sub WA_OnNotificationPicture(ByVal [type] As String,
  595.                                         ByVal jid As String,
  596.                                         ByVal id As String) _
  597.    Handles wa.OnNotificationPicture
  598.  
  599.        ' Put your code here.
  600.  
  601.    End Sub
  602.  
  603.    ''' <summary>
  604.    ''' Handles the OnGetMessage event of the <see cref="WA"/> instance.
  605.    ''' </summary>
  606.    ''' <param name="node">.</param>
  607.    ''' <param name="from">.</param>
  608.    ''' <param name="id">.</param>
  609.    ''' <param name="name">.</param>
  610.    ''' <param name="message">.</param>
  611.    ''' <param name="receiptSent">.</param>
  612.    Private Sub WA_OnGetMessage(ByVal node As ProtocolTreeNode,
  613.                                ByVal [from] As String,
  614.                                ByVal id As String,
  615.                                ByVal name As String,
  616.                                ByVal message As String,
  617.                                ByVal receiptSent As Boolean) _
  618.    Handles wa.OnGetMessage
  619.  
  620.        Dim number As String = [from].Split("@"c).First
  621.  
  622.    End Sub
  623.  
  624.    ''' <summary>
  625.    ''' Handles the OnLoginFailed event of the <see cref="WA"/> instance.
  626.    ''' </summary>
  627.    ''' <param name="data">The data.</param>
  628.    Private Sub WA_OnLoginFailed(ByVal data As String) _
  629.    Handles wa.OnLoginFailed
  630.  
  631.        Throw New WALoginFailedException
  632.  
  633.    End Sub
  634.  
  635.    ''' <summary>
  636.    ''' Handles the OnLoginSuccess event of the <see cref="WA"/> instance.
  637.    ''' </summary>
  638.    ''' <param name="phoneNumber">.</param>
  639.    ''' <param name="data">.</param>
  640.    Private Sub WA_OnLoginSuccess(ByVal phoneNumber As String,
  641.                                  ByVal data As Byte()) _
  642.    Handles wa.OnLoginSuccess
  643.  
  644.        ' next password
  645.        Dim sdata As String = Convert.ToBase64String(data)
  646.  
  647.        Try
  648.            File.WriteAllText(Me.GetDatFileName(Me.Number), sdata)
  649.  
  650.        Catch ex As Exception
  651.            Throw
  652.  
  653.        End Try
  654.  
  655.    End Sub
  656.  
  657.    ''' <summary>
  658.    ''' Handles the OnPrintDebug event of the <see cref="waDebugger"/> instance.
  659.    ''' </summary>
  660.    ''' <param name="value">.</param>
  661.    Private Sub Instance_OnPrintDebug(ByVal value As Object) _
  662.    Handles waDebugger.OnPrintDebug
  663.  
  664.        Debug.Print(value.ToString)
  665.  
  666.    End Sub
  667.  
  668. #End Region
  669.  
  670. #Region " IDisposable "
  671.  
  672.    ''' <summary>
  673.    ''' To detect redundant calls when disposing.
  674.    ''' </summary>
  675.    Private isDisposed As Boolean = False
  676.  
  677.    ''' <summary>
  678.    ''' Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
  679.    ''' </summary>
  680.    Public Sub Dispose() Implements IDisposable.Dispose
  681.        Me.Dispose(isDisposing:=True)
  682.        GC.SuppressFinalize(obj:=Me)
  683.    End Sub
  684.  
  685.    ''' <summary>
  686.    ''' Releases unmanaged and - optionally - managed resources.
  687.    ''' </summary>
  688.    ''' <param name="isDisposing">
  689.    ''' <c>true</c> to release both managed and unmanaged resources;
  690.    ''' <c>false</c> to release only unmanaged resources.
  691.    ''' </param>
  692.    Protected Sub Dispose(ByVal isDisposing As Boolean)
  693.  
  694.        If Not Me.IsDisposed Then
  695.  
  696.            If isDisposing Then
  697.  
  698.                Try
  699.                    Me.wa.Disconnect()
  700.                    Me.wa = Nothing
  701.                    Me.waDebugger = Nothing
  702.  
  703.                Catch ex As Exception
  704.                    Throw
  705.  
  706.                End Try
  707.  
  708.            End If
  709.  
  710.        End If
  711.  
  712.        Me.isDisposed = True
  713.  
  714.    End Sub
  715.  
  716. #End Region
  717.  
  718. End Class
  719.  
  720. #End Region

Saludos!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 27 Febrero 2015, 18:15 pm
HOLA!!!

@Elektro:
Muy bueno que hayas modificado el codigo, me alegra mucho, en cuanto a el codigo no es mas que un porteo de su version en c# casi textual.

Es cierto que tiene una forma muy de vb6 aunque no es mi estructura, intento respetar los lenguajes.

Confirmo que tu codigo funciona correctamente.

Este post me alienta a revivir una vieja app, que si no te importa, me gustaria que luego revisaras a ver que te parece, estoy empezando a programarla recien si queres mas info contactame por priv.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: Eleкtro en 1 Marzo 2015, 16:48 pm
Confirmo que tu codigo funciona correctamente.

Me alegra saberlo, realmente lo hice todo "a ciegas" y tenia esa duda de que al final no sirviera de mucho xD.


Este post me alienta a revivir una vieja app, que si no te importa, me gustaria que luego revisaras a ver que te parece, estoy empezando a programarla recien si queres mas info contactame por priv.

jajaja, no hace falta ni que menciones de que app se trata, te estoy leyendo la mente, y creo que a todos los usuarios de elhacker.net nos gustará poder ver esa gran herramienta actualizada, de hecho hace tiempo pensé en hacer una versión .Net de tu programa, pero me desmotivé bastante porque... bueno, porque la app ya existe y es funcional en VB6 así que me pareció un poco tontería el tratar de reinventarla en .Net xD, y tampoco quería que pareciese que intentaba arrebatarte ningún mérito, así que lo mejor es que lo hagas tú, y yo te ayudo si quieres y si lo necesitases, por supuesto.

Un saludo!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: gusontop en 5 Marzo 2015, 16:49 pm
Buen día,

Antes que nada agradecer las maravillosas aportaciones que hacen en el foro.

Tengo una duda con respecto al codigo que se esta agregando en este ejemplo, yo he seguido todo los pasos pero me nunca entra en la condicion:

Código
  1. wa.Connect()
  2.        Dim datFile As String = getDatFileName(WANum)
  3.        Dim nextChallenge() As Byte
  4.        If (File.Exists(datFile)) Then
  5.            Dim foo As String = File.ReadAllText(datFile)
  6.            nextChallenge = Convert.FromBase64String(foo)
  7.        End If

No me encuentra el archivo y nunca se crea el .dat que dice según el debugger.
Estoy haciendo algo mal?, me falta algún paso?

Agradezco sus comentarios.

A mi me esta pasando lo mismo y no consigo que realize en envio del mensaje. ¿Podeis ayudarnos?
Gracias.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 5 Marzo 2015, 16:55 pm
HOLA!!!

Eso es por que no tenes el archivo next challenge en la carpeta del ejecutable.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: gusontop en 5 Marzo 2015, 18:42 pm
Claro que no tengo el archivo Next Challenge, pero de donde lo saco o como se genera.

Gracias por responder tan pronto.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: ChuchoVega en 5 Marzo 2015, 18:51 pm
Claro que no tengo el archivo Next Challenge, pero de donde lo saco o como se genera.

Gracias por responder tan pronto.

Gusontop, tengo el mismo problema es lo único que me hace falta para poder hechar a andar la APP, ojala y esto lo puedan responder rápido, de igual manera si encuentro como se debe hacer eso del archivo Next Challenge lo posteo.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 5 Marzo 2015, 19:17 pm
HOLA!!!

Chicos les confirmo la razon por la cual el programa no entra en ese if es por que su archivo nextchallenge no existe,  puede haber 2 razones para esto, la primera es que ustedes cambiaron el numero de telefono o que ustedes nunca enviaron un mensaje.

En caso que sea la primera borren el archivo nextchallenge obsoleto, vuelvan a generar la clave e intenten de nuevo.

En caso que sea la seguda es programa no necesita del archivo next challenge la primera vez por que el next challenge estaria en blanco. Yo supongo y solo supogo, si ustedes estan usando un numero que en algun momento tuvo whatsapp lamento informarles que el nextchallenge no lo pueden obtener por estos medios, ya que sino seria muy simple hackear el whatsapp de cualquiera con esos simples pasos. Para crear la contraseña deben si o si usar un numero virgen en whatsapp.(o un numero que siempre ha usado WART.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: gusontop en 5 Marzo 2015, 19:33 pm
Gracias,

He cogido un telefono que nunca ha tenido WhatApp, el del abuelo, y cada vez que ejecuto la aplicacion WART con este numero de telefono, me da un texto distinto, que copio al archivo WAPASS.TXT que ubico en el direcctorio de la aplicacion, en este caso dentro de bin\Debug de hecho interrumpo el programa cuando lee este archivo y la clave que lee es la correcta.

Luego cuando hace el wa.conect() no genera el archivo NextChallenge, o tengo que crear el archivo nextchallenge con la misma clave que WAPASS.TXT

Lo siento, pero no es mi caso ninguno de los supuestos.

Gracias.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 6 Marzo 2015, 12:18 pm
HOLA!!!

No, el archivo next challenge se genera solo, una vez que se loguea correctamente.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: CAM1207 en 20 Abril 2015, 03:40 am
Gracias 79137913, por el tema importante planteado, espero que no sea muy antiguo...
Estimado realice todas sus observaciones pero aun no genera el comentado archivo
numerotelefono.next.dat
Utilice dos numero diferentes que no tenían whatsapp previamente...
utilice WART, ingrese numero, me genero clave, la ingrese en el archivo WAPASS.txt
asigna correctamente la clave dentro de la aplicación... pero nunca se genera el archivo.
- Este archivo se genera automáticamente por la aplicación visual?
- y en que momento?

gracias nuevamente por su respuesta

Saludos



 


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 20 Abril 2015, 18:22 pm
HOLA!!!

Deberias fijarte si Private Sub wa_OnLoginSuccess(phoneNumber As String, data() As Byte se ejecuta. Ese es el procedimiento que guarda el next challenge

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: CAM1207 en 21 Abril 2015, 01:39 am
Muchas gracias por responder, pero aun no anda...

La instrucción que se inicializa en InitWA esta con los siguientes datos (quite los últimos 3)
wa = New WhatsAppApi.WhatsApp("56958386XXX", "BKGdtj2qtaSu//3+RjAJ0nczLXXX"," NICKXXX", False)

pero no se genera el archivo porque en wa_OnLoginFailed
el parámetro "data" recibe el dato: not-authorized

Sera un problema de mi proveedor de telefononia, aunque probé con dos compañías diferentes.

Muchas gracias.



Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 21 Abril 2015, 13:20 pm
HOLA!!!

Bueno cuando surge ese parametro hay 3 opciones:

1- Que generaste una nueva contraseña pero usas una vieja en tu codigo.
Solucion: usa de nuevo el WART y asegurate de copiar todos los parametros correctamente y recuerda que luego de un not-authorized debes rehacer la contraseña (solo tenes un intento).

2- Que colocaste una contraseña en el WART para conseguir la clave pero luego de eso no seguiste usando la misma (en el WART) por lo que la contraseña para el Whatsapi esta mal cifrada.
Solucion: recuerda la contraseña con la que cifraste en el WART o perdiste la cuenta.

3- Que tu cuenta de Whatsapp este bloqueada por Spam u otra razon.
Este no tiene solucion.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: jhon1_23 en 21 Abril 2015, 17:02 pm
no puedo bajar el archivo WART, lo puedes volver a subir

tienes el proyecto  compilado. esta en c# . Necesito agregar a un proyecto el envio de whatsapp.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: Sawaa en 24 Abril 2015, 22:59 pm
Buenas tardes,
Primero que nada excelente aportacion es justo lo que necesito para mejorar un sistema que estoy desarrollando, descargue la WhatsAppApi.dll, y la agregue como referencia a mi proyecto, tambien logre obtener mi password con el WART, pero al momento de compilar me aparece el siguiente error:

The currently targeted framework ".NETFramework,Version=v4.0,Profile=Client" does not include "System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" which the referenced assembly "WhatsAppApi" depends on. This caused the referenced assembly to not resolve. To fix this, either (1) change the targeted framework for this project, or (2) remove the referenced assembly from the project.   

estoy trabajando en vb.net 2013, alguna sugerencia de que es lo que debo hacer para lograr compilarlo correctamente?

Gracias   :-[



Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: Eleкtro en 24 Abril 2015, 23:21 pm
The currently targeted framework ".NETFramework,Version=v4.0,Profile=Client" does not include "System.Web.Extensions ...

Estás utilizando un Framework compactado (el perfil cliente) el cual carece de varios componentes de .Net Framework, en lugar de eso, utiliza el paquete completo (".Net Framework 4.0") o bien puedes referenciar al proyecto el ensamblado que te está indicando, System.Web.Extensions.dll y automaticamente se corregirá mosntrándote una advertencia para cambiar que cambiará el Framework objetivo del proyecto.

How to: Add or Remove References By Using the Reference Manager - MSDN (https://msdn.microsoft.com/en-us/library/hh708954.aspx)

Si no tienes el paquete normal de .Net Framework 4.0 instalado en tu equipo entonces debes instalarlo.

https://www.microsoft.com/en-us/download/details.aspx?id=17718

alguna sugerencia de que es lo que debo hacer para lograr compilarlo correctamente?

Aparte de corregir ese error de compilación, puedes leer las páginas de este mismo hilo, justo aquí:
http://foro.elhacker.net/net/vbnet_porteo_de_la_implementacion_del_api_de_whatsapinet_whatsapp_whatsappapi-t419188.0.html;msg1998950#msg1998950

Saludos


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: Sawaa en 25 Abril 2015, 00:41 am
Gracias, agregue la referencia desde la opcion de assemblies y con eso ya no me marca ese error, pero ahora tengo un error con el nextChallenge
me aparece lo siguiente:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: Invalid length for a Base-64 char array or string.

en el codigo:
Código:
 Me.wa.Login(nextChallenge)
saludos


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: CAM1207 en 26 Abril 2015, 17:27 pm
Estimados, me da la impresión que esto no funciona, lo intente de muchas maneras, cambiando los números de celular de diferentes compañías y nunca me a generado el archivo con extensión .next.dat, a alguien le a funcionado?

Saludos


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 27 Abril 2015, 13:57 pm
HOLA!!!

CAM1207, el presente codigo funciona correctamentem la extension next.dat es correcta, acabo de intentar bajar nuevamente los proyectos de WhatsapiNET y el proyecto se dio de baja hace 3 dias a mi pesar.

En mi caso funciona por que el software con el que uso lo tengo desde este post, whatsapp por lo que veo rechaza la autenticacion de nuevos numeros por que considera que utilizamos una version vieja (esto lo se por que a partir de tantas inquietudes utilice otro numero que tenia por ahi).

Ahora, de todos los que estuvieron teniendo errores, ninguno leyo el return de login! o son todos script kiddies o no prestan atencion a lo que usan, el error era claro On Login Failed "not-authorized@old-version".

Voy a buscar otra manera de realizarlo, denme tiempo (1 mes), si no contesto en este post antes, contesten asi me recuerdan, pero sepan que encontrare la forma de hacer funcionar nuevamente WhatsApp en net

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: CAM1207 en 29 Abril 2015, 00:00 am
Gracias 79137913, para mi este es el post l mas interesante de toda la red en estos momentos, claro si funcionara.

Saludos cordiales



Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: Sawaa en 30 Abril 2015, 19:07 pm
Chicos el error que les parace de old version es por la version del WART que estan utilizando, intente al principio con la 1.7.3 pero hace un mes salio una nueva version la 1.8.1, con esa version si permite registrar y devuelve el pasword de manera correcta (lo intente ayer mismo), les dejo el link donde lo pueden descargar:

https://github.com/mgp25/WART/.
como nota algunos antivirus lo marcan como virus tendran que desactivarlo en lo que lo descargan

Ahora una pregunta  ya tengo mi password pero me marca un error al enviar el mensaje, en

Código:
  Private Sub WA_OnLoginFailed(ByVal data As String) _
    Handles wa.OnLoginFailed

        Throw New WALoginFailedException

    End Sub
Me indica que el Login es fallido, necesito poner en el nickname el numero? o cualquier nickname basta?
Saludos!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: rogi en 5 Octubre 2015, 23:39 pm
Buen día.  Cómo va este proyecto?, ante todo gracias por compartir.  Me bajé el WART desde la página de github y me dio contraseña, pero al colocarla incluso manualmente WAPass="MiContraseña" me sale como "not-autorized" el login.  Alguien lo ha podido solucionar?


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: rogi en 6 Octubre 2015, 01:09 am
Buen día.  Cómo va este proyecto?, ante todo gracias por compartir.  Me bajé el WART desde la página de github y me dio contraseña, pero al colocarla incluso manualmente WAPass="MiContraseña" me sale como "not-autorized" el login.  Alguien lo ha podido solucionar?
Alguien sabe si aún funciona esto?, estaba con la idea de un proyectico en vb.net 2013 pero la verdad que ahora ni siquiera me funciona el WART me dice que OLD VERSION, no entiendo, hasta el momento que publiqué el mensaje anterior funcionaba dando contraseña pero ya no.  Ya probé con otro nro de celular virgen y no.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 6 Octubre 2015, 13:19 pm
HOLA!!!

He estado haciendo los testeos pertinentes y whatsapp ha tirado abajo la compatibilidad de esta api, el core de la misma ha sido descontinuado. Ahora mismo hay otras apis fucionando pero lamentablemente no para VB.NET o C#, ademas que las que funcionan los numeros utilizados son bloqueados por varias razones luego de un tiempo aleatorio, por lo cual no son nada confiables.

Recomendaria a los moderadores bloquear el tema, y a los interesados ingresar en https://github.com/fermino/WhatsBot que es uno de los que mantiene a tiro la implementacion.

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: rogi en 7 Octubre 2015, 00:00 am
Hola @79137913

Qué APIs están funcionando?, deseo intentarlo dado que mi deseo no es generar spam sino hacer un sistema de consultas por tal razón las personas deben registrar el número que yo asigne para que se les envíe las respuestas. Gracias.


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: 79137913 en 7 Octubre 2015, 13:11 pm
HOLA!!!

@rogi , Apis para net ninguna que yo sepa, la unica que es estable y funcional es la que linkee en mi ultimo post es para php, lo podes correr local en la pc y establecer una conexión por sockets para comunicar tu soft con el WhatsBot

GRACIAS POR LEER!!!


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: ghosy86 en 9 Octubre 2015, 05:16 am
por lo que leo ya no es funcional??

en el código me da un error en

Public Sub ProcessChatAsync()
        'Task.Factory.StartNew(Sub() Me.ProcessChat(Me.wa))
        Task.Factory.StartNew(Sub()
                                  Me.ProcessChat(Me.wa)
                              End Sub)
    End Sub

======================
Error   1   Error de resolución de sobrecarga porque ninguna de las funciones 'StartNew' a las que se tiene acceso se puede llamar con estos argumentos:
    'Public Function StartNew(Of TResult)(function As System.Func(Of TResult)) As System.Threading.Tasks.Task(Of TResult)': Demasiados argumentos para 'Public Sub ProcessChat()'.
    'Public Function StartNew(Of TResult)(function As System.Func(Of TResult)) As System.Threading.Tasks.Task(Of TResult)': Los tipos de datos de los parámetros de tipo no se pueden inferir de estos argumentos. Este error se puede resolver especificando los tipos de datos explícitamente.
    'Public Function StartNew(action As System.Action) As System.Threading.Tasks.Task': Demasiados argumentos para 'Public Sub ProcessChat()'.   C:\Users\Fabio2\Documents\Visual Studio 2010\Projects\WhatsAppMessanger\WhatsAppMessanger\mWhatsApp.vb   258   9   WhatsAppMessanger


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: rogi en 9 Octubre 2015, 22:39 pm
por lo que leo ya no es funcional??

en el código me da un error en

Public Sub ProcessChatAsync()
        'Task.Factory.StartNew(Sub() Me.ProcessChat(Me.wa))
        Task.Factory.StartNew(Sub()
                                  Me.ProcessChat(Me.wa)
                              End Sub)
    End Sub

======================
Error   1   Error de resolución de sobrecarga porque ninguna de las funciones 'StartNew' a las que se tiene acceso se puede llamar con estos argumentos:
    'Public Function StartNew(Of TResult)(function As System.Func(Of TResult)) As System.Threading.Tasks.Task(Of TResult)': Demasiados argumentos para 'Public Sub ProcessChat()'.
    'Public Function StartNew(Of TResult)(function As System.Func(Of TResult)) As System.Threading.Tasks.Task(Of TResult)': Los tipos de datos de los parámetros de tipo no se pueden inferir de estos argumentos. Este error se puede resolver especificando los tipos de datos explícitamente.
    'Public Function StartNew(action As System.Action) As System.Threading.Tasks.Task': Demasiados argumentos para 'Public Sub ProcessChat()'.   C:\Users\Fabio2\Documents\Visual Studio 2010\Projects\WhatsAppMessanger\WhatsAppMessanger\mWhatsApp.vb   258   9   WhatsAppMessanger


ya no funciona, murió.  :(


Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: sysfactory en 16 Noviembre 2016, 19:56 pm
Hola me sale este error

Excepción no controlada del tipo 'System.Exception' en WhatsAppApi.dll

Información adicional: Auth response error

al final del codigo
 wa.Connect()
        Dim datFile As String = getDatFileName(WANum)
        Dim nextChallenge() As Byte
        If (File.Exists(datFile)) Then
            Dim foo As String = File.ReadAllText(datFile)
            nextChallenge = Convert.FromBase64String(foo)
        End If
        wa.Login(nextChallenge)
        ProcessChat(wa)

alguien me ayuda faltA Muy poco!



Título: Re: [VB.net] Porteo de la implementacion del api de WhatsApiNet WhatsApp WhatsAppAPI
Publicado por: engel lex en 16 Noviembre 2016, 20:03 pm
whatsapp ha hecho muchos cambios desde esa epoca y el proyecto de la dll está abandonado, ergo, este proyecto no es funcional actualmente

a menos que se hagan las actualizaciones para que funcione, queda cerrado