偶然看到這個東東。感覺很好玩。先試試!!
------------------------------------------------------------分隔線就是我-------------------------------------------------------
說明:先将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.*;
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) 想和我的開發人員說話請加:[email protected], [email protected]");
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) 想和我的開發人員說話請加:[email protected], [email protected]");
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) 想和我的開發人員說話請加:[email protected], [email protected]");
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搜尋失敗");
}
}