Beispiel #1
0
        public static IntPtr CQ_getFriendList(int authCode, bool reserved)
        {
            string  url  = $@"{Save.url}v1/LuaApiCaller?qq={Save.curentQQ}&funcname=GetQQUserList";
            JObject data = new JObject
            {
                { "StartIndex", "" }
            };
            JObject ret = JsonConvert.DeserializeObject <JObject>(SendRequest(url, data.ToString()));

            MemoryStream streamMain       = new MemoryStream();
            BinaryWriter binaryWriterMain = new BinaryWriter(streamMain);
            JArray       grouplist        = JArray.Parse(ret["Friendlist"].ToString());

            BinaryWriterExpand.Write_Ex(binaryWriterMain, grouplist.Count);
            foreach (var item in grouplist)
            {
                MemoryStream stream       = new MemoryStream();
                BinaryWriter binaryWriter = new BinaryWriter(stream);

                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt64(item["FriendUin"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, item["NickName"].ToString());
                BinaryWriterExpand.Write_Ex(binaryWriter, item["Remark"].ToString());

                BinaryWriterExpand.Write_Ex(binaryWriterMain, (short)stream.Length);
                binaryWriterMain.Write(stream.ToArray());
            }
            return(Marshal.StringToHGlobalAnsi(Convert.ToBase64String(streamMain.ToArray())));
        }
Beispiel #2
0
        public static IntPtr CQ_getGroupInfo(int authCode, long groupId, bool notCache)
        {
            string  url  = $@"{Save.url}v1/LuaApiCaller?qq={Save.curentQQ}&funcname=GetGroupList";
            JObject data = new JObject
            {
                { "NextToken", "" }
            };
            JObject ret         = JsonConvert.DeserializeObject <JObject>(SendRequest(url, data.ToString()));
            JArray  array       = JArray.Parse(ret["TroopList"].ToString());
            JToken  targetgroup = null;

            foreach (var item in array)
            {
                if (item["GroupId"].ToString() == groupId.ToString())
                {
                    targetgroup = item; break;
                }
            }
            if (targetgroup == null)
            {
                return((IntPtr)0);
            }
            MemoryStream stream       = new MemoryStream();
            BinaryWriter binaryWriter = new BinaryWriter(stream);

            BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt64(targetgroup["GroupId"].ToString()));
            BinaryWriterExpand.Write_Ex(binaryWriter, targetgroup["GroupName"].ToString());
            return(Marshal.StringToHGlobalAnsi(Convert.ToBase64String(stream.ToArray())));
        }
