0

Skype用の大きなアプリ(Skype PWN4G3)を作成しました。その機能の1つは、次のコード行です。

//コントロールの

 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回応答します。

もう1つの非常に奇妙な問題は、Skypeウィンドウを開いて自分の側からメッセージを表示すると、メッセージがすべて再送信されることです。なぜですか?

そして、誰かが私がこれを正しく停止/開始する方法を知っているなら、それは素晴らしいでしょう。また、チャットグループからのメッセージをリッスンせず、PMのみがチャットをリッスンしてから、User.Handleに送信するようにする方法を知っている場合は、送信する方法がない限り、メッセージが送信された場所でチャットします。

4

1 に答える 1

1

1) 2 回、3 回、またはそれ以上返信する - 問題は、skype.MessageStatus += ...botOn をクリックするたびに呼び出されることにあるようです。呼び出す-=か、イベント サブスクリプションが 1 回だけ発生することを確認してください。

2) メッセージの再送信: skype_MessageStatus が 1 つのメッセージに対して 2 回呼び出されています。の値を確認するには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
}
于 2012-04-07T20:42:24.283 に答える