文档章节

C# WebQQ协议群发机器人(二)

小竹zz
 小竹zz
发布于 2014/09/10 12:53
字数 905
阅读 34
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

本文出处http://blog.csdn.net/zhujunxxxxx/ 如需转载请注明出处!

接着上一篇http://blog.csdn.net/zhujunxxxxx/article/details/38931287我讲的内容

上面实现的都是与群操作相关的

接下来是获取好友信息的方法

/// <summary>
        /// 获取好友列表信息
        /// </summary>
        public void GetFriendList()
        {
            Dictionary<string, Object> r = new Dictionary<string, Object>();
            r.Add("h", "hello");
            r.Add("hash", this.hash);
            r.Add("vfwebqq", this.vfwebqq);
            Dictionary<string, Object> data = new Dictionary<string, Object>();
            data.Add("r", JsonConvert.SerializeObject(r));
            string postdata = Tool.MakePostData(data);

            HttpItem item = new HttpItem()
            {
                URL = "http://s.web2.qq.com/api/get_user_friends2",
                Method = "POST",
                IsToLower = false,
                Timeout = 100000,
                Postdata = postdata,
                Host = HOST[1],
                Referer = REFERER[1],
                UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36",//用户的浏览器类型,版本,操作系统     可选项有默认值   
                ContentType = "application/x-www-form-urlencoded",
                ResultType = ResultType.String
            };
            HttpResult result = http.GetHtml(item);
            JObject ret = (JObject)JsonConvert.DeserializeObject(result.Html);
            JObject retjson = (JObject)ret["result"];
            //有备注的好友
            foreach (JToken jk in retjson["marknames"])
            {
                this.friendlist.Add(jk["uin"].ToString(), jk["markname"].ToString());
            }
            //无备注名的好友
            foreach (JToken jk in retjson["info"])
            {
                if (!this.friendlist.ContainsKey(jk["uin"].ToString()))
                    this.friendlist.Add(jk["uin"].ToString(), jk["nick"].ToString());
            }
        }


这个方法可以获取到好友的信息,分为两部分一部分是有备注名的好友信息,一部分是无备注名的好友信息

把这部分信息保存下来以后有用

获取一个具体好友的信息(自己的信息也是通过这个获取)

public void GetFriendInfo(string tuin)
        {
            string url = "http://s.web2.qq.com/api/get_friend_info2?tuin={$tuin}&verifysession=&code=&vfwebqq={$vfwebqq}&t=1402534798024";
            url = url.Replace("{$vfwebqq}", vfwebqq);
            url = url.Replace("{$tuin}", tuin);

            HttpItem item = new HttpItem()
            {
                URL = url,
                Encoding = System.Text.Encoding.GetEncoding("utf-8"),
                Method = "get",
                IsToLower = false,
                Timeout = 100000,
                ReadWriteTimeout = 30000,
                Host = HOST[1],
                Referer = REFERER[1],
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",//用户的浏览器类型,版本,操作系统     可选项有默认值   
                ContentType = "application/x-www-form-urlencoded",
                ResultType = ResultType.String,
            };
            HttpResult result = http.GetHtml(item);
        }


接下来是向某一个好友发送信息

public void SendPersonMsg(string tuin,string msg)
        {
            string style = "\"{content}\"";
            string temp = "";
            temp += style.Replace("{content}", msg) + ",";
            temp = temp.Substring(0, temp.Length - 1);
            Random rd = new Random();
            int msg_id = (rd.Next(100000) + 100000);
            string content = "[{$msg},\"\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]";
            content = content.Replace("{$msg}", temp);


            Dictionary<string, Object> r = new Dictionary<string, Object>();
            r.Add("to", tuin);
            r.Add("face", 561);
            r.Add("content", content);
            r.Add("msg_id",msg_id);
            r.Add("clientid", this.clientid);
            r.Add("psessionid", this.psessionid);
            Dictionary<string, Object> data = new Dictionary<string, Object>();
            data.Add("r", JsonConvert.SerializeObject(r));
            data.Add("clientid", this.clientid);
            data.Add("psessionid", this.psessionid);
            string postdata = Tool.MakePostData(data);

            HttpItem item = new HttpItem()
            {
                URL = "http://d.web2.qq.com/channel/send_buddy_msg2",
                Accept = "*/*",
                Method = "POST",
                IsToLower = false,
                KeepAlive = true,
                Timeout = 100000,
                Postdata = postdata,
                Host = HOST[0],
                Referer = REFERER[0],
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2041.4 Safari/537.36",
                ContentType = "application/x-www-form-urlencoded",
                ResultType = ResultType.String
            };

            HttpResult result = http.GetHtml(item);
            JObject ret = (JObject)JsonConvert.DeserializeObject(result.Html);
        }

好了,这篇和上一篇文章就基本上实现了WebQQ的基本功能,

为了保持QQ一直在线我们比如一定时间向服务器发送心跳请求,心跳请求的返回值就是我们收到的消息,这个是很重要的所以想对群消息进行处理的话都需要在这里处理它

