close
話說之前就一直想寫一隻msn機器人來玩,但是當時只會php,所以

只找用php寫的msn bot,後來因為技術門檻太高而放棄。如今會了一些java

趁著假日閒來無事搜尋一下,發現有個好用的msn lib可用



 jmsn-是一個韓國人寫的msn,不僅提供了軟體,也提供了他實做msn協定的lib

http://sourceforge.net/projects/jmsn/    <----他的sourceForge頁面

到download的地方選msnm-lib下載


這個lib是用java實做的,包成了jar檔,只要在開發時匯入即可使用

雖然有api文件可是裡面寫的是韓文= =

所以只好看網路上一些範例程式跟著作

參考一些範例寫出來的:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;

import rath.msnm.BuddyList;
import rath.msnm.MSNMessenger;
import rath.msnm.SwitchboardSession;
import rath.msnm.UserStatus;
import rath.msnm.entity.MsnFriend;
import rath.msnm.event.MsnAdapter;
import rath.msnm.msg.MimeMessage;

/**
 * MSN消息事件處理類
 * @author Liudong
 */
class MSNAdapter extends MsnAdapter {
    MSNMessenger messenger;
    public MSNAdapter(MSNMessenger messenger) {
        this.messenger = messenger;
    }
    /**
     * 某人正在輸入信息
     */
    public void progressTyping(
        SwitchboardSession ss,
        MsnFriend friend,
        String typingUser) {
        System.out.println(friend.getLoginName() + "正在輸入訊息...");
    }
    /**
     * 收到消息的時候執行該方法
     */
    public void instantMessageReceived(
        SwitchboardSession ss,
        MsnFriend friend,
        MimeMessage mime) {
        System.out.print("接收到訊息:" + friend.getFriendlyName() + "->");
        System.out.println(mime.getMessage());
        try {
            //接收到消息之後可以打字傳回去,目前還有點問題只能傳一行
            BufferedReader bufferReader = new BufferedReader(
                      new InputStreamReader(System.in));
            mime.setMessage( bufferReader.readLine() );
            messenger.sendMessage(friend.getLoginName(), mime);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 登錄成功後執行該方法
     */
    public void loginComplete(MsnFriend own) {
        System.out.println(own.getLoginName() + " Login OK");
        showFriends();
    }
    /**
     * 登錄失敗後執行該方法
     */
    public void loginError(String header) {
        System.out.println("Login Failed: " + header);
    }
    /**
     * 好友離線時執行該方法
     */
    public void userOffline(String loginName) {
        System.out.println("USER " + loginName + " Logout.");
    }
    /**
     * 好友上線時執行該方法
     */
    public void userOnline(MsnFriend friend) {
        System.out.println("USER "+friend.getFriendlyName()+" Login.");
    }
    /**
     * 有人加我為好友時執行
     */
    public void whoAddedMe(MsnFriend friend) {
        System.out.println("USER " + friend.getLoginName() + " Addme.");
        try {
            messenger.addFriend(friend.getLoginName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 有人把我從好友列表中刪除時執行
     */
    public void whoRemovedMe(MsnFriend friend) {
    System.out.println("USER "+friend.getLoginName()+" Remove me.");
        try {
            messenger.removeFriend(friend.getLoginName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
     /**
       * 顯示好友列表
       * 自定義函數
       */
      public void showFriends() {
       BuddyList bl = messenger.getBuddyGroup().getForwardList();//得到好友列表
                String loginNames ="";
                for (Iterator i = bl.iterator(); i.hasNext();) {
                    MsnFriend friend = (MsnFriend) i.next();
                    loginNames = friend.getLoginName();//得到好友的email名字
                    if ( friend.getStatus().equals(UserStatus.OFFLINE)) {//如果這個好友不在線
                     loginNames=loginNames+"<離線>";
                    }
                    if ( friend.getStatus().equals(UserStatus.ONLINE)) {//如果這個好友在線
                     loginNames=loginNames+"<當前在線>";
                    }
                    System.out.println(loginNames);
                }
      }
}



















還需要一個class當程式進入點:


import java.io.IOException;

import rath.msnm.MSNMessenger;
import rath.msnm.UserStatus;
import rath.msnm.msg.MimeMessage;
import main.MSNAdapter;

public class MSNDaemon extends Thread {
    private static MSNMessenger msn;
    public static void main(String[] args) {
        msn = new MSNMessenger("your-email account", "password");
        msn.setInitialStatus(UserStatus.ONLINE);
        msn.addMsnListener(new MSNAdapter(msn));
        msn.login();
        System.out.println("Waiting for the response....");
        //捕捉Ctrl+C的輸入以便註銷MSN的登錄
        Runtime.getRuntime().addShutdownHook(new MSNDaemon());
    }
    /**
     * 用戶中止程序執行
     */
    public void run() {
        msn.logout();
        System.out.println("MSN Logout OK");
    }
}
arrow
arrow
    全站熱搜

    fallingrain8 發表在 痞客邦 留言(1) 人氣()