2012-04-05 11 views
0

ich eine große App für Skype gemacht haben genannt (Skype PWN4G3) eines seiner Merkmale sind diese Codezeilen:Skype API Hilfe und wirkt sehr seltsam

// Control

private void botOn_Click(object sender, EventArgs e) 
     { 
      if (toolStripLabel5.Text == "Not attached") 
      { 
       MessageBox.Show(notAttached, "Skype Pwnage - Info!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
      } 
      else 
      { 
       botStop = false; 
       skype.Attach(7, false); 
       skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus); 
       botOn.Text = "Running"; 
       botOn.Enabled = false; 
       botOff.Enabled = true; 
      } 
     } 

     private void botOff_Click(object sender, EventArgs e) 
     { 
      botStop = true; 
      botOn.Text = "Enable"; 
      botOn.Enabled = true; 
      botOff.Enabled = false; 
     } 

// Funktion

private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status) 
{ 
    if (botStop == true) 
    { 
    } 
    else 
    { 
     try 
     { 
      string command = msg.Body.Remove(0, trigger.Length).ToLower(); 
      string[] lines = richTextBox4.Text.Split('\n'); 
      foreach (string ln in lines) 
      { 
       string[] commands = ln.Split(':'); 
       if (radioButton6.Checked == true) 
       { 
        if (command.Contains(commands[0])) 
        { 
         listBox2.Items.Add(DateTime.Now +"> "+ commands[0]); 
         skype.SendMessage(msg.Sender.Handle, string.Format(commands[1])); 
         break; 
        } 
       } 
        if (radioButton4.Checked == true) 
        { 
         if (command == commands[0]) 
         { 
          listBox2.Items.Add(DateTime.Now + "> " + commands[0]); 
          skype.SendMessage(msg.Sender.Handle, string.Format(commands[1])); 
          break; 
         } 
        } 
       } 
      } 
     catch (Exception err0) 
     { 
     } 

    } 
} 

Jetzt ist mein Problem das der Code Arbeit groß und es wird automatisch an einer Person antworten, wenn sie ein bestimmtes Wort zu sagen. Aber es ist sehr seltsam Schauspielerei. Wenn Sie den Bot mit dem Skype-Fenster minimieren und lassen Sie es tun es funktioniert es großartig, bis Sie aufhören, dann starten Sie es oder ändern Sie den Radio-Button von "Exact" zu "Enthält", dann das nächste Mal es wird 2 mal antworten Wenn Sie das obige erneut tun, wird es 3 mal antworten und so weiter.

Ein anderes sehr merkwürdiges Problem ist, dass, sobald Sie Ihr Skype-Fenster öffnen und die Nachrichten von Ihrer Seite sehen, es alle wieder aufruft. Irgendeine Idee warum?

Und noch ein Extra, wenn jemand weiß, wie ich das richtig stoppen/starten kann, wäre das fantastisch. Und wenn Sie wissen, wie man es so macht, wird dies nicht auf Nachrichten von Chat-Gruppen und nur PMs hören, das wäre toll, weil es jetzt chat hören und dann an User.Handle senden wird, wenn ich nicht irgendwie einen Weg finden kann Chat, wo die Nachricht gesendet wurde.

Antwort

1

1) antworten Sie 2, 3 und mehrmals - es scheint, dass das Problem in skype.MessageStatus += ... ist, die jedes Mal aufgerufen wird, wenn Sie auf BotOn klicken. Rufen Sie entweder -= an oder stellen Sie sicher, dass das Ereignis-Abonnement nur einmal stattfindet.

2) Senden der Nachricht wieder: skype_MessageStatus für eine Nachricht zweimal aufgerufen wird - überprüfen SKYPE4COMLib.TChatMessageStatus cmsSending/cmsReceived - wenn die Nachricht und cmsSent/cmsRead wenn Ziel Benutzer klickt geliefert und sieht die Nachricht tatsächlich - so Sie alle tun muß, ist, den Wert von SKYPE4COMLib.TChatMessageStatus Status

3) überprüfen Unterschied zwischen direkten Nachrichten zu machen und Chat-Gruppen in Ihrem Code zu testen

SKYPE4COMLib.ChatMessage pMessage; 
if (pMessage.Chat.Members.Count == 2) 
{ 
    // process direct messages 
} 
else if(pMessage.Chat.Members.Count > 2) 
{ 
    // do whatever you want to do to process chat messages 
} 
Verwandte Themen