private static GreenOnionsImageMessage CreateOnceELFHPicture(ELFHPictureItem item)
        {
            GreenOnionsImageMessage imageMsg;
            string imgName = Path.Combine(ImageHelper.ImagePath, $"ELF_{item.ID}.png");

            if (File.Exists(imgName) && new FileInfo(imgName).Length > 0) //存在本地缓存时优先使用缓存
            {
                imageMsg = new GreenOnionsImageMessage(imgName);          //上传图片
            }
            else
            {
                imageMsg = new GreenOnionsImageMessage(item.Link);
                _        = Task.Run(() => HttpHelper.DownloadImageFile(item.Link, imgName)); //仅归档
            }
            return(imageMsg);
        }
        private static GreenOnionsImageMessage CreateOnceLoliconHPicture(LoliconHPictureItem item)
        {
            GreenOnionsImageMessage imageMsg;
            string imgName = Path.Combine(ImageHelper.ImagePath, $"{item.ID}_{item.P}{(BotInfo.HPictureSize1200 ? "_1200" : "")}.png");

            if (File.Exists(imgName) && new FileInfo(imgName).Length > 0) //存在本地缓存时优先使用缓存
            {
                imageMsg = new GreenOnionsImageMessage(imgName);          //上传图片
            }
            else
            {
                imageMsg = new GreenOnionsImageMessage(item.URL);
                _        = Task.Run(() => HttpHelper.DownloadImageFile(item.URL, imgName)); //仅归档
            }
            return(imageMsg);
        }
        private static async Task SendELFHPicture(long senderId, long?senderGroup, string strHttpRequestUrl, Action <GreenOnionsMessages> SendMessage)
        {
            List <GreenOnionsMessages> outMessages = null;

            if (BotInfo.HPictureSendByForward)
            {
                outMessages = new List <GreenOnionsMessages>();
            }

            string resultValue = "";

            try
            {
                resultValue = await HttpHelper.GetHttpResponseStringAsync(strHttpRequestUrl);

                JArray ja = (JArray)JsonConvert.DeserializeObject(resultValue);
                if (ja.Count == 0)
                {
                    SendMessage(BotInfo.HPictureNoResultReply);  //没有结果
                }

                IEnumerable <ELFHPictureItem> enumImg = ja.Select(i => new ELFHPictureItem(i["id"].ToString(), i["link"].ToString().Replace("pixiv.cat", "pixiv.re"), i["source"].ToString(), string.Join(",", i["jp_tag"].Select(s => s.ToString())), string.Join(",", i["zh_tags"].Select(s => s.ToString())), i["author"].ToString()));

                //包含twimg.com的图墙内无法访问, 暂时不处理
                foreach (ELFHPictureItem imgItem in enumImg)
                {
                    GreenOnionsMessages outMessage = new GreenOnionsMessages();
                    if (BotInfo.HPictureSendUrl)
                    {
                        string addresses;
                        if (BotInfo.HPictureSendTags)
                        {
                            addresses = $"{imgItem.Source}\r\n中文标签:{imgItem.Zh_Tags}\r\n日文标签:{imgItem.Jp_Tag}\r\n作者:{imgItem.Author}";
                        }
                        else
                        {
                            addresses = imgItem.Source;
                        }
                        outMessage.Add(addresses);
                        RecordLimit(senderId, senderGroup, LimitType.Frequency);
                    }

                    GreenOnionsImageMessage imgMsg = CreateOnceELFHPicture(imgItem);

                    #region  -- 撤回时间 --
                    if (BotInfo.RevokeBeautyPicture)
                    {
                        if (senderGroup == null)
                        {
                            outMessage.RevokeTime = BotInfo.HPicturePMRevoke;  //私聊撤回
                        }
                        else
                        {
                            if (BotInfo.HPictureWhiteGroup.Contains(senderGroup.Value))  //白名单群撤回
                            {
                                outMessage.RevokeTime = BotInfo.HPictureWhiteRevoke;
                            }
                            else
                            {
                                outMessage.RevokeTime = BotInfo.HPictureRevoke;  //普通群撤回
                            }
                        }
                    }
                    #endregion  -- 撤回时间 --

                    outMessage.Add(imgMsg);
                    if (BotInfo.HPictureSendByForward)
                    {
                        outMessages.Add(outMessage);
                    }
                    else
                    {
                        SendMessage(outMessage);
                    }
                    RecordLimit(senderId, senderGroup, LimitType.Count);
                }

                if (BotInfo.HPictureSendByForward && outMessages.Count > 0)
                {
                    GreenOnionsForwardMessage[] forwardMessages = outMessages.Select(msg => new GreenOnionsForwardMessage(BotInfo.QQId, BotInfo.BotName, msg)).ToArray();
                    SendMessage(forwardMessages);  //合并转发
                }
            }
            catch (Exception ex)
            {
                SendMessage(BotInfo.HPictureErrorReply + ex.Message);  //发生错误
            }
        }
        private static async Task SendLoliconHPhicture(long senderId, long?senderGroup, string strHttpRequestUrl, string sizeUrlName, Action <GreenOnionsMessages> SendMessage)
        {
            string resultValue  = string.Empty;
            string errorMessage = string.Empty;

            try
            {
                resultValue = await HttpHelper.GetHttpResponseStringAsync(strHttpRequestUrl);
            }
            catch (Exception ex)
            {
                errorMessage = BotInfo.HPictureErrorReply + ex.Message;
            }
            if (!string.IsNullOrEmpty(errorMessage))
            {
                SendMessage(errorMessage);
            }

            JObject jo  = (JObject)JsonConvert.DeserializeObject(resultValue);
            JToken  jt  = jo["data"];
            string  err = jo["error"].ToString();

            if (!string.IsNullOrWhiteSpace(err))//Api错误
            {
                SendMessage(BotInfo.HPictureErrorReply + err);
            }

            if (jt.Count() == 0)                            //没找到对应词条的色图;
            {
                SendMessage(BotInfo.HPictureNoResultReply); //没有结果
            }

            IEnumerable <LoliconHPictureItem> enumImg = jt.Select(i => new LoliconHPictureItem(
                                                                      i["p"].ToString(),
                                                                      i["pid"].ToString(),
                                                                      i["urls"][sizeUrlName].ToString(),
                                                                      i["title"].ToString(),
                                                                      i["author"].ToString(),
                                                                      string.Join(",", (i["tags"] as JArray)),
                                                                      @$ "https://www.pixiv.net/artworks/{i[" pid "]}(p{i[" p "]})")
                                                                  );

            if (enumImg == null)
            {
                LogHelper.WriteErrorLog("Lolicon响应解析失败");
                SendMessage(BotInfo.HPictureErrorReply);  //发生错误
            }

            List <GreenOnionsMessages> outMessages = null;

            if (BotInfo.HPictureSendByForward)
            {
                outMessages = new List <GreenOnionsMessages>();
            }

            RecordLimit(senderId, senderGroup, LimitType.Frequency);
            foreach (LoliconHPictureItem imgItem in enumImg)
            {
                GreenOnionsMessages outMessage = new GreenOnionsMessages();
                if (BotInfo.HPictureSendUrl)
                {
                    string addresses;
                    if (BotInfo.HPictureSendTags)
                    {
                        addresses = $@"https://www.pixiv.net/artworks/{imgItem.ID} (p{imgItem.P})\r\n标题:{imgItem.Title}\r\n作者:{imgItem.Author}\r\n标签:{imgItem.Tags}";
                    }
                    else
                    {
                        addresses = $@"https://www.pixiv.net/artworks/{imgItem.ID} (p{imgItem.P})";
                    }
                    outMessage.Add(addresses);
                }

                GreenOnionsImageMessage imgMsg = CreateOnceLoliconHPicture(imgItem);

                #region  -- 撤回时间 --
                if (senderGroup == null)
                {
                    outMessage.RevokeTime = BotInfo.HPicturePMRevoke;  //私聊撤回
                }
                else
                {
                    if (BotInfo.HPictureWhiteGroup.Contains(senderGroup.Value))  //白名单群撤回
                    {
                        outMessage.RevokeTime = BotInfo.HPictureWhiteRevoke;
                    }
                    else
                    {
                        outMessage.RevokeTime = BotInfo.HPictureRevoke;  //普通群撤回
                    }
                }
                #endregion  -- 撤回时间 --

                outMessage.Add(imgMsg);
                if (BotInfo.HPictureSendByForward)
                {
                    outMessages.Add(outMessage);
                }
                else
                {
                    SendMessage(outMessage);
                }
                RecordLimit(senderId, senderGroup, LimitType.Count);
            }

            if (BotInfo.HPictureSendByForward && outMessages.Count > 0)
            {
                GreenOnionsForwardMessage[] forwardMessages = outMessages.Select(msg => new GreenOnionsForwardMessage(BotInfo.QQId, BotInfo.BotName, msg)).ToArray();
                SendMessage(forwardMessages);  //合并转发
            }
        }