Beispiel #3
0
        public static IntPtr CQ_getGroupList(int authCode)
        {
            string  url  = $@"{Save.url}v1/LuaApiCaller?qq={Save.curentQQ}&funcname=GetGroupList";
            JObject data = new JObject
            {
                { "NextToken", "" }
            };
            JObject      ret              = JsonConvert.DeserializeObject <JObject>(SendRequest(url, data.ToString())); //获取请求之后的消息
            MemoryStream streamMain       = new MemoryStream();
            BinaryWriter binaryWriterMain = new BinaryWriter(streamMain);                                               //最终要进行编码的字节流
            JArray       grouplist        = JArray.Parse(ret["TroopList"].ToString());

            BinaryWriterExpand.Write_Ex(binaryWriterMain, grouplist.Count);//群数量
            foreach (var item in grouplist)
            {
                MemoryStream stream       = new MemoryStream();
                BinaryWriter binaryWriter = new BinaryWriter(stream);//临时字节流,用于统计每个群信息的字节数量

                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt64(item["GroupId"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, item["GroupName"].ToString());

                BinaryWriterExpand.Write_Ex(binaryWriterMain, (short)stream.Length); //将临时字节流的字节长度写入主字节流
                binaryWriterMain.Write(stream.ToArray());                            //写入数据
            }
            return(Marshal.StringToHGlobalAnsi(Convert.ToBase64String(streamMain.ToArray())));
        }
Beispiel #4
0
        /// <summary>
        /// 群消息处理事件
        /// </summary>
        private static void GroupMessageHandler(string fn)
        {
            Task task = new Task(() =>
            {
                string msg          = fn;
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                ReceiveMessage groupMessage = JsonConvert.DeserializeObject <ReceiveMessage>(msg);
                ReceiveMessage.Data data    = groupMessage.CurrentPacket.Data;
                //群文件事件
                if (groupMessage.CurrentPacket.Data.MsgType == "GroupFileMsg")
                {
                    JObject fileupload        = JObject.Parse(data.Content);
                    MemoryStream stream       = new MemoryStream();
                    BinaryWriter binaryWriter = new BinaryWriter(stream);
                    BinaryWriterExpand.Write_Ex(binaryWriter, fileupload["FileID"].ToString());
                    BinaryWriterExpand.Write_Ex(binaryWriter, fileupload["FileName"].ToString());
                    BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt64(fileupload["FileSize"].ToString()));
                    BinaryWriterExpand.Write_Ex(binaryWriter, 0);
                    pluginManagment.CallFunction(FunctionEnums.Functions.Upload, 1, GetTimeStamp(), data.FromGroupId,
                                                 data.FromUserId, Convert.ToBase64String(stream.ToArray()));
                    stopwatch.Stop();
                    LogHelper.WriteLog(LogLevel.InfoReceive, "OPQBot框架", "文件上传", $"来源群:{data.FromGroupId}({data.FromGroupName}) 来源QQ:{data.FromUserId}({data.FromNickName}) " +
                                       $"文件名:{fileupload["FileName"]} 大小:{Convert.ToDouble(fileupload["FileSize"]) / 1000}KB FileID:{fileupload["FileID"]}", $"√ {stopwatch.ElapsedMilliseconds / (double)1000:f2} s");
                    return;
                }
                string message = ProgressMessage.Start(groupMessage);
                var b          = Encoding.UTF8.GetBytes(message);
                message        = GB18030.GetString(Encoding.Convert(Encoding.UTF8, GB18030, b));

                //表示自己发送出去的消息, 写入消息列表
                int msgID = groupMessage.CurrentPacket.Data.MsgSeq;
                if (groupMessage.CurrentPacket.Data.FromUserId == Save.curentQQ && !Save.ReceiveSelfMsg)
                {
                    Dll.AddMsgToSave(new Deserizition.Message(msgID, data.MsgRandom, data.MsgSeq, data.FromUin, data.FromGroupId, data.MsgTime, message, data.TempUin));
                    return;
                }
                int logid = LogHelper.WriteLog(LogLevel.InfoReceive, "OPQBot框架", "[↓]收到消息", $"群:{data.FromGroupId}({data.FromGroupName}) QQ:{data.FromUserId}({data.FromNickName}) {message}", "处理中...");
                var c     = new Deserizition.Message(msgID, data.MsgRandom, data.MsgSeq, data.FromUin, data.FromGroupId, data.MsgTime, message, data.TempUin);
                Dll.AddMsgToSave(c);//保存消息到消息列表
                byte[] messageBytes = GB18030.GetBytes(message + "\0");
                var messageIntptr   = Marshal.AllocHGlobal(messageBytes.Length);
                Marshal.Copy(messageBytes, 0, messageIntptr, messageBytes.Length);
                //调用插件功能
                int pluginid = pluginManagment.CallFunction(FunctionEnums.Functions.GroupMsg, 2, msgID, data.FromGroupId, data.FromUserId,
                                                            "", messageIntptr, 0);
                Marshal.FreeHGlobal(messageIntptr);
                GC.Collect();
                stopwatch.Stop();
                string updatemsg = $"√ {stopwatch.ElapsedMilliseconds / (double)1000:f2} s";
                if (pluginid > 0)
                {
                    updatemsg += $"(由 {pluginManagment.Plugins[pluginid - 1].appinfo.Name} 结束消息处理)";
                }
                LogHelper.UpdateLogStatus(logid, updatemsg);
            }); task.Start();
        }
