JAVA MSN机器人主要代码开放

来源:互联网 发布:如何做网络推广 编辑:程序博客网 时间:2024/06/10 08:25
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

一直想把这个JAVA机器人的主要代码公开(虽然不是什么好东西~~但偶们要坚持开源~~提供给其他刚接触JAVA MSN的人参考)~~虽然偶和WENSI写的比较初级而且方法很多都比较傻,想在完善下在发布,不过昨天我尝到了不开源的弊端~~~我的系统突然坏了,C盘数据都没保留下来,其中就包括了以前MSN机器人的代码备份,如果我要是开源了还能在网上找到~~-_-!!

说明:先将JAVA MSN里的lib导入的包里,然后使用下面的代码,这个代码完成MSN机器人的操作。

(可能有比较笨的方法,变量方法的命名也不规范,还请指正,如果哪位会设置头像或建立数据库连接池请说说怎么做,现在这个机器人不能支持很多人,谢谢)

 

import JAVA.sql.*;import JAVA.net.*;import rath.MSNm.*;import rath.MSNm.MSNMessenger;import rath.MSNm.SwitchboardSession;import rath.MSNm.UserStatus;import rath.MSNm.entity.Group;import rath.MSNm.entity.MSNFriend;import rath.MSNm.event.MSNAdapter;import rath.MSNm.msg.MimeMessage;import JAVA.util.*;import com.google.soap.search.*;import com.google.soap.search.GoogleSearch;import com.google.soap.search.GoogleSearchResult;import JAVA.io.*;

