Skype API的帮助和行为非常奇怪

时间:2012-04-05 04:02:17

标签: api skype

我为Skype做了一个很棒的应用程序(Skype PWN4G3),它的一个功能就是这些代码:

//控制的

 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;
        }

//函数

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)
        {
        }

    }
} 

现在我的问题是这个代码工作很棒,如果他们说某个单词,它会自动回复一个人。但这是非常奇怪的表演。 如果您启动最小化Skype窗口的机器人并让它完成它的工作它会很好,直到您停止然后启动它或将单选按钮从“精确”更改为“包含”,然后下次运行它将回复2次,然后,如果再次执行上述操作,它将回复3次,依此类推,

另一个非常奇怪的问题是,一旦你打开Skype窗口并查看来自你身边的消息,它就会再次重新启动它们。知道为什么吗?

还有一个额外的,如果有人知道如何正确停止/启动这将是太棒了。如果你知道如何做到这一点,那么这将不会收听来自聊天组的消息,只有PM会很好,因为现在它会听取聊天然后发送给User.Handle,除非我能通过某种方式让它发送到聊天消息的发送地点。

1 个答案:

答案 0 :(得分:1)

1)回复2次,3次以上 - 似乎每次点击botOn时都会调用skype.MessageStatus += ...中的问题。请致电-=或确保事件订阅仅发生一次。

2)再次发送消息:正在为一条消息调用skype_MessageStatus两次 - 检查SKYPE4COMLib.TChatMessageStatus cmsSending / cmsReceived - 当消息传递时,当目标用户点击并实际查看消息时cmsSent / cmsRead - 所以你需要的只是要做的是检查SKYPE4COMLib.TChatMessageStatus Status

的值

3)在代码中测试直接消息和聊天组之间的差异

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
}