以 MSNPsharp v5 實作間單的 MSN robot(二):互動對答
A happy robot is doing his job. |
怎麼實作?
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類別最主要是要提供未分類的資料一個快速的查詢、操作暫存於記憶體空間,假設你傳送太大檔案可能會使得程式崩潰,甚至系統崩潰。
結論
有個你說東他不敢往西的機器人服務真好,希望大家都能製作屬於自己的機器人。若是有其他有趣的應用情境,不妨提出來討論討論。
留言
張貼留言