当前位置: 首页 > 工具软件 > jMSN > 使用案例 >

使用jMsn来编程MSN

连德水
2023-12-01

          
最近同事做了一个聊天的机器人,觉得挺有意思的,就问他怎么实现的。原来是一个叫jMsn的工具,可惜是韩国人做的,文档都是韩文的。
去下载了开发包msnmlib-1.2.2-src.zip,然后上网看了几篇文章,用起来还是挺简单的。

基本的用法
    msn = new MSNMessenger("xxx@hotmail.com", "passwd");
    msn.setInitialStatus(UserStatus.ONLINE);
    msn.addMsnListener(new MSNAdapter(msn));
    msn.login();
    System.out.println("Waiting for the response....");
    try {
      System.in.read();
    }
    catch (IOException ex) {
    }
    System.out.println("logout");
    msn.logout();
关键是实现一个MsnAdapter接口,当收到数据时,有人加自己为好友是应该做些什么

比如如下代码实现了:有人加自己,自己就加他。别人对自己说什么,自己也说一样的话这样的功能。代码比较易读。

  /**
   * 某人正在输入信息
   */
  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 {
      //发送相同的回复信息给发送者
      messenger.sendMessage(friend.getLoginName(), mime);
    }
    catch (Exception e) {
      e.printStackTrace();
    }

  }

  /**
   * 登录成功后执行该方法
   */
  public void loginComplete(MsnFriend own) {
    System.out.println(own.getLoginName() + " Login OK");
  }

  /**
   * 登录失败后执行该方法
   */
  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 List<String> getBuddyList(MSNMessenger msn) {
    BuddyGroup buddyGroup = msn.getBuddyGroup();
    BuddyList buddyList = buddyGroup.getForwardList();
    List list = null;
    // check.
    if (buddyList == null || buddyList.size() < 1)
      return null;

    for (int i = 0; i < buddyList.size(); i++) {
      list = (list == null) ? new ArrayList() : list;
      String fname = buddyList.get(i).getLoginName();
      //list.add(buddyList.get(i).getStatus()+"");
      list.add(fname);
    }
    return list;
  }


还有就是主动发消息
搜索到的文章是:
最近好多网上的朋友发邮件询问如何通过jMSN主动发送消息的问题,现在给出解决的代码如下:
String lastLogin = "test@hotmail.com";
messenger.doCall(lastLogin);
Thread.sleep(1000);//最好在此有所延迟,要不SwitchboardSession创建容易失败
SwitchboardSession ss = messenger.doCallWait(lastLogin);
MimeMessage msg = new MimeMessage();
msg.setKind(MimeMessage.KIND_MESSAGE);
msg.setMessage("你好,周末愉快!");
ss.sendInstantMessage(msg);
文章出处:http://www.diybl.com/course/3_program/java/javashl/200899/141457.html

可惜我试过不好使
另外找到一个方法就是在MsnAdapter接口里实现如下方法

  public void whoJoinSession( SwitchboardSession ss, final MsnFriend join )
    {
        boolean success=true;
        String loginName = join.getLoginName();
            if( ss.getSessionId()==null )
                return;
            MimeMessage msg = new MimeMessage("你好,这是机器人自动与你通话。");
            msg.setKind(MimeMessage.KIND_MESSAGE);
            try
            {
                success = messenger.sendMessage(ss.getMsnFriend().
                    getLoginName(), msg);
            }
            catch(Exception e)
            {e.printStackTrace();
            }

    }

    然后用如下代码触发事件
      String lastLogin="xx@hotmail.com";
      messenger.setMyStatus(UserStatus.ONLINE);
      messenger.doCall(lastLogin);

      SwitchboardSession ss = messenger.doCallWait(lastLogin);  //这个会建立于xx@hotmail.com的连接。如果成功,就会调用上面的whoJoinSession方法
      //当然可以在whoJoinSession方法里判断一下是谁(MsnFriend join),然后更加不同的人说不同的话

      发送笑脸之类的可以设置 msg.setKind(2); String 为:|等

 类似资料: