話說之前就一直想寫一隻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");
}
}
- Jul 28 Mon 2008 12:24
Msn機器人-入門教學
close
全站熱搜
留言列表