分享

JML 简单的MSN 机器人

 KILLKISS 2010-04-09

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

 

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

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

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

Java代码 复制代码
  1. package com.isw2.msn;   
  2.   
  3. import java.text.SimpleDateFormat;   
  4. import java.util.Date;   
  5. import net.sf.jml.MsnContact;   
  6. import net.sf.jml.MsnList;   
  7. import net.sf.jml.MsnMessenger;   
  8. import net.sf.jml.MsnProtocol;   
  9. import net.sf.jml.MsnSwitchboard;   
  10. import net.sf.jml.MsnUserStatus;   
  11. import net.sf.jml.event.MsnAdapter;   
  12. import net.sf.jml.impl.MsnContactImpl;   
  13. import net.sf.jml.impl.MsnMessengerFactory;   
  14. import net.sf.jml.message.MsnControlMessage;   
  15. import net.sf.jml.message.MsnDatacastMessage;   
  16. import net.sf.jml.message.MsnInstantMessage;   
  17. import net.sf.jml.message.MsnSystemMessage;   
  18. import net.sf.jml.message.MsnUnknownMessage;   
  19.   
  20. /**  
  21.  * @author isw2 zx  
  22.  */  
  23. public class Msntest extends MsnAdapter {   
  24.   
  25.     private MsnMessenger messenger = null;   
  26.     private String email = null, password = null;   
  27.   
  28.     /** Creates a new instance of Msntest */  
  29.     public Msntest() {   
  30.     }   
  31.   
  32.     public static void main(String args[]) throws ClassNotFoundException,   
  33.             InstantiationException, IllegalAccessException {   
  34.         Msntest msn = (Msntest) Class.forName("com.isw2.msn.Msntest")   
  35.                 .newInstance();// 创建类实例   
  36.         msn.setEmail("zhouxianglh@gmail.com");// 设置登录用户   
  37.         msn.setPassword("123456");// 设置密码   
  38.         msn.start();   
  39.     }   
  40.   
  41.     // 打印信息   
  42.     private static void msg(Object obj) {   
  43.         SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");   
  44.         if (obj instanceof Throwable) {   
  45.             System.err.println("[" + sdf.format(new Date()) + "] " + obj);   
  46.         } else {   
  47.             System.out.println("[" + sdf.format(new Date()) + "] " + obj);   
  48.         }   
  49.     }   
  50.   
  51.     private void start() {   
  52.         messenger = MsnMessengerFactory.createMsnMessenger(email, password);// 创建MsnMessenger   
  53.         messenger   
  54.                 .setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP12 });// 设置登录协议   
  55.         messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);// 设置用户状态   
  56.         messenger.addListener(this);// 注册事件   
  57.         messenger.login();// 登录   
  58.   
  59.     }   
  60.   
  61.     // 收到正常信息的时候发生   
  62.     @Override  
  63.     public void instantMessageReceived(MsnSwitchboard switchboard,   
  64.             MsnInstantMessage message, MsnContact contact) {   
  65.         System.out.println(switchboard.getClass());   
  66.         msg(contact.getDisplayName() + "对我说:" + message.getContent());   
  67.         // 如果聊天内容为exit,退出   
  68.         if (message.getContent().trim().equalsIgnoreCase("exit")) {   
  69.             msg(contact.getDisplayName() + "对我发出退出指令。");   
  70.             messenger.logout();   
  71.             System.exit(0);   
  72.         }   
  73.         message.setDisplayName("isw2 msn");//信息发送者昵称   
  74.         message.setContent("当前时用户" + contact.getEmail());// 设置要发送消息内容   
  75.         message.setFontRGBColor((int) (Math.random() * 255 * 255 * 255));// 设置消息的文本颜色   
  76.         messenger.getOwner().setDisplayName("isw2 msn online");//聊天框标题   
  77.         switchboard.sendMessage(message);// 发送信息   
  78.         switchboard.close();// 关闭对话框   
  79.     }   
  80.   
  81.     // 收到系统信息的时候发生,登录时   
  82.     @Override  
  83.     public void systemMessageReceived(MsnMessenger messenger,   
  84.             MsnSystemMessage message) {   
  85.         // msg(messenger + " recv system message " + message);   
  86.     }   
  87.   
  88.     // 当在联系人聊天窗口获得光标并按下第一个键时发生   
  89.     @Override  
  90.     public void controlMessageReceived(MsnSwitchboard switchboard,   
  91.             MsnControlMessage message, MsnContact contact) {   
  92.         msg(contact.getFriendlyName() + "正在输入文字。");   
  93.     }   
  94.   
  95.     // 异常时发生   
  96.     @Override  
  97.     public void exceptionCaught(MsnMessenger messenger, Throwable throwable) {   
  98.         msg(messenger + throwable.toString());   
  99.         msg(throwable);   
  100.     }   
  101.   
  102.     // 登录完成时发生   
  103.     @Override  
  104.     public void loginCompleted(MsnMessenger messenger) {   
  105.         msg(messenger.getOwner().getDisplayName() + "登录成功!");   
  106.     }   
  107.   
  108.     // 注销时发生   
  109.     @Override  
  110.     public void logout(MsnMessenger messenger) {   
  111.         msg(messenger + " logout");   
  112.     }   
  113.   
  114.     // 收到系统广播信息时发生   
  115.     @Override  
  116.     public void datacastMessageReceived(MsnSwitchboard switchboard,   
  117.             MsnDatacastMessage message, MsnContact friend) {   
  118.         msg(switchboard + " recv datacast message " + message);   
  119.         switchboard.sendMessage(message, false);   
  120.     }   
  121.   
  122.     // 收到目前不能处理的信息时发生   
  123.     @Override  
  124.     public void unknownMessageReceived(MsnSwitchboard switchboard,   
  125.             MsnUnknownMessage message, MsnContact friend) {   
  126.         // msg(switchboard + " recv unknown message " + message);   
  127.     }   
  128.   
  129.     @Override  
  130.     public void contactListInitCompleted(MsnMessenger messenger) {   
  131.         listContacts();   
  132.     }   
  133.   
  134.     /**  
  135.      * 更新好友列表完成时发生  
  136.      */  
  137.     @Override  
  138.     public void contactListSyncCompleted(MsnMessenger messenger) {   
  139.         listContacts();   
  140.     }   
  141.   
  142.     /**  
  143.      * 关闭一个聊天窗口时发生  
  144.      */  
  145.     @Override  
  146.     public void switchboardClosed(MsnSwitchboard switchboard) {   
  147.         msg("switchboardStarted " + switchboard);   
  148.     }   
  149.   
  150.     /**  
  151.      * 打开一个聊天窗口时发生  
  152.      */  
  153.     @Override  
  154.     public void switchboardStarted(MsnSwitchboard switchboard) {   
  155.         msg("switchboardStarted " + switchboard);   
  156.     }   
  157.   
  158.     // 打印联系人   
  159.     private void listContacts() {   
  160.         MsnContact[] cons = messenger.getContactList().getContactsInList(   
  161.                 MsnList.AL);   
  162.         if (cons.length == 0) {   
  163.             msg("空");   
  164.         } else {   
  165.             msg("你现在有" + cons.length + "个联系人");   
  166.         }   
  167.         for (int i = 0; i < cons.length; i++) {   
  168.             String personal = ((MsnContactImpl) cons[i]).getPersonalMessage()   
  169.                     .equals("") ? "空" : ((MsnContactImpl) cons[i])   
  170.                     .getPersonalMessage();   
  171.             msg(cons[i].getDisplayName() + " " + cons[i].getEmail() + " "  
  172.                     + cons[i].getStatus() + " " + personal);   
  173.             if (cons[i].getStatus().equals(MsnUserStatus.ONLINE)) {//给在线好友发送消息   
  174.                 messenger.getOwner().setDisplayName("isw2 msn");   
  175.                 messenger.sendText(cons[i].getEmail(), "你好,isw2 msn上线了");   
  176.             }   
  177.         }   
  178.     }   
  179.   
  180.     public String getEmail() {   
  181.         return email;   
  182.     }   
  183.   
  184.     public void setEmail(String email) {   
  185.         this.email = email;   
  186.     }   
  187.   
  188.     public String getPassword() {   
  189.         return password;   
  190.     }   
  191.   
  192.     public void setPassword(String password) {   
  193.         this.password = password;   
  194.     }   
  195. }  

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多