iT邦幫忙

DAY 7
5

我的學習之路系列 第 7

實作一個簡單的MSN機器人-4

雖然我們的這個主題是「MSN機器人」,但是有在使用MSN的人應該都知道,現在的MSN已經和Yahoo即時通可以互相傳送訊息,所以承續上一篇的內容,這一篇我們要試著將訊息傳送給Yahoo即時通的使用者,並且可以接收使用者傳送過來的訊息。
1.加入一個函式,命名為SendYahooMsg,程式碼如下:

    Public Sub SendYahooMsg(ByVal account As String, ByVal msg As String)
        If account.EndsWith(".tw") Then account = account.Substring(0, account.Length - 3)
        Dim contact As Contact = msgr.ContactList.GetContact(account)
        Dim txtMsg As New TextMessage(msg)

        If contact Is Nothing Then Exit Sub

        If contact.Online Then
            msgr.Nameserver.SendCrossNetworkMessage(contact, txtMsg)
        End If

    End Sub

這個函式的程式碼和傳送給MSN的聯絡人所用的程式碼非常的相似,差別只在於MSN的聯絡人若是在線上時,我們是先建立一個Conversation之後再將聯絡人Invite進來,但是Yahoo即時通的聯絡人不需要這樣的程序。
除此之外,這裡有一個非常重要的關鍵需要注意,那就是Yahoo即時通的帳號在MSN的聯絡人清單裡是只有yahoo.com,所以若是台灣的Yahoo即時通的使用者,必須將最後面的.tw拿掉,這樣才可以正常的傳送訊息出去。

2.為了要讓我們實作的MSN機器人可以接收Yahoo即時通的聯絡人所傳送過來的訊息,因此我們必須在建構函式中加上以下的事件繫結程式碼:

AddHandler msgr.Nameserver.CrossNetworkMessageReceived, AddressOf CrossNetworkMessageReceived

3.完成第二步的事件繫結後,我們需要加上CrossNetworkMessageReceived函式,程式碼如下:

    Private Sub CrossNetworkMessageReceived(ByVal sender As Object, ByVal e As CrossNetworkMessageEventArgs)
        '透過判斷訊息類型來決定接下來的動作。
        'Yahoo即時通的訊息視窗在輸入訊息時的通知也是透過這個事件函式來傳達的。
        If e.MessageType = NetworkMessageType.Text Then
            SendYahooMsg(e.From.Mail, "Hi," & e.From.Name & "你好,我是測試的MSN機器人,請多多指教!")
        End If
    End Sub

在這個函式中,Yahoo即時通所傳送過來的訊息相關資訊會被放在e這個事件參數,但是因為Yahoo即時通的相關訊息通知都是透過這個函式,所以我們必須判斷e.MessageType,看是不是Text類型,如果是的話才代表是使用者實際輸入的內容,另外還有Typing的類型,代表的是使用者正在輸入文字的通知訊息。

透過以上的程式碼,我們已經可以達到發送訊息給MSN和Yahoo的聯絡人了,這樣子已經足以製作一個非常實用的機器人代理程式,或者是自己設計即時通訊的介面了,有興趣的朋友們可以嘗試看看喔!

如果你覺得這篇內容不錯的話,也希望你能夠按個「推」支持一下囉!若是有其它實作上的心得或經驗,也歡迎分享。開心

實作簡單的MSN機器人系列文章:
實作一個簡單的MSN機器人
實作一個簡單的MSN機器人-2
實作一個簡單的MSN機器人-3
實作一個簡單的MSN機器人-4
實作一個簡單的MSN機器人-5


上一篇
實作一個簡單的MSN機器人-3
下一篇
實作一個簡單的MSN機器人-5
系列文
我的學習之路14

尚未有邦友留言

立即登入留言