天天看點

java 開發小i機器人

偶然看到這個東東。感覺很好玩。先試試!!

------------------------------------------------------------分隔線就是我-------------------------------------------------------

說明:先将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搜尋失敗");

         }

      }