站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题JAVA MSN机器人主要代码开放

JAVA MSN机器人主要代码开放

摘要: JAVA MSN机器人主要代码开放

一直想把这个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 + "\n"); }
/** * 某人正在输入信息 */ 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| 我是机器人瞄,如果想问我问题请尽管问\r\n(co) 如果你想告诉我些知识请按照: study,问题内容,答案内容 的格式告诉我\r\n(I) 如果想使用google搜索请输入: google,搜索内容\r\n:-D 帮助请输入: help或?\r\n(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| 我是机器人瞄,如果想问我问题请尽管问\r\n(co) 如果你想告诉我些知识请按照: study,问题内容,答案内容 的格式告诉我\r\n(I) 如果想使用google搜索请输入: google,搜索内容\r\n:-D 帮助请输入: help或?\r\n(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| 我是机器人瞄,如果想问我问题请尽管问\r\n(co) 如果你想告诉我些知识请按照: study,问题内容,答案内容 的格式告诉我\r\n(I) 如果想使用google搜索请输入: google,搜索内容\r\n:-D 帮助请输入: help或?\r\n(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, ""); 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, ""); 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 + "\r\n" + url + "\r\n"; System.out.println(title); System.out.println(url); } if (startIndex == 0) { mime.setMessage(titleall + "\r\n搜索结果共" + numResults2 + "页\r\n当前页:0\r\n看其他纪录输入:go->页数"); msnmsg("#机器人回答:" + friend.getFriendlyName() + ",google搜索成功"); } else { mime.setMessage(titleall + "\r\n搜索结果共" + numResults2 + "页\r\n当前页:0\r\n看其他页纪录输入: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 + "\n"); 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 + "\r\n" + "[如果你想告诉我正确的答案,请按照 study,问题,答案 的格式教我!-_-!]"); System.out.print(returnInfo1 + "\n"); 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] + "\r\n"; } mime.setMessage(returnInfo2); System.out.print(returnInfo2 + "\n"); msnmsg("#机器人回答:" + friend.getFriendlyName() + "," + returnInfo2);
} else { mime.setMessage(s); System.out.print(s + "\n"); 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, ""); 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, ""); 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 + "\r\n" + url + "\r\n"; System.out.println(title); System.out.println(url); } if (startResult == 0) { mime.setMessage(titleall + "\r\n搜索结果共" + numResults2 + "页\r\n当前页:" + aa + "\r\n看其他纪录输入:go->页数"); msnmsg("#机器人回答:" + friend.getFriendlyName() + ",google搜索成功"); } else { mime.setMessage(titleall + "\r\n搜索结果共" + numResults2 + "页\r\n当前页:" + aa + "\r\n看其他页纪录输入: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 + "\n"); 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 + "\r\n" + "[如果你想告诉我正确的答案,请按照 study,问题,答案 的格式教我!-_-!]"); System.out.print(returnInfo1 + "\n"); 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] + "\r\n"; } mime.setMessage(returnInfo2); System.out.print(returnInfo2 + "\n"); msnmsg("#机器人回答:" + friend.getFriendlyName() + "," + returnInfo2); } else { mime.setMessage(s); System.out.print(s + "\n"); 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(); } } }
↑返回目录
前一篇: Java Path icy_csdn
后一篇: Java Interface 是常量存放的最佳地点吗?