Beispiel #5
0
        public static IntPtr CQ_getGroupMemberInfoV2(int authCode, long groupId, long qqId, bool isCache)
        {
            string  url  = $@"{Save.url}v1/LuaApiCaller?qq={Save.curentQQ}&funcname=friendlist.GetTroopMemberListReq";
            JObject data = new JObject
            {
                { "GroupUin", groupId },
                { "LastUin", 0 }
            };
            JObject ret        = JsonConvert.DeserializeObject <JObject>(SendRequest(url, data.ToString()));
            JArray  array      = JArray.Parse(ret["MemberList"].ToString());
            JToken  targetuser = null;

            foreach (var item in array)
            {
                if (item["MemberUin"].ToString() == qqId.ToString())
                {
                    targetuser = item; break;
                }
            }
            if (targetuser == null)
            {
                return((IntPtr)0);
            }
            MemoryStream stream       = new MemoryStream();
            BinaryWriter binaryWriter = new BinaryWriter(stream);

            BinaryWriterExpand.Write_Ex(binaryWriter, groupId);
            BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt64(targetuser["MemberUin"].ToString()));
            BinaryWriterExpand.Write_Ex(binaryWriter, targetuser["NickName"].ToString());
            BinaryWriterExpand.Write_Ex(binaryWriter, targetuser["GroupCard"].ToString());
            BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(targetuser["Gender"].ToString()));
            BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(targetuser["Age"].ToString()));
            BinaryWriterExpand.Write_Ex(binaryWriter, "unkown");
            BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(targetuser["JoinTime"].ToString()));
            BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(targetuser["LastSpeakTime"].ToString()));
            BinaryWriterExpand.Write_Ex(binaryWriter, $"头衔{targetuser["MemberLevel"]}级");
            BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(targetuser["GroupAdmin"].ToString()));
            BinaryWriterExpand.Write_Ex(binaryWriter, 0);
            BinaryWriterExpand.Write_Ex(binaryWriter, targetuser["SpecialTitle"].ToString());
            BinaryWriterExpand.Write_Ex(binaryWriter, 2051193600);
            BinaryWriterExpand.Write_Ex(binaryWriter, 1);
            return(Marshal.StringToHGlobalAnsi(Convert.ToBase64String(stream.ToArray())));
        }
Beispiel #6
0
        public static IntPtr CQ_getGroupMemberList(int authCode, long groupId)
        {
            string  url  = $@"{Save.url}v1/LuaApiCaller?qq={Save.curentQQ}&funcname=friendlist.GetTroopMemberListReq";
            JObject data = new JObject
            {
                { "GroupUin", 0 },
                { "LastUin", 0 }
            };
            JObject      ret              = JsonConvert.DeserializeObject <JObject>(SendRequest(url, data.ToString()));
            MemoryStream streamMain       = new MemoryStream();
            BinaryWriter binaryWriterMain = new BinaryWriter(streamMain);
            JArray       memberls         = JArray.Parse(ret["MemberList"].ToString());

            BinaryWriterExpand.Write_Ex(binaryWriterMain, memberls.Count);
            foreach (var item in memberls)
            {
                MemoryStream stream       = new MemoryStream();
                BinaryWriter binaryWriter = new BinaryWriter(stream);
                BinaryWriterExpand.Write_Ex(binaryWriter, groupId);
                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt64(item["MemberUin"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, item["NickName"].ToString());
                BinaryWriterExpand.Write_Ex(binaryWriter, item["GroupCard"].ToString());
                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(item["Gender"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(item["Age"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, "unkown");
                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(item["JoinTime"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(item["LastSpeakTime"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, $"头衔{item["MemberLevel"]}级");
                BinaryWriterExpand.Write_Ex(binaryWriter, Convert.ToInt32(item["GroupAdmin"].ToString()));
                BinaryWriterExpand.Write_Ex(binaryWriter, 0);
                BinaryWriterExpand.Write_Ex(binaryWriter, item["SpecialTitle"].ToString());
                BinaryWriterExpand.Write_Ex(binaryWriter, 2051193600);
                BinaryWriterExpand.Write_Ex(binaryWriter, 1);

                BinaryWriterExpand.Write_Ex(binaryWriterMain, (short)stream.Length);
                binaryWriterMain.Write(stream.ToArray());
            }
            return(Marshal.StringToHGlobalAnsi(Convert.ToBase64String(streamMain.ToArray())));
        }