jml java msn_JML 简单的MSN 机器人

http://kenter1643.javaeye.com/blog/306649 的资料给了极大的帮助

1 JML 下载地址:http://sourceforge.net/projects/java-jml/

2 JML 相关地址:http://sourceforge.net/apps/trac/java-jml

3 代码. 请注意 173,174,175行.为指定用户发送消息.和之前代码78行多了窗口关闭。

Java代码 2810187_1.gif

packagecom.isw2.msn;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importnet.sf.jml.MsnContact;

importnet.sf.jml.MsnList;

importnet.sf.jml.MsnMessenger;

importnet.sf.jml.MsnProtocol;

importnet.sf.jml.MsnSwitchboard;

importnet.sf.jml.MsnUserStatus;

importnet.sf.jml.event.MsnAdapter;

importnet.sf.jml.impl.MsnContactImpl;

importnet.sf.jml.impl.MsnMessengerFactory;

importnet.sf.jml.message.MsnControlMessage;

importnet.sf.jml.message.MsnDatacastMessage;

importnet.sf.jml.message.MsnInstantMessage;

importnet.sf.jml.message.MsnSystemMessage;

importnet.sf.jml.message.MsnUnknownMessage;

/**

* @author isw2 zx

*/

publicclassMsntestextendsMsnAdapter {

privateMsnMessenger messenger =null;

privateString email =null, password =null;

/** Creates a new instance of Msntest */

publicMsntest() {

}

publicstaticvoidmain(String args[])throwsClassNotFoundException,

InstantiationException, IllegalAccessException {

Msntest msn = (Msntest) Class.forName("com.isw2.msn.Msntest")

.newInstance();// 创建类实例

msn.setEmail("zhouxianglh@gmail.com");// 设置登录用户

msn.setPassword("123456");// 设置密码

msn.start();

}

// 打印信息

privatestaticvoidmsg(Object obj) {

SimpleDateFormat sdf =newSimpleDateFormat("MM-dd HH:mm");

if(objinstanceofThrowable) {

System.err.println("["+ sdf.format(newDate()) +"] "+ obj);

}else{

System.out.println("["+ sdf.format(newDate()) +"] "+ obj);

}

}

privatevoidstart() {

messenger = MsnMessengerFactory.createMsnMessenger(email, password);// 创建MsnMessenger

messenger

.setSupportedProtocol(newMsnProtocol[] { MsnProtocol.MSNP12 });// 设置登录协议

messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);// 设置用户状态

messenger.addListener(this);// 注册事件

messenger.login();// 登录

}

// 收到正常信息的时候发生

@Override

publicvoidinstantMessageReceived(MsnSwitchboard switchboard,

MsnInstantMessage message, MsnContact contact) {

System.out.println(switchboard.getClass());

msg(contact.getDisplayName() +"对我说:"+ message.getContent());

// 如果聊天内容为exit,退出

if(message.getContent().trim().equalsIgnoreCase("exit")) {

msg(contact.getDisplayName() +"对我发出退出指令。");

messenger.logout();

System.exit(0);

}

message.setDisplayName("isw2 msn");//信息发送者昵称

message.setContent("当前时用户"+ contact.getEmail());// 设置要发送消息内容

message.setFontRGBColor((int) (Math.random() *255*255*255));// 设置消息的文本颜色

messenger.getOwner().setDisplayName("isw2 msn online");//聊天框标题

switchboard.sendMessage(message);// 发送信息

switchboard.close();// 关闭对话框

}

// 收到系统信息的时候发生,登录时

@Override

publicvoidsystemMessageReceived(MsnMessenger messenger,

MsnSystemMessage message) {

// msg(messenger + " recv system message " + message);

}

// 当在联系人聊天窗口获得光标并按下第一个键时发生

@Override

publicvoidcontrolMessageReceived(MsnSwitchboard switchboard,

MsnControlMessage message, MsnContact contact) {

msg(contact.getFriendlyName() +"正在输入文字。");

}

// 异常时发生

@Override

publicvoidexceptionCaught(MsnMessenger messenger, Throwable throwable) {

msg(messenger + throwable.toString());

msg(throwable);

}

// 登录完成时发生

@Override

publicvoidloginCompleted(MsnMessenger messenger) {

msg(messenger.getOwner().getDisplayName() +"登录成功!");

}

// 注销时发生

@Override

publicvoidlogout(MsnMessenger messenger) {

msg(messenger +" logout");

}

// 收到系统广播信息时发生

@Override

publicvoiddatacastMessageReceived(MsnSwitchboard switchboard,

MsnDatacastMessage message, MsnContact friend) {

msg(switchboard +" recv datacast message "+ message);

switchboard.sendMessage(message,false);

}

// 收到目前不能处理的信息时发生

@Override

publicvoidunknownMessageReceived(MsnSwitchboard switchboard,

MsnUnknownMessage message, MsnContact friend) {

// msg(switchboard + " recv unknown message " + message);

}

@Override

publicvoidcontactListInitCompleted(MsnMessenger messenger) {

listContacts();

}

/**

* 更新好友列表完成时发生

*/

@Override

publicvoidcontactListSyncCompleted(MsnMessenger messenger) {

listContacts();

}

/**

* 关闭一个聊天窗口时发生

*/

@Override

publicvoidswitchboardClosed(MsnSwitchboard switchboard) {

msg("switchboardStarted "+ switchboard);

}

/**

* 打开一个聊天窗口时发生

*/

@Override

publicvoidswitchboardStarted(MsnSwitchboard switchboard) {

msg("switchboardStarted "+ switchboard);

}

// 打印联系人

privatevoidlistContacts() {

MsnContact[] cons = messenger.getContactList().getContactsInList(

MsnList.AL);

if(cons.length ==0) {

msg("空");

}else{

msg("你现在有"+ cons.length +"个联系人");

}

for(inti =0; i 

String personal = ((MsnContactImpl) cons[i]).getPersonalMessage()

.equals("") ?"空": ((MsnContactImpl) cons[i])

.getPersonalMessage();

msg(cons[i].getDisplayName() +" "+ cons[i].getEmail() +" "

+ cons[i].getStatus() +" "+ personal);

if(cons[i].getStatus().equals(MsnUserStatus.ONLINE)) {//给在线好友发送消息

messenger.getOwner().setDisplayName("isw2 msn");

messenger.sendText(cons[i].getEmail(),"你好,isw2 msn上线了");

}

}

}

publicString getEmail() {

returnemail;

}

publicvoidsetEmail(String email) {

this.email = email;

}

publicString getPassword() {

returnpassword;

}

publicvoidsetPassword(String password) {

this.password = password;

}

}

package com.isw2.msn;

import java.text.SimpleDateFormat;

import java.util.Date;

import net.sf.jml.MsnContact;

import net.sf.jml.MsnList;

import net.sf.jml.MsnMessenger;

import net.sf.jml.MsnProtocol;

import net.sf.jml.MsnSwitchboard;

import net.sf.jml.MsnUserStatus;

import net.sf.jml.event.MsnAdapter;

import net.sf.jml.impl.MsnContactImpl;

import net.sf.jml.impl.MsnMessengerFactory;

import net.sf.jml.message.MsnControlMessage;

import net.sf.jml.message.MsnDatacastMessage;

import net.sf.jml.message.MsnInstantMessage;

import net.sf.jml.message.MsnSystemMessage;

import net.sf.jml.message.MsnUnknownMessage;

/**

* @author isw2 zx

*/

public class Msntest extends MsnAdapter {

private MsnMessenger messenger = null;

private String email = null, password = null;

/** Creates a new instance of Msntest */

public Msntest() {

}

public static void main(String args[]) throws ClassNotFoundException,

InstantiationException, IllegalAccessException {

Msntest msn = (Msntest) Class.forName("com.isw2.msn.Msntest")

.newInstance();// 创建类实例

msn.setEmail("zhouxianglh@gmail.com");// 设置登录用户

msn.setPassword("123456");// 设置密码

msn.start();

}

// 打印信息

private static void msg(Object obj) {

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");

if (obj instanceof Throwable) {

System.err.println("[" + sdf.format(new Date()) + "] " + obj);

} else {

System.out.println("[" + sdf.format(new Date()) + "] " + obj);

}

}

private void start() {

messenger = MsnMessengerFactory.createMsnMessenger(email, password);// 创建MsnMessenger

messenger

.setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP12 });// 设置登录协议

messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);// 设置用户状态

messenger.addListener(this);// 注册事件

messenger.login();// 登录

}

// 收到正常信息的时候发生

@Override

public void instantMessageReceived(MsnSwitchboard switchboard,

MsnInstantMessage message, MsnContact contact) {

System.out.println(switchboard.getClass());

msg(contact.getDisplayName() + "对我说:" + message.getContent());

// 如果聊天内容为exit,退出

if (message.getContent().trim().equalsIgnoreCase("exit")) {

msg(contact.getDisplayName() + "对我发出退出指令。");

messenger.logout();

System.exit(0);

}

message.setDisplayName("isw2 msn");//信息发送者昵称

message.setContent("当前时用户" + contact.getEmail());// 设置要发送消息内容

message.setFontRGBColor((int) (Math.random() * 255 * 255 * 255));// 设置消息的文本颜色

messenger.getOwner().setDisplayName("isw2 msn online");//聊天框标题

switchboard.sendMessage(message);// 发送信息

switchboard.close();// 关闭对话框

}

// 收到系统信息的时候发生,登录时

@Override

public void systemMessageReceived(MsnMessenger messenger,

MsnSystemMessage message) {

// msg(messenger + " recv system message " + message);

}

// 当在联系人聊天窗口获得光标并按下第一个键时发生

@Override

public void controlMessageReceived(MsnSwitchboard switchboard,

MsnControlMessage message, MsnContact contact) {

msg(contact.getFriendlyName() + "正在输入文字。");

}

// 异常时发生

@Override

public void exceptionCaught(MsnMessenger messenger, Throwable throwable) {

msg(messenger + throwable.toString());

msg(throwable);

}

// 登录完成时发生

@Override

public void loginCompleted(MsnMessenger messenger) {

msg(messenger.getOwner().getDisplayName() + "登录成功!");

}

// 注销时发生

@Override

public void logout(MsnMessenger messenger) {

msg(messenger + " logout");

}

// 收到系统广播信息时发生

@Override

public void datacastMessageReceived(MsnSwitchboard switchboard,

MsnDatacastMessage message, MsnContact friend) {

msg(switchboard + " recv datacast message " + message);

switchboard.sendMessage(message, false);

}

// 收到目前不能处理的信息时发生

@Override

public void unknownMessageReceived(MsnSwitchboard switchboard,

MsnUnknownMessage message, MsnContact friend) {

// msg(switchboard + " recv unknown message " + message);

}

@Override

public void contactListInitCompleted(MsnMessenger messenger) {

listContacts();

}

/**

* 更新好友列表完成时发生

*/

@Override

public void contactListSyncCompleted(MsnMessenger messenger) {

listContacts();

}

/**

* 关闭一个聊天窗口时发生

*/

@Override

public void switchboardClosed(MsnSwitchboard switchboard) {

msg("switchboardStarted " + switchboard);

}

/**

* 打开一个聊天窗口时发生

*/

@Override

public void switchboardStarted(MsnSwitchboard switchboard) {

msg("switchboardStarted " + switchboard);

}

// 打印联系人

private void listContacts() {

MsnContact[] cons = messenger.getContactList().getContactsInList(

MsnList.AL);

if (cons.length == 0) {

msg("空");

} else {

msg("你现在有" + cons.length + "个联系人");

}

for (int i = 0; i < cons.length; i++) {

String personal = ((MsnContactImpl) cons[i]).getPersonalMessage()

.equals("") ? "空" : ((MsnContactImpl) cons[i])

.getPersonalMessage();

msg(cons[i].getDisplayName() + " " + cons[i].getEmail() + " "

+ cons[i].getStatus() + " " + personal);

if (cons[i].getStatus().equals(MsnUserStatus.ONLINE)) {//给在线好友发送消息

messenger.getOwner().setDisplayName("isw2 msn");

messenger.sendText(cons[i].getEmail(), "你好,isw2 msn上线了");

}

}

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

testMSN\lib  下面除了 Jar 包,还有源代码,里面有API 说明.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值