2012-04-25 3 views
10

Я пытался создать «Skype Bot» на C#. До сих пор мне удалось заставить его работать в одном чате. Я не могу заставить его работать в групповых чатах. Вот мой источник:Как отправить сообщение в групповом чате в Skype с помощью Skype4COM?

using System; 
using System.Windows.Forms; 
using SKYPE4COMLib; 

namespace SkypeBot 
{ 
    public partial class Form1 : Form 
    { 
     private Skype skype; 
     private const string trigger = "!"; // Say !help 
     private const string nick = "Bot"; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      skype = new Skype(); 
      // Use skype protocol version 7 
      skype.Attach(7, false); 
      // Listen 
      skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus); 
     } 
     private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status) 
     { 
      if (TChatMessageStatus.cmsRead == status) 
      { 
       return; 
      } 

      if (msg.Body.IndexOf(trigger) == 0 && TChatMessageStatus.cmsReceived == status) 
      { 
       // Remove trigger string and make lower case 
       string command = msg.Body.Remove(0, trigger.Length).ToLower(); 

       // Send processed message back to skype chat window 
       skype.SendMessage(msg.Sender.Handle, nick + " Says: " + ProcessCommand(command)); 
       IChat ichat = skype.get_Chat(msg.Chat.Name); 
       ichat.SendMessage(msg.Sender.Handle, nick + " Says: " + ProcessCommand(command)); 
      } 
     } 

     private string ProcessCommand(string str) 
     { 
      string result; 
      switch (str) 
      { 
       case "help": 
        result = "Sorry no help available"; 
        break; 
       case "date": 
        result = "Current Date is: " + DateTime.Now.ToLongDateString(); 
        break; 
       case "time": 
        result = "Current Time is: " + DateTime.Now.ToLongTimeString(); 
        break; 
       case "who": 
        result = "I am Bot, a magical Skype robot!"; 
        break; 
       case "moon": 
        result = "(moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) (moon) "; 
        break; 
       default: 
        result = "Sorry, I do not recognize your command"; 
        break; 
      } 

      return result; 
     } 
    } 
} 

Где он посылает обработанное сообщение я получаю сообщение об ошибке «Нет перегрузки метода„SendMessage“не принимает 2 аргумента».

Однако, когда я использую:

skype.SendMessage(msg.Sender.Handle, nick + " Says: " + 
     ProcessCommand(command)); 

Он отлично работает, но не в групповых чатах. Есть ли у вас какие-либо предложения?

ответ

22

Попробуйте использовать

msg.Chat.SendMessage("your message") 

вместо этого.

Best

+0

Отлично работает, большое вам спасибо. – user1356292

+5

@ user1356292, так как сообщение Vagaus отвечает на ваш вопрос, и это сработало и для вас. Вы должны были принять это как ответ или хотя бы поддержать его. Не обижайтесь, просто моральный долг. – Saim