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); //合并转发 } }