天天看点

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搜索失败");

         }

      }