Skype API помогает и ведет себя очень странно

Я сделал большое приложение для 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 и позволяете ему работать, он работает отлично, пока вы не остановите его, затем не запустите его или не измените переключатель с "Exact" на "Contains", тогда при следующем запуске он ответит 2 раза, тогда, если вы сделаете вышеупомянутое снова, он ответит 3 раза и так далее,

Еще одна очень странная проблема заключается в том, что как только вы открываете окно Skype и просматриваете сообщения со своей стороны, оно снова отправляет их снова. Есть идеи почему?

И еще один дополнительный, если кто-нибудь знает, как я могу остановить / запустить это правильно, это было бы здорово. И если вы знаете, как сделать так, чтобы это не прослушивало сообщения от групп чата, а только для PM, это было бы замечательно, потому что сейчас он будет слушать чат, а затем отправлять в User.Handle, если я не смогу каким-либо образом отправить его в чат, где сообщение было отправлено.

1 ответ

1) отвечайте 2, 3 и более раз - похоже, проблема в skype.MessageStatus += ... это вызывается каждый раз, когда вы нажимаете на botOn. Либо позвони -= или убедитесь, что подписка на событие происходит только один раз.

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
}
Другие вопросы по тегам