以 MSNPsharp v5 實作間單的 MSN robot(二):互動對答

A happy robot is doing his job.
繼續上一篇的 介紹文章 後,若是我們想要跟機器人互動該怎麼作?身為一個稱職的MSN機器人,必定要學會互動文字對答,提供特定服務。今天就來試試看如何互動。

怎麼實作?

MSN機器人互動最方便的作法就是文字應答。輸入特定指令後,機器人依據指令進行特定服務(例如:檢查server狀態、檢查聯若人清單、找尋檔案等等)。除了文字應答,另外一個重要的互動功能就是檔案傳輸,依據指令找尋檔案並自動傳輸檔案。

以下為我的應答流程:
1.傳送指令
2.機器人讀取指令
3.回應結果

文字應答

成功登入MSN的下一步,請加入監聽文字訊息的eventhandler。需要注意的是MSN訊息有容量限制,大約400個字元,若是超過的話會無法送出訊息。

static Messenger messenger = new Messenger();
/*中接省略,登入流程請參閱前一篇文章。*/
messenger.Nameserver.TextMessageReceived += new EventHandler<TextMessageArrivedEventArgs>( TextMessageArrived_process );

接著新增事件發生時必要執行的處理方法TextMessageArrived_process。

static void  TextMessageArrived_process (object sender, TextMessageArrivedEventArgs e)
{
     /* 接收文字訊息。*/
     string arrivedMsg =  e.TextMessage.ToString() ;
     /* 判斷指令種類。*/
     switch (arrivedMsg)
     {
         case "command1":/*中間省略,執行服務一。*/
              /* 回應執行結果。*/
              messenger.SendTextMessage(e.OriginalSender, "您輸入的是指令一");
              break;
         case "command2":/*中間省略,執行服務二。*/
               /* 回應執行結果。*/
              messenger.SendTextMessage(e.OriginalSender, "您輸入的是指令二");
              break;
         default:
              string sendMsg = "command1 指令一\r\n"
                                           + "command2 指令二\r\n";
              messenger.SendTextMessage(e.OriginalSender, sendMsg);
              break;
      }
}

檔案傳輸

傳檔案非常簡單,以 filestream 打開檔案,然後傳送。

FileStream fs = new FileStream("檔案路徑", FileMode.Open);
messenger.SendFile(e.OriginalSender, "檔案路徑" , fs);

請不要傳送太大檔案,因為FileStream類別最主要是要提供未分類的資料一個快速的查詢、操作暫存於記憶體空間,假設你傳送太大檔案可能會使得程式崩潰,甚至系統崩潰。

結論

有個你說東他不敢往西的機器人服務真好,希望大家都能製作屬於自己的機器人。若是有其他有趣的應用情境,不妨提出來討論討論。

留言

這個網誌中的熱門文章

資安JAVA(八):HTTP強制傳輸安全(HSTS)

以 SharpPcap 實作可收聽封包的 C# 程式

資安JAVA(四):Session Cookie HTTPOnly Flag