zoukankan      html  css  js  c++  java
  • 20081229 聊天机器人的简单实现

     

    ----把思路变为程序的过程是快乐的


    闭眼还能历历在目的一年半里,紧凑的工作节奏留给我一段值得反复回顾的记忆。还没来得及详细地对这过去的日子留下总结,生活就进入了下一站。

    有在站台侯车经历的人都应该理解,当心里迫切着,等待就成了煎熬。不如暂时放下期待,也不浪费时间,先做点什么吧!这就是做机器人初时的想法。如今已经坐上一趟新车,于是将这篇文章留给站台候车的十五天吧。

    在技术论坛闲逛,看到了一个C++在线编译机器人,经过几天的hacking研究后,发现此机器人是运行在内网一台windows xp的pc机上的虚拟机里,那台机器有c、d、e、z等分区,机器人运行在z分区。运行机器人的帐号可能配置了e分区的权限。这样就造成了c分区所有的程序和命令都无法通过windows api调用。经过分析后,采用直接向e写入二进制文件,然后拼接成反弹端口的shell code的办法,但最后,机器人升级到windows2003上,system调用的权限也被限制了,最终hacking无果。

    随着对机器人行为的了解,萌发了研究其实现的念头,经过几次测试后。猜测其实现,可能是直接破解了群消息包的协议而开发的。那几天处于刚离职的等车状态,特别闲,仔细考虑后决定采用----循环抓取群消息比对来获取聊天记录,再对聊天记录进行处理输出的方式。

    更加细化的是:
    1.用windows api找到群窗口的对话显示控件,对其发送消息获取内容
    2.循环比对获取的每一条消息,得到每个人说的话。
    3.针对每个人说的话给出输出,有可能是调用外部命令行程序、组件包,或者忽略等
    4.用windos api找到群窗口消息发送控件,对其发消息,将输出发出。

    考虑了一两天后,对其间几个可能遇到的技术难点做了预研。第三天就开始用Python实现了。写了两个晚上,大约60行代码,就实现到80%功能。只是还遗留第4点,在第二个晚上零点时在对消息控件发WM_SETTEXT消息时卡壳了,无奈睡到凌晨,考虑一种变通的方式,采用了向顶层窗体张贴文本并模拟击键的办法,实现了自动聊天。

    在做到这个地步时,差不多算是有了一个不及格的实现。但WM_SETTEXT消息无法改变控件内容的问题依旧没有解决。然后就有了一些杂事,机器人的开发就暂停了。

    接着,心里对那个问题依旧有所挂记,于是采用了向外部高手求助的办法。经过整整一个下午的尝试和研究,高手用VB向我演示了用WM_IME_CHAR消息的办法发送文本,当时很高兴,满以为回家就能完成机器人了。

    可软件这事,就这么说不清,20%的工作可能耗费掉超过80%的时间。WM_IME_CHAR消息在Python Extension For Win32里发向控件时居然是乱码,万恶的ASC标准,UNICODE要是早诞生1年,软件可进步N年了。上SF论坛看到讨论后,作者说,最近东方用户特别是日本用户反应代码包里的方法不支持UNICODE的现象,将在下一个版本解决。下一个版本将是一个支持Py3k的版本,好期待!

    当时,还不死心,用CVS下载了其源代码研究。最后得出的结论是:不得不放下Python,转其他UNICODE语言来做。最终定为了C#。

    C#的实现很顺利,而且代码似乎也很优雅。不到1小时就将百来行Python代码转了过去。C#里多了一些声明和大括号而已。其他一些雷同。

    修改,调试,重构,测试。

    一切OK,机器人已经可以开始工作了。又做了一个类,将机器人对话的逻辑处理放出来,改为了配置XML的方式,这样就可以把机器人的对话抽象为一条条规则了。

    后来的一周里,又抽空处理了Windows 2003下语言和区域选项引起的UTF-8和GB2312的差异问题导致WM_IME_CHAR消息无法正确发送字符,后改为了WM_CHAR,一切正常。

    至此,名字叫小萌的机器人实验品才真正诞生,过程才真正告一段落,将源代码和相关文档放入一文件夹打上包,文以记之。

      


     

  • 相关阅读:
    读写分离
    java并发集合知识点(二)
    jdbc框架有很多,包括spring jdbc
    多线程,势必涉及到共享对象读写问题
    <xliff:g>标签
    租赁市场的上海方(浦东/张江)
    HDU 3488Tour(流的最小费用网络流)
    sql使用存储过程和交易
    状态压缩动态规划 -- 骨牌
    Android-2手机应用程序,短信应用
  • 原文地址:https://www.cnblogs.com/likun/p/1364215.html
Copyright © 2011-2022 走看看