C# QQ机器人(自动应答) (基于WebQQ)

QQ机器人,作用 不大,意义却不小 。此次采用轻处理方式实现,不设计QQ协议以及什么登陆加密方式等等问题研究。从web版QQ切入。

整个设计思路:用c#的webbrowser控件加载web QQ,以webQQ正常的登陆方式登陆,登陆以后,检测收到的信息(好友信息、QQ群信息)加以分析(包括分词技术),做出应答对策(搜索 特定应答库或其它网络资源)

下面是核心技术要点:

1、WebBrowser 控件

用这个控件加载http://w.qq.com/这个地址时,发现网页根本 打不开,出现版本提示

解决 办法:在Navigate这个地址前面 加个版本控制 的方法

            WebBrowserVersionEmulation();
            webBrowser1.Navigate("http://w.qq.com/");

WebBrowserVersionEmulation方法的具体内容如下:

        private static void WebBrowserVersionEmulation()
        {
            const string BROWSER_EMULATION_KEY =
            @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";

            String appname = Process.GetCurrentProcess().ProcessName + ".exe";

            // Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
            const int browserEmulationMode = 9999;

            RegistryKey browserEmulationKey =
                Registry.CurrentUser.OpenSubKey(BROWSER_EMULATION_KEY, RegistryKeyPermissionCheck.ReadWriteSubTree) ??
                Registry.CurrentUser.CreateSubKey(BROWSER_EMULATION_KEY);

            if (browserEmulationKey != null)
            {
                browserEmulationKey.SetValue(appname, browserEmulationMode, RegistryValueKind.DWord);
                browserEmulationKey.Close();
            }
        }

对于winform程序来说,复杂操作通常需要使用多线程解决界面卡死的问题,但是比多线程更简便的方式是Application.DoEvents()

            while(true)
            {
                //getMsg();耗时很长的操作
                Application.DoEvents();  
            }

2、使用HtmlAgilityPack解析网页源码,获取消息

  public void getMsg()
        {

            string html = webBrowser1.Document.Body.InnerHtml;
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(html);
            HtmlNode chatdiv = doc.GetElementbyId("panelBody-5");

            if (chatdiv != null)
            {
                HtmlNodeCollection list = chatdiv.SelectNodes("//div[@class='chat_content_group buddy  ']");
                if (list != null)
                {

                    string nickname = list[list.Count - 1].ChildNodes[3].InnerText.Trim();
                    string saywords = list[list.Count - 1].ChildNodes[5].InnerText.Trim();

                    if (nickname != up_nickname || saywords != up_saywords)
                    {

                        this.Text = nickname + " 说:" + saywords;
                        up_nickname = nickname;
                        up_saywords = saywords;

                        string msg = GetMsg(nickname, saywords);
                        if (msg.Trim() != "")
                        {
                            sendMsg(msg);
                        }


                    }


                }


            }

        }

3、Lucene.Net +盘古分词

      public List<string> getFC(string txt)
      {


          Analyzer analyzer = new PanGuAnalyzer();
          TokenStream ts = analyzer.TokenStream("",new StringReader(txt) );
           List<string> wordlist=new List<string> ();
          Lucene.Net.Analysis.Token token = null;
          while ( (token=ts.Next() ) != null)
          {
              if (token.TermText().Length > 1)
              {
                  wordlist.Add(token.TermText());
              }


          }
          return wordlist;

      }

4、将接收到的QQ消息进行分词处理 ,对分词结果进行分析 ,得到相应 的应答内容,模拟发送消息。

        public void sendMsg(string msg)
        {
            webBrowser1.Document.GetElementById("chat_textarea").InnerText =msg;
            webBrowser1.Document.GetElementById("send_chat_btn").InvokeMember("click");
        }
软件名称:梦想接口工作室 -- QQ机器人! 软件版本:1.0.0.1 更新日期:2010/7/19 软件作者:小胡 软件下载地址:http://www.8han.com/qq/down/QQRobot.rar 软件说明: 1.在论坛:http://www.8han.com 论坛中注册一个账号。然后用账号登陆软件。 2.登陆成功后输入QQ账号和密码。点击登陆,如果QQ好友比较多,就会比较慢,因为每次登陆都会下载好友信息和群信息。 3.在实时日志中就能看到QQ机器人的动作。 4.配置修改中,可以修改QQ机器人的默认语句和问答语句。 5.论坛整合中需要输入论坛的数据库信息。 6.设置 数据库信息 注:数据库前缀不要下划线,论坛地址后面不要加“/” 7.QQ群号有2层含义,1.与论坛绑定的群号,如若发现论坛有新帖,机器人就会向所设置的群号中发信息,2锁定的群号,因为考虑到有的用户,不想让机器人在别的群中说话,所以就可以锁定机器人只在锁定的群中发言。 8.如果在使用的过程中遇到问题,可以在论坛中提交问题,请经常查看版本信息,获取最新的QQ机器人版本。 函数讲解: 1.默认回答中的函数:$qq$:收到信息的发送QQ。 $qm$ :收到的信息。 2.论坛主贴群通知新信息:$author$ :帖子的发送人 $subject$:帖子的标题 $url$:帖子的地址 3.论坛主贴群通知新信息:$tauthor$ :帖子的发送人 $author$ :帖子的回复人 $subject$:帖子的标题 $url$:帖子的地址 $views$ : 浏览次数 $replay$ :回复次数 命令详解: help:列出所有命令集 s:www.8han.com 查询8han.com的收录情况和PR值 e:english 把英文翻译为中文 c:中国 把中文翻译为英文 j:中国 把简体翻译成繁体 f:中國 把繁体翻译成简体 软件调试成功后,论坛中发新帖会在绑定的QQ群中发言。 论坛中发新回帖会给发帖的楼主发信息。 QQ机器人2010-7-22 更新日志: 1.版本由1.0.0.1升级至1.0.0.2 2.简约了登陆界面 3.解决了缩小就关闭的问题,软件制作成:关闭就关闭了软件,但是做出了QQ一样的缩进效果! 4.软件增加了测试论坛链接成功与否按钮 5.论坛版块中,点击了开始监控,才监控论坛。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值