📄
字号:
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, "<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 + "\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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -