Computer über Skype "steuern" mit einer funktionierenden Alternative zur Skype4Com.dll (Stand: 20.03.2016)

    • VB.NET
    • .NET (FX) 4.0

      Computer über Skype "steuern" mit einer funktionierenden Alternative zur Skype4Com.dll (Stand: 20.03.2016)

      Letztens bin ich beim Durchstöbern des Internets auf etwas gestoßen, das vielleicht den ein oder anderen hier interessieren könnte.
      Es handelt sich hierbei um eine Alternative zur Skype4Com-Library. Dies ist deswegen relevant, da der Support für diese Library, soweit ich informiert bin, nicht mehr vorhanden ist.
      Ich habe mich deswegen aus Langeweile, und weil ich es außerdem interessant finde, dass es Personen gibt, die für simpelste Anwendungen, die auf diesem Prinzip basieren, Geld verlangen, entschieden dieses Tutorial zu verfassen.




      Welche Vorteile hat diese Alternative?
      Mir persönlich gefällt sie ziemlich gut, da sie im Vergleich zur Skye4ComLib keine laufende Skype-Instanz benötigt.
      Hierbei müssen zwar die Kontaktdaten im Sourcecode angegeben werden, dennoch bietet dies immense Vorteile.
      Des Weiteren sind Vorgänge wie, einloggen, Kontakte annehmen, Nachrichten verfassen, auslesen oder editieren etc. ein Kinderspiel.
      Der Größte Vorteil jedoch wird vermutlich sein, dass diese Alternative noch im Jahr 2016 funktioniert.




      Was benötigen Sie?
      Für dieses Tutorial benötigen Sie zwei externe Komponenten. Diese wären einerseits die Alternative Skype4Sharp sowie das JSON Framework für .NET Newtonsoft.Json.
      Beide Komponenten finden Sie im Dateianhang dieses Beitrags (hier bei ist jedoch zu beachten, dass die .dll's nicht auf dem aktuellsten Stand sein können), oder auf folgenden Websiten:
      github.com/lin-e/Skype4Sharp
      newtonsoft.com/json

      Ebenfalls wäre Grundwissen beziehungsweise Verständnis vorteilhaft.




      Los geht's!
      Erster Schritt ist, logischweise, das Setzen der Verweise sowie der Imports-Anweisungen. Diesbezüglich hoffe ich, dass ich darauf nicht weiter Eingehen muss.
      Damit Sie dennoch auf dem selben Stand wie ich bin:

      VB.NET-Quellcode

      1. Option Strict On
      2. Option Explicit On
      3. Option Infer On
      4. Imports Skype4Sharp
      5. Imports Skype4Sharp.Auth
      6. Imports Skype4Sharp.Enums
      7. Imports Skype4Sharp.Events
      8. Imports Skype4Sharp.Exceptions
      9. Imports Skype4Sharp.Helpers


      Als nächsten müssen Sie ein neues SkypeCredentials- sowie ein Skype4Sharp-Objekt erzeugen.
      An dieser Stelle wird ebenfalls ihr Passwort im Klartext zu sehen sein, falls Sie das Ganze nicht per Usereingabe regeln.

      VB.NET-Quellcode

      1. Private authCreds As New SkypeCredentials("username", "passwort")
      2. Private mainSkype As New Skype4Sharp.Skype4Sharp(authCreds)


      Anschließend wird ein Login durchgeführt mit mainskype.Login(). Das wesentliche ist hiermit schon erledigt. Ein einfacher Login in Skype via der Anwendung.
      Natürlich hilft Ihnen das vorerste wenig. Als nächster Schritt müssen die Evente verknüpft sowie der Poll gestartet werden. Doch davor ein kleines Beispiel bezüglich des Logins.
      Dieser Code dient nur als Beispiel und sollte eigentlich selbsterklärend sein.

      Login

      VB.NET-Quellcode

      1. Private Function Login() As Boolean
      2. Dim wasSuccessful As Boolean = False
      3. Console.WriteLine("[LOGIN]: Login with your skype account")
      4. Console.WriteLine("[LOGIN]: Username..")
      5. Dim user As String = Console.ReadLine
      6. Console.WriteLine("[LOGIN]: Password..")
      7. Dim info As ConsoleKeyInfo
      8. Dim pass As String = String.Empty
      9. Do
      10. info = Console.ReadKey(True)
      11. If info.Key = ConsoleKey.Enter Then
      12. Console.WriteLine()
      13. Exit Do
      14. Else
      15. pass &= info.KeyChar
      16. Console.Write("*"c)
      17. End If
      18. Loop
      19. authCreds = New SkypeCredentials(user, pass)
      20. mainSkype = New Skype4Sharp.Skype4Sharp(authCreds)
      21. Console.WriteLine("[DEBUG]: Logging in with {0}", authCreds.Username)
      22. If mainSkype.Login() Then
      23. wasSuccessful = True
      24. Console.WriteLine("[DEBUG]: Login complete")
      25. End If
      26. Return wasSuccessful
      27. End Function


      Nun, dadurch, dass der Login komplett ist, fügen wir die Handler hinzu. Logischerweise muss hierbei zuerst die zu verknüpfende Methode generiert werden.
      AddHandler mainSkype.messageReceived, AddressOf MainSkype_messageReceived
      Anschließend kann sofort der Poll mit Hilfe von mainSkype.StartPoll() gestartet werden.

      Grundsätzlich haben Sie schon alles wesentlich erledigt. Kommen wir nun zum Auslesen von empfangenen Nachrichten.

      Behandeln von Nachrichten
      Dadruch, dass unser Poll nun läuft sowie unsere Handler verknüpft sind können wir mit dem auslesen von Chatnachrichten beginnen.
      Im vorherigen Abschnitt haben wir ja bereits eine Methode für den Handler erstellt. In dieser arbeiten wir nun weiter.
      Diese Methode liefert und direkt die Nachricht als ChatMessage-Objekt. Folglich können Sie einfach abfragen ob es sich um ein Kommando handelt:
      If pMessage.Body.StartsWith(cmdTrigger) Then. Natürlich müssen Sie zuerst einen cmdTrigger festlegen. In meinem Fall ist dieser: "!".
      Anschließend trennen wir den cmdTrigger von möglichen Parametern: Dim cmdArgs As String() = pMessage.Body.Split(CChar(" ")).

      An dieser Stelle eine kleine Einführung in das ChatMessage-Objekt selber:
      Es beinhaltet so gut wie alle relevanten Informationen, wie zum Beispiel Informationen über den Chat selbst, den Sender und logischerweise
      die Nachricht selbst. Wenn Sie nun eine Nachricht schreiben wollen, verändern Sie entweder die Body-Eigenschaft der Nachricht (um eine bereits gesendete zu editieren),
      oder verwenden pMessage.Chat.SendMessage("text").

      Wenn wir nun also weiter fortfahren, kommen wir zu dem Punkt an dem wir unsere erste Nachricht an den Sender zurückgeben:
      Dim rMessage As ChatMessage = pMessage.Chat.SendMessage("Processing your command...")
      Nun, nach diesem Status-Update, parsen wir das Kommando. Ich erledige dies hier auf die wahrscheinlich einfachste (dennoch nicht unbedingt beste) Methode:

      VB.NET-Quellcode

      1. Select Case (cmdArgs(0).Remove(0, cmdTrigger.Length).ToLower())
      2. Case "ping"
      3. rMessage.Body = String.Format("Ping @{0}: Pong", pMessage.Sender.Username)
      4. Case "about"
      5. rMessage.Body = "About this application:" & Environment.NewLine _
      6. & " Tutorial: Gather (vb-paradise):" & Environment.NewLine _
      7. & " https://www.vb-paradise.de/index.php/User/12105-Gather/" & Environment.NewLine _
      8. & " API-Creator: Commodity" & Environment.NewLine
      9. Case Else
      10. rMessage.Body = "This command does not exist. Please type in " & cmdTrigger & "help for a list of all available commands."
      11. End Select


      Wie man sieht, wird eine einfache Select-Abfrage durchlaufen, nach der anschließend bestimmte Aktionen, je nach Kommando, ausgeführt werden.
      Wichtig ist, dass ich hier anstatt dem senden einer neuen Nachricht wie Chat.SendMessage lediglich die Body-Eigenschaft der Nachricht editiere.
      Natürlich müssen Sie dies nicht so machen, es hat jedoch einen etwas schöneren Effekt wenn nicht immer die Nachricht "Processing your command..." in jeder Textnachricht vorhanden ist.
      Ebenfalls sehen Sie, dass in der zurückzugebenden Nachricht (bei Ping) der User, beziehungsweise Sender, selbst direkt angesprochen wird. Wie oben schon erwähnt finden sich Informationen über diesen in dem Sender-Objekt.

      Gründsätzlich ist dieses Tutorial, wenn es nach dem Titel geht, an dieser Stelle schon komplett.
      Dennoch finden Sie in den folgenden Abschnitten noch weitere hiflreiche Informationen bezüglich der Skype4Sharp-Library.


      Abb1: Eine Beispielanwendung welche auf diesem Code aufbaut.
      (Man beachte meine Amazon kaufvorschläge, man merkt dass ich Probleme mit meiner Tastatur hatte...)

      Antworten auf div. Ereignisse
      Ich habe bereits weiter oben erwähnt, dass Sie auch auf Anrufe, Freundschaftsanfragen etc. reagieren können.
      Mit diesen Ereignissen beschäftigen wir uns hier in diesem Abschnitt des Tutorials.

      Freundschaftsanfragen sind relativ simpel. Zuerst sollten Sie einen Handler hinzufügen, wie schon zuvor für normale Nachrichten.
      Anschließend können Sie einfach auf eingehende Anfragen antworten mit .Accept() bzw. .Decline().

      VB.NET-Quellcode

      1. Sub MainSkype_contactRequestReceived(cContact As ContactRequest)
      2. WriteLine(String.Format("[EVENT]: REQUEST_RECEIVED > {0} has added you with the message '{1}'.", cContact.Sender.Username, cContact.Body), ConsoleColor.Magenta) '(leicht veränderte WriteLine Methode)
      3. cContact.Accept()
      4. End Sub

      Natürlich lassen sich hier auch diverse Abfrage durchlaufen, damit zum Beispiel nicht jeder Benutzer angenommen wird. Sie können in diesem Fall einfach erneut die Body-Eigenschaft abfragen.

      Wenn Sie nun mit Hilfe der Library einen Nutzer hinzufügen wollen, können Sie dies zum Beispiel über mainSkype.AddUser("username", "text").
      Entfernen ist folglich ähnlich einfach via mainSkype.RemoveUser("username").

      Chatinteraktion ist mit der Skype4Sharplib ähnlich einfach. Definieren Sie einfach zuerst ein neues Chat-Objekt.
      Anschließend können Sie einfach seine Eigenschaften verändern, User hinzufügen oder entfernen.
      So können Sie zum Beispiel das Thema des Chats mit der Topic-Eigenschaft setzen. User werden einfach über Add() hinzugefügt, und deren Rechte können nun mit SetAdmin() erhöht werden.
      Entfernen funktioniert über Kick() sowie die Gruppe mit Leave() verlassen.

      An dieser Stelle möchte ich noch weitere Evente der Library auflisten (zu finden auch auf GitHub):
      ChatMembersChanged
      ContactReceived
      ContactRequestReceived
      MessageEdited
      MessageReceived
      TopicChange
      CallStarted
      UserRoleChanged
      GroupPictureChanged
      FileReceived

      Vom Prinzip her funktionieren alle ähnlich. Es sollte also hierbei zu keinen wirklichen Komplikationen kommen.
      Natürlich lässt sich das Ganze noch massiv erweitern. Doch an diese Stelle denke ich sollte alles für dieses Tutorial abgedeckt sein.
      Somit komme ich zum Abschluss.




      Das war's!
      An dieser Stelle ist das Tutorial zu Ende. Ich hoffe ich konnte Ihnen weiterhelfen.
      Sie finden ebenfalls die zwei verwendete Libraries im Anhang, jedoch beachten Sie, wie bereits oben erwähnt,
      dass diese höchstwahrscheinlich nicht up-2-date sind. Ich empfehle Ihnen also diese manuell von den Herstellerseiten zu downloaden.
      Ein Beispielprojekt wird höchstwahrscheinlich in naher Zukunft folgen. Dieses wird vermutlich im Source-Code-Austausch veröffentlicht werden.

      Kleiner Vorgeschmack :)

      Ich möchte mich ebenfalls bei c0mmodity, welcher nicht nur der Verfasser dieser Library ist, sondern natürlich auch das englische Tutorial bereitgestellt hat.
      An sich ist dies zwar nicht besonders relevant, ich wollte es dennoch an dieser Stelle erwähnen.

      Falls Ihnen dieses Tutorial gefallen hat können Sie sich gerne noch Weitere von mir durchlesen.
      Sie finden eine Übersicht auf meinem Profil hier: Gather

      Mit freundlichen Grüßen,
      Martin Pfeiffer (Gather)
      Dateien
      • Libraries.zip

        (210,84 kB, 196 mal heruntergeladen, zuletzt: )
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gather“ ()