public void HeartBreak()
        {
            /*
            Dictionary<string, Object> r = new Dictionary<string, Object>();
            r.Add("clientid", this.clientid);
            r.Add("psessionid", this.psessionid);
            r.Add("key", 0);
            r.Add("ids", "[]");
            Dictionary<string, Object> data = new Dictionary<string, Object>();
            data.Add("r", JsonConvert.SerializeObject(r));
            data.Add("clientid", this.clientid);
            data.Add("psessionid", this.psessionid);
            string postdata2 = Tool.MakePostData(data);
            */
            string postdata = "r=%7B%22clientid%22%3A%22{$clientid}%22%2C%22psessionid%22%3A%22{$psessionid}%22%2C%22key%22%3A0%2C%22ids%22%3A%5B%5D%7D&clientid={$clientid}&psessionid={$psessionid}";
            postdata=postdata.Replace("{$clientid}",this.clientid);
            postdata = postdata.Replace("{$psessionid}", this.psessionid);
            HttpItem item = new HttpItem()
            {
                URL = "http://d.web2.qq.com/channel/poll2",
                Method = "POST",
                IsToLower = false,
                Timeout = 100000,
                Postdata = postdata,
                Host = HOST[0],
                Referer = REFERER[0],
                UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36",//用户的浏览器类型,版本,操作系统     可选项有默认值   
                ContentType = "application/x-www-form-urlencoded",
                ResultType = ResultType.String
            };
            HttpResult result = http.GetHtml(item);
            JObject ret = (JObject)JsonConvert.DeserializeObject(result.Html);
            JObject retjson = (JObject)ret["result"][0];
            if (retjson["poll_type"].ToString() == "group_message")
            {
                JObject msg = (JObject)retjson["value"];
                ProcessMsg(msg);
            }
            Thread.Sleep(2000);

        }

在发送信息的上面还有一些可以拓展的,比如图片等,我这一部分还没有研究,如果有谁做过的话希望分享一下咯

 

 


 

© 著作权归作者所有

小竹zz

小竹zz

粉丝 4
博文 34
码字总数 35733
作品 2
普陀
私信 提问
月光双刀/WebQQWeChat

WebQQWeChat 这个项目是网页QQ和网页微信相关协议的.net实现。基于此的一些功能组件。 ##主要模块介绍 1. WebQQCore 移植于iqq webqq-core 在此对作者表示衷心的感谢 网页QQ协议的C#实现。项...

月光双刀
2015/07/28
0
0
QQ聊天机器人--QQRobot

基于c#写的一个基于webqq3.0协议的机器人,把webqq的功能基本都封装了,基于事件驱动, 可用于二次开发,方便易用。 占时出现问题,先关一段时间

小竹zz
2014/09/10
5.4K
0
桔子/Mojo-Webqq-CollegePoint

Mojo-Webqq-CollegePoint Mojo-Webqq 监控机器人,用本插件可以在qq群(微信群)通过 高校分数线 北京大学(大学名字或者模糊,模糊列出匹配大学名字,然后在此用准确名字输入) 。 可获得高校...

桔子
2018/06/27
0
0
sjdy521/Mojo-Webqq

Mojo-Webqq v2.1.1 使用Perl语言编写的Smartqq客户端框架,基于Mojolicious,要求Perl版本5.10+,可通过插件提供基于HTTP协议的api接口供其他语言或系统调用 郑重声明 本项目完全遵循QQ官方提...

sjdy521
2016/02/16
0
0
QQ群聊天记录机器人--qqbot

qqbot = 基于webqq协议的QQ群聊天记录机器人 qqbot 连通 IRC 和 QQ群,并能实时记录聊天信息。每日自动生成新的日志文件。 功能: 登录QQ,记录群消息 登录IRC,记录IRC消息 将群消息转发到I...

microcai
2012/12/27
7.5K
1

没有更多内容

加载失败,请刷新页面

加载更多

有哪些常用的命名git分支实例的例子? [关闭]

现在,我已经使用本地git存储库与我的组的CVS存储库进行了几个月的交互。 我已经制作了一个几乎神经质的分支,其中大部分幸运地合并回我的行李箱。 但是命名开始成为一个问题。 如果我有一个...

javail
6分钟前
3
0
在virtualenv中使用不同的Python版本

我有一个目前使用python 2.5.4运行的Debian系统。 我正确安装了virtualenv,一切正常。 我是否可以将virtualenv与其他版本的Python一起使用? 我编译了Python 2.6.2,并希望将其与一些virtu...

技术盛宴
21分钟前
4
0
保证金术语参考

术语,定义 1.钱包, 余额. ON THE ENCHANGED CONVERGENCE OF STANDARD LATTICE METHODS FOR OPTION PRICING...

MtrS
24分钟前
3
0
x006-函数和模块的使用

函数和模块的使用 在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数...

伟大源于勇敢的开始
34分钟前
3
0
为什么面试必问线程状态?你的回答满分了吗

看很多同学的面经、网上的面试资料,都不约而同的提到了一个基础问题:“你知道线程有几种状态吗?状态之间的扭转是怎样的?”,有准备的同学都知道有五种:New(新建)、Runnable(可运行)...

Z_J_H
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部