2012-04-25 31 views
10

Tôi đã cố gắng tạo một "Bot Skype" trong C#. Cho đến nay tôi đã thành công để có thể làm cho nó hoạt động trong một cuộc trò chuyện. Tôi không thể làm cho nó hoạt động trong các cuộc trò chuyện nhóm. Đây là nguồn của tôi:Làm cách nào để gửi tin nhắn trong cuộc trò chuyện nhóm trong Skype với 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; 
     } 
    } 
} 

đâu nó sẽ gửi thông điệp xử lý tôi nhận được lỗi "Không quá tải cho phương pháp 'SendMessage' mất 2 đối số".

Tuy nhiên khi tôi sử dụng:

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

Nó hoạt động hoàn hảo, nhưng không phải trong cùng nhóm chat. Bạn có đề nghị nào không?

Trả lời

22

Cố gắng sử dụng

msg.Chat.SendMessage("your message") 

để thay thế.

Tốt nhất

+0

Hoạt động tuyệt vời, cảm ơn bạn rất nhiều. – user1356292

+5

@ user1356292, vì bài đăng Vagaus trả lời câu hỏi của bạn và nó cũng phù hợp với bạn. Bạn nên chấp nhận nó như là câu trả lời, hoặc upvoted nó ít nhất. Không có hành vi phạm tội, chỉ là một nhiệm vụ đạo đức. – Saim

Các vấn đề liên quan