百度首页 | 
百度搜藏
快照
(百度和http://thisbot.spaces.live.com/blog/cns!8268F8ED8863A337!130.entry的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。)

聊天机器人: 如何为LumaQQ添加聊天机器人
更多服务Windows Live
主页HotmailSpacesOneCare
登录
 
 
    6月12日

    如何为LumaQQ添加聊天机器人

    摘要
    LumaQQ 2005年1月21日的修正中,添加了对聊天机器人的支持。LumaQQ核心层提供了一个简单的接口IRobot来封装机器人功能,同时通过一个配置文件配置机器人的信息。LumaQQ的机器人支持简单,方便,并且支持多种机器人,方便切换。添加新机器人时,只需要拷贝你的jar文件到LumaQQ的lib目录下,重启LumaQQ后即可使用。本文介绍了添加一个机器人的基本步骤,希望对这方面感兴趣的朋友有所帮助。

    Luma, 清华大学
    更新时间: 2005/01/29

    修改历史:
    2005-05-24 机器人接口修改


    LumaQQ没有提供功能十足的机器人给你用,所以,实现一个机器人需要靠你自己,LumaQQ只为你提供了一个简单的框架,本文就是向你介绍如何在LumaQQ中插入自己的机器人的。

    第一步:实现自己的机器人

    缺省情况下,LumaQQ提供了一个机器人,但是这个机器人基本上什么也没做,而且,缺省也是没有打开的。这个机器人的代码在edu.tsinghua.lumaqq.qq.robot.DummyRobot.java中,它纯粹是一个演示目的,如果你想看看效果,可以在LumaQQ的xml目录下面找到一个robots.xml文件,这个文件是机器人的配置文件,你可以看到里面我写了一些注释,你把那些注释去掉,保存,然后重启LumaQQ就可以了。使用机器人的方法是打开系统菜单,如果系统配置了至少一个机器人的话,系统菜单中会有一项“聊天机器人”,它的子菜单里面列出了所有存在的机器人,另外包含一个开始/停止菜单,我就不多说了,想来你应该会用。

    为了实现一个聊天机器人,你必须实现edu.tsinghua.lumaqq.qq.robot.IRobot接口,这个接口目前相当简单,只包含了一个方法,如下:

    public interface IRobot {
    	/**
    	 * 根据message得到一条回复消息
    	 * 
    	 * @param packet
    	 * 		接受消息包
    	 * @return
    	 * 		回复的消息,返回null表示不响应这条消息
    	 */
    	public String getReply(ReceiveIMPacket packet);
    }

    而DummyRobot的实现则是:

    public class DummyRobot implements IRobot {
    	/* (non-Javadoc)
    	 * @see edu.tsinghua.lumaqq.qq.robot.IRobot#getReply(edu.tsinghua.lumaqq.qq.packets.in.ReceiveIMPacket)
    	 */
    	public String getReply(ReceiveIMPacket packet) {
    		/*
    		 * Example:
    		 * 1. 如何得到发送者QQ号
    		 * packet.header.sender
    		 * 
    		 * 2. 如何得到消息内容
    		 * packet.normalIM.messageBytes是消息的字节数组内容,如果需要得到字符串形式
    		 * new String(packet.normalIM.messageBytes, QQ.QQ_CHARSET_DEFAULT)
    		 * 对于消息格式,参见edu.tsinghua.lumaqq.qq.beans.NormalIM
    		 * 
    		 * 3. 如何判断这个消息是一个大消息中的分片?
    		 * if(packet.normalIM.totalFragments > 1) {
    		 * 		// 做你的处理,怎么处理,你决定,你可以把他缓存起来等待所有分片都收到为止
    		 * }
    		 * 
    		 * 4. 如何知道这个消息的分片序号?
    		 * packet.normalIM.fragmentSequence
    		 * 
    		 * 5. 如何知道这个消息的id?消息id也是用在分片情况时,同一个消息的分片,消息id相同
    		 * packet.normalIM.messageId
    		 * 
    		 * 6. 如何知道一个消息是不是自动回复?
    		 * if(packet.normalIM.replyType != QQ.QQ_IM_AUTO_REPLY) {
    		 * 		// 做你想做的
    		 * }
    		 * 
    		 * 更多内容和可用字段
    		 * 参考edu.tsinghua.lumaqq.qq.beans.NormalIMHeader
    		 * 参考edu.tsinghua.lumaqq.qq.beans.ReceiveIMHeader
    		 */
    		if(packet.normalIM.replyType != QQ.QQ_IM_AUTO_REPLY)
    			return "Hello, I am robot";
    		else
    			return null;
    	}
    }
    

    所以你也看到了,DummyRobot基本上啥也没干,就是老返回一句相同的话而已,不过它会判断一下是不是自动回复,如果是就不处理了,免得碰到自动回复的时候没完没了。你看到了,DummyRobot里面的有不少注释,应该对你的帮助很直接了。

    第二步:部署机器人程序

    添加一个机器人并不需要修改LumaQQ的源代码,你只要将你的机器人程序打包成jar文件,然后copy到LumaQQ的lib目录下就可以了,这样的好处自然就是你可以随便添加机器人,而且并不一定需要有LumaQQ的源代码,当然,你在编写你的机器人程序的时候,需要导入lumaqq.jar到工程中,不然找不到IRobot接口定义了。

    第三步:修改机器人配置文件

    机器人配置文件位于LumaQQ的xml目录下,这个文件自然是新增的,如果不存在这个文件的话,那么LumaQQ就会认为是没有机器人可用,系统菜单中也就不会有机器人的菜单项了。这个文件的格式也很简单,假设我要配置DummyRobot,那么就是下面这个样子:

    <?xml version="1.0" encoding="UTF-8"?>
    <Robots>
    	<Robot>
    		<Name>Dummy Robot</Name>
    		<Implementation>edu.tsinghua.lumaqq.qq.robot.DummyRobot</Implementation>
    	</Robot>
    </Robots>
    

    See? 仅仅就是配置一个机器人的名字,另外配置一下IRobot的实现类即可。如果你有多个机器人,你可以随便添加Robot元素

    总结

    添加一个机器人的工作就结束了,喜欢玩就玩吧。

    LumaQQ is a Java QQ client which has a reusable pure Java core and SWT-based GUI

    来源:http://lumaqq.linuxsir.org/article/how_to_add_robot.html