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

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

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

假设有人须要源代码能够联系我 qq: 10588690。可是不是无偿提供,请大家理解。

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

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

/// <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一直在线我们比方一定时间向server发送心跳请求。心跳请求的返回值就是我们收到的消息。这个是非常重要的所以想对群消息进行处理的话都须要在这里处理它

 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);

        }

在发送信息的上面另一些能够拓展的,比方图片等,我这一部分还没有研究,假设有谁做过的话希望分享一下咯


 

原文地址:https://www.cnblogs.com/wzzkaifa/p/7009644.html