/** * MSN消息事件处理类 * @author 瞄瞄,wensi */public class MSNAdapter    extends MSNAdapter {  MSNIn MSNin = new MSNIn();  static String searchcon;  static String firstfriend;  static String friendlist;  String rewa = "";  String msg3;  MSNMessenger messenger;  String url = "jdbc:odbc:chat";  ////数据源  String login = "";            //用户名  String password = "";      //密码  Connection connection = null; // 声明Connection接口对象connection  ResultSet rSet = null; // 定义数据库查询的结果集  ResultSet keySet = null;  Statement statement = null; // 定义查询数据库的Statement对象

  public MSNAdapter(MSNMessenger messenger) {    this.messenger = messenger;  }

  public void MSNmsg(String msg) {    msg3 = msg;    MSNin.textArea2.append(msg3 + "");  }

  /**   * 某人正在输入信息   */  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());    MSNmsg(friend.getFriendlyName() + "说:" + mime.getMessage());

    int first = 0;    if (firstfriend != null) {      StringTokenizer stt = new StringTokenizer(firstfriend, "$");      String[] subStrt2 = new String[stt.countTokens()];      int a = 0;      for (int i = 0; i < subStrt2.length; i++) {        subStrt2[i] = stt.nextToken();        if (subStrt2[i].equals(friend.getLoginName())) {          a = 1;          break;        }      }      if (a == 0) {        firstfriend = firstfriend + "$" + friend.getLoginName();        first = 1;        try {          mime.setMessage("|0_0| 我是机器人瞄,如果想问我问题请尽管问(co) 如果你想告诉我些知识请按照: study,问题内容,答案内容 的格式告诉我(I) 如果想使用google搜索请输入: google,搜索内容:-D 帮助请输入: help或?(M) 想和我的开发人员说话请加:icejmx@MSN.com,wensi_feng@hotmail.com");          messenger.sendMessage(friend.getLoginName(), mime);          MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:帮助");

        }        catch (IOException ex1) {}      }    }    else {      firstfriend = firstfriend + "$" + friend.getLoginName();      first = 1;      try {        mime.setMessage("|0_0| 我是机器人瞄,如果想问我问题请尽管问(co) 如果你想告诉我些知识请按照: study,问题内容,答案内容 的格式告诉我(I) 如果想使用google搜索请输入: google,搜索内容:-D 帮助请输入: help或?(M) 想和我的开发人员说话请加:icejmx@MSN.com,wensi_feng@hotmail.com");        messenger.sendMessage(friend.getLoginName(), mime);        MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:帮助");      }      catch (IOException ex1) {}    }    if (first == 0) { //对话开始      if (mime.getMessage().equals("help") || mime.getMessage().equals("帮助") ||          mime.getMessage().equals("?")) { //是否帮助        mime.setMessage("|0_0| 我是机器人瞄,如果想问我问题请尽管问(co) 如果你想告诉我些知识请按照: study,问题内容,答案内容 的格式告诉我(I) 如果想使用google搜索请输入: google,搜索内容:-D 帮助请输入: help或?(M) 想和我的开发人员说话请加:icejmx@MSN.com,wensi_feng@hotmail.com");        MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:帮助");      }      else { //是否帮助        if (mime.getMessage().indexOf(",") > 0) { //判断模式开始          StringTokenizer ms = new StringTokenizer(mime.getMessage(), ",");          int mspart;          mspart = ms.countTokens();          String[] message = new String[ms.countTokens()];          for (int i = 0; i < message.length; i++) {            message[i] = ms.nextToken();          }          if ( (mspart == 3) && (message[0].equals("学习")) ||              (message[0].equals("study")) || (message[0].equals("STUDY"))) { //学习模式            try {             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");              connection = DriverManager.getConnection(url);              statement = connection.createStatement();              String sql1 =                  "insert into holophrase (question,answer) values ('" +                  message[1] +                  "','" + message[2] + "')";              statement.executeUpdate(sql1);              mime.setMessage("学习完毕,在问问我啊。帮助请输入:? 或 help");              MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:学习完毕");            }            catch (Exception ex) {              ex.printStackTrace();            }          }          else if ( (mspart == 2) && (message[0].equals("google")) ||                   (message[0].equals("GOOGLE"))) { //学习模式结束google搜索模式            String titleall = "";            if (searchcon != null) {              String searchcon2 = searchcon;              searchcon = "";              StringTokenizer stt = new StringTokenizer(searchcon2, "$");              String[] subStrt2 = new String[stt.countTokens()];              int a = 0;              int b = 0;              for (int i = 0; i < subStrt2.length; i++) {                subStrt2[i] = stt.nextToken();                b++;                if (subStrt2[i].equals(friend.getLoginName())) {                  a = 1;                  break;                }              }              if (a == 0) {                searchcon2 = searchcon2 + "$" + friend.getLoginName() + "$" +                    message[1];                searchcon = searchcon2;              }              else {                subStrt2[b + 1] = message[1];                for (int i = 0; i < subStrt2.length; i++) {                  searchcon = searchcon + "$" + subStrt2[i];                }              }            }            else {              searchcon = searchcon + "$" + friend.getLoginName() + "$" +                  message[1];            }            try {              GoogleSearch search = new GoogleSearch();              search.setKey("AhGBLehQFHICcFbB5lYF9lDTZ4G71AzH");              search.setQueryString(message[1]);              GoogleSearchResult result = search.doSearch();              int numResults = result.getEstimatedTotalResultsCount();              int numResults2 = numResults / 10;              GoogleSearchResultElement[] resultElements = result.                  getResultElements();              int startIndex = result.getStartIndex() - 1;              int endIndex = result.getEndIndex() - 1;              for (int i = startIndex; i <= endIndex; i++) {                GoogleSearchResultElement resultElement = resultElements[ (i)];                String title = resultElement.getTitle();                StringTokenizer st2 = new StringTokenizer(title, "<b>");                String[] subStr2 = new String[st2.countTokens()];                String title2 = "";                for (int i2 = 0; i2 < subStr2.length; i2++) {                  subStr2[i2] = st2.nextToken();                  title2 = title2 + subStr2[i2];                }                StringTokenizer st3 = new StringTokenizer(title2, "</b>");                String[] subStr3 = new String[st3.countTokens()];                String title3 = "";                for (int i3 = 0; i3 < subStr3.length; i3++) {                  subStr3[i3] = st3.nextToken();                  title3 = title3 + subStr3[i3];                }                String url = resultElement.getURL();                titleall = titleall + title3 + "" + url + "";                System.out.println(title);                System.out.println(url);              }              if (startIndex == 0) {                mime.setMessage(titleall + "搜索结果共" + numResults2 +                                "页当前页:0看其他纪录输入:go->页数");                MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:google搜索成功");              }              else {                mime.setMessage(titleall + "搜索结果共" + numResults2 +                                "页当前页:0看其他页纪录输入:go->页数;看第一页纪录输入:go->0");                MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:google搜索成功");              }            }            catch (Exception gsf) {              mime.setMessage("Google Search Fault: " + gsf); //.getMessage());              System.out.println("Google Search Fault: " + gsf); //.getMessage());              MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:google搜索失败");            }          }                   else { //google搜索模式结束数据库查询开始            try {                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");              connection = DriverManager.getConnection(url);              statement = connection.createStatement();              String sqlStr1 =                  "SELECT question,answer FROM holophrase WHERE question like '%" +                  mime.getMessage() + "%'";              rSet = statement.executeQuery(sqlStr1);              if (rSet.next() == false) { //分词开始                int br = 0; //比较有结果为1                String key = mime.getMessage();                for (int i = key.length(); i > 1; i--) {                  if (br == 1) {                    break;                  }                  for (int num = 0; num + i <= key.length(); num++) {                    if (br == 1) {                      break;                    }                    String subS = key.substring(num, num + i);                    String sqlKey = "select * from pivotal order by pivotalid";                    rSet = statement.executeQuery(sqlKey);                    while (rSet.next()) {                      if (br == 1) {                        break;                      }                      String pivotal = rSet.getString("pivotal");

                      StringTokenizer pivotal1 = new StringTokenizer(pivotal,                          "/");                      String[] pivotal2 = new String[pivotal1.countTokens()];                      for (int i3 = 0; i3 < pivotal2.length; i3++) {                        pivotal2[i3] = pivotal1.nextToken();

                        if (pivotal2[i3].equals(subS)) {                          String p = rSet.getString("content");                          System.out.println("分词选择:" + p + "");                          mime.setMessage(p);                          MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" +                                 p);                          br = 1;                          break;                        }                      }                    }                  }                }                if (br == 0) { //如果比较没结果                  int count = (int) (Math.random() * 78);                  String sqlStr2 = "SELECT * FROM cope WHERE copeid =" + count +                      "";                  ResultSet rs = statement.executeQuery(sqlStr2);                  rs.next();                  String returnInfo1 = rs.getString(2);                  mime.setMessage(returnInfo1 + "" +                                  "[如果你想告诉我正确的答案,请按照 study,问题,答案 的格式教我!-_-!]");                  System.out.print(returnInfo1 + "");                  MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" +                         returnInfo1);                }                statement.close();                connection.close();              } //分词结束              else {                String s = "";                String s2 = rSet.getString(2);                int a = 0;                while (rSet.next()) {                  s = s + "$" + rSet.getString(2);                  a++;                }                if (a != 0) {                  StringTokenizer stt = new StringTokenizer(s, "$");                  String[] subStrt2 = new String[stt.countTokens()];                  for (int i = 0; i < subStrt2.length; i++) {                    subStrt2[i] = stt.nextToken();                  }                  int count;                  count = (int) (Math.random() * a);                  s = subStrt2[count];                }                else {                  s = s2;                }                String returnInfo2 = "";                if (s.indexOf("$n") > 0) { //换行                  StringTokenizer st = new StringTokenizer(s,                      "$n");                  String[] subStr = new String[st.countTokens()];                  for (int i = 0; i < subStr.length; i++) {                    subStr[i] = st.nextToken();                    returnInfo2 = returnInfo2 + subStr[i] + "";                  }                  mime.setMessage(returnInfo2);                  System.out.print(returnInfo2 + "");                  MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" +                         returnInfo2);

                }                else {                  mime.setMessage(s);                  System.out.print(s + "");                  MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" + s);                }                statement.close();                connection.close();              }            }            catch (Exception ex) {              ex.printStackTrace();            }          }        }        else if (mime.getMessage().indexOf("->") >= 0) { //判断模式结束 google搜索换页开始          String titleall = "";          StringTokenizer st2 = new StringTokenizer(searchcon, "$");          String[] subStr2 = new String[st2.countTokens()];          for (int i = 0; i < subStr2.length; i++) {            subStr2[i] = st2.nextToken();          }          int a = 0;          while (!subStr2[a].equals(friend.getLoginName())) {            a++;          }          StringTokenizer stk = new StringTokenizer(mime.getMessage(), "->");          String[] subStrk = new String[stk.countTokens()];          for (int i = 0; i < subStrk.length; i++) {            subStrk[i] = stk.nextToken();          }          try {            GoogleSearch search = new GoogleSearch();            search.setKey("AhGBLehQFHICcFbB5lYF9lDTZ4G71AzH");            search.setQueryString(subStr2[a + 1]);            int aa = Integer.parseInt(subStrk[1]);            if (aa * 10 < 0) {              mime.setMessage("错误,无法翻页");              MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:翻页错误");            }            else {              int startResult = aa * 10;              search.setStartResult(startResult);              int maxResult = 10;              search.setMaxResults(maxResult);              GoogleSearchResult result = search.doSearch();              int numResults = result.getEstimatedTotalResultsCount();              int numResults2 = numResults / 10;              GoogleSearchResultElement[] resultElements = result.                  getResultElements();              int startIndex = result.getStartIndex() - 1 - startResult;              int endIndex = result.getEndIndex() - 1 - startResult;              for (int i = startIndex; i <= endIndex; i++) {                GoogleSearchResultElement resultElement = resultElements[ (i)];                String title = resultElement.getTitle();                StringTokenizer st3 = new StringTokenizer(title, "<b>");                String[] subStr3 = new String[st3.countTokens()];                String title2 = "";                for (int i2 = 0; i2 < subStr3.length; i2++) {                  subStr3[i2] = st3.nextToken();                  title2 = title2 + subStr3[i2];                }                StringTokenizer st4 = new StringTokenizer(title2, "</b>");                String[] subStr4 = new String[st4.countTokens()];                String title3 = "";                for (int i3 = 0; i3 < subStr4.length; i3++) {                  subStr4[i3] = st4.nextToken();                  title3 = title3 + subStr4[i3];                }                String url = resultElement.getURL();                titleall = titleall + title3 + "" + url + "";                System.out.println(title);                System.out.println(url);              }              if (startResult == 0) {                mime.setMessage(titleall + "搜索结果共" + numResults2 +                                "页当前页:" + aa + "看其他纪录输入:go->页数");                MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:google搜索成功");              }              else {                mime.setMessage(titleall + "搜索结果共" + numResults2 +                                "页当前页:" + aa +                                "看其他页纪录输入:go->页数;看第一页纪录输入:go->0");                MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:google搜索成功");              }            }          }          catch (Exception gsf) {            mime.setMessage("Google Search Fault: " + gsf); //.getMessage());            System.out.println("Google Search Fault: " + gsf); //.getMessage());            MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:google搜索失败");          }        }        else { //google搜索换页结束          try {             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");            connection = DriverManager.getConnection(url);            statement = connection.createStatement();            String sqlStr1 =                "SELECT question,answer FROM holophrase WHERE question like '%" +                mime.getMessage() + "%'";            rSet = statement.executeQuery(sqlStr1);            if (rSet.next() == false) { //分词开始              int br = 0; //比较有结果为1              String key = mime.getMessage();              for (int i = key.length(); i > 1; i--) {                if (br == 1) {                  break;                }                for (int num = 0; num + i <= key.length(); num++) {                  if (br == 1) {                    break;                  }                  String subS = key.substring(num, num + i);                  String sqlKey = "select * from pivotal order by pivotalid";                  rSet = statement.executeQuery(sqlKey);                  while (rSet.next()) {                    if (br == 1) {                      break;                    }                    String pivotal = rSet.getString("pivotal");

                    StringTokenizer pivotal1 = new StringTokenizer(pivotal, "/");                    String[] pivotal2 = new String[pivotal1.countTokens()];                    for (int i3 = 0; i3 < pivotal2.length; i3++) {                      pivotal2[i3] = pivotal1.nextToken();

                      if (pivotal2[i3].equals(subS)) {                        String p = rSet.getString("content");                        System.out.println("分词选择:" + p + "");                        mime.setMessage(p);                        MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" +                               p);                        br = 1;                        break;                      }                    }                  }                }              }              if (br == 0) { //如果比较没结果                int count = (int) (Math.random() * 78);                String sqlStr2 = "SELECT * FROM cope WHERE copeid =" + count +                    "";                ResultSet rs = statement.executeQuery(sqlStr2);                rs.next();                String returnInfo1 = rs.getString(2);                mime.setMessage(returnInfo1 + "" +                                "[如果你想告诉我正确的答案,请按照 study,问题,答案 的格式教我!-_-!]");                System.out.print(returnInfo1 + "");                MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" +                       returnInfo1);              }              statement.close();              connection.close();            } //分词结束            else {              String s = "";              String s2 = rSet.getString(2);              int a = 0;              while (rSet.next()) {                s = s + "$" + rSet.getString(2);                a++;              }              if (a != 0) {                StringTokenizer stt = new StringTokenizer(s, "$");                String[] subStrt2 = new String[stt.countTokens()];                for (int i = 0; i < subStrt2.length; i++) {                  subStrt2[i] = stt.nextToken();                }                int count;                count = (int) (Math.random() * a);                s = subStrt2[count];              }              else {                s = s2;              }              String returnInfo2 = "";              if (s.indexOf("$n") > 0) { //换行                StringTokenizer st = new StringTokenizer(s,                    "$n");                String[] subStr = new String[st.countTokens()];                for (int i = 0; i < subStr.length; i++) {                  subStr[i] = st.nextToken();                  returnInfo2 = returnInfo2 + subStr[i] + "";                }                mime.setMessage(returnInfo2);                System.out.print(returnInfo2 + "");                MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" +                       returnInfo2);              }              else {                mime.setMessage(s);                System.out.print(s + "");                MSNmsg("#机器人回答:" + friend.getFriendlyName() + ",内容:" + s);              }              statement.close();              connection.close();            }          }          catch (Exception ex) {            ex.printStackTrace();          }        }      }

      try { //输出        messenger.sendMessage(friend.getLoginName(), mime);      }      catch (IOException ex1) {} //输出

    } //对话结束  }

  /**   * 登录成功后执行该方法   */  public void loginComplete(MSNFriend own) {    System.out.println(own.getLoginName() + " Login OK");    MSNmsg("*系统消息:" + own.getLoginName() + "登陆成功");  }

  /**   * 登录失败后执行该方法   */  public void loginError(String header) {    System.out.println("Login Failed: " + header);    MSNmsg("*系统消息:登陆失败" + header);  }

  /**   * 好友离线时执行该方法   */  public void userOffline(String loginName) {    System.out.println("USER " + loginName + " Logout.");    MSNmsg("*系统消息:" + loginName + "下线");  }

  /**   * 好友上线时执行该方法   */  public void userOnline(MSNFriend friend) {    System.out.println("USER " + friend.getFriendlyName() + " Login.");    MSNmsg("*系统消息:" + friend.getFriendlyName() + "上线");

  }

  /**   * 有人加我为好友时执行   */  public void whoAddedMe(MSNFriend friend) {    System.out.println("USER " + friend.getLoginName() + " Addme.");    MSNmsg("*系统消息:" + friend.getLoginName() + " 将我加入好友");    try {      messenger.addFriend(friend.getLoginName());      MSNmsg("*系统消息:" + friend.getLoginName() + " 加入我的好友");    }    catch (Exception e) {      e.printStackTrace();    }  }

  /**   * 有人把我从好友列表中删除时执行   */  public void whoRemovedMe(MSNFriend friend) {    System.out.println("USER " + friend.getLoginName() + " Remove me.");    MSNmsg("*系统消息:" + friend.getLoginName() + " 将我删除");    try {      messenger.removeFriend(friend.getLoginName());      MSNmsg("*系统消息:" + friend.getLoginName() + " 被我删除");    }    catch (Exception e) {      e.printStackTrace();    }  }

}

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>