Exemple #1
0
        public static Response GetSafeDanbooru(Request request)
        {
            string[]      baseTags    = { "rating:s" };
            string[]      requestTags = baseTags.Concat(request.CommandArgs).ToArray();
            ResponseImage image       = GetDanbooruImage(requestTags, request.Protocol, request.ChannelId);

            return(image.Url != null ? new Response()
            {
                Image = image
            } : new Response("Nothing found!"));
        }
Exemple #2
0
        public static Response GetDanbooru(Request request)
        {
            if (!request.ChannelIsNsfw)
            {
                return(new Response());
            }

            ResponseImage image = GetDanbooruImage(request.CommandArgs, request.Protocol, request.ChannelId);

            return(image.Url != null ? new Response()
            {
                Image = image
            } : new Response("Nothing found!"));
        }
Exemple #3
0
        /// <summary>
        /// 响应图片
        /// </summary>
        /// <param name="context"></param>
        /// <param name="responseImage"></param>
        private void SendResponseImage(HttpContext context, ResponseImage responseImage)
        {
            string data = @"
<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[{3}]]></MsgType>
<Image>
<MediaId><![CDATA[{4}]]></MediaId>
</Image>
</xml>";

            data = string.Format(data,
                                 responseImage.ToUserName,                   //{0}
                                 responseImage.FromUserName,                 //{1}
                                 responseImage.CreateTime.Ticks,             //{2}
                                 responseImage.MsgType.ToString().ToLower(), //{3}
                                 responseImage.MediaId                       //{4}
                                 );

            SendResponse(context, data);
        }
Exemple #4
0
        public ResponseImage Edit(ResponseImage image)
        {
            var entityEntry = responseImagesDbSet.Update(image);

            return(entityEntry.Entity);
        }
Exemple #5
0
        public async Task <ResponseImage> CreateAsync(ResponseImage image)
        {
            var entityEntry = await responseImagesDbSet.AddAsync(image);

            return(entityEntry.Entity);
        }
Exemple #6
0
 public Response(string message, ResponseImage image)
 {
     Message = message;
     Image   = image;
 }
Exemple #7
0
 public Response(ResponseImage image)
 {
     Message = "";
     Image   = image;
 }
Exemple #8
0
        public async Task <Response> CreateResponseAsync(Request request)
        {
            var requestRepository       = storage.GetRepository <IRequestRepository>();
            var responseRepository      = storage.GetRepository <IResponseRepository>();
            var responseImageRepository = storage.GetRepository <IResponseImageRepository>();

            Response response;

            try
            {
                switch (request.Discriminator)
                {
                case nameof(SwapRequest):
                {
                    string fromImagePath = Path.Combine(fileService.GlobalRequestImagesPath, request.Images.First().ImageName);
                    string toImagePath   = Path.Combine(fileService.GlobalRequestImagesPath, request.Images.Skip(1).First().ImageName);
                    Bitmap swapFaces     = FaceReplacer.ReplaceFaces(fromImagePath, toImagePath);

                    response = new SwapResponse()
                    {
                        Discriminator = nameof(SwapResponse)
                    };
                    await responseRepository.CreateAsync(response);

                    ResponseImage responseImage = new ResponseImage()
                    {
                        Response = response
                    };
                    await responseImageRepository.CreateAsync(responseImage);

                    await storage.SaveAsync();

                    responseImage.ImageName = $"{responseImage.ImageId}.jpg";
                    responseImageRepository.Edit(responseImage);

                    fileService.SaveFile(swapFaces, Path.Combine(fileService.GlobalResponseImagesPath, responseImage.ImageName));

                    break;
                }

                case nameof(CutRequest):
                {
                    FaceRecognizer faceRecognizer = new FaceRecognizer(request.Images.First().ImageName, new RgbPixel(0, 0, 255), facePathSystem);
                    var            faceBuffers    = faceRecognizer.GetAllFacesImages();

                    response = new CutResponse()
                    {
                        Discriminator = nameof(CutResponse)
                    };
                    await responseRepository.CreateAsync(response);

                    foreach (byte[] faceBuffer in faceBuffers)
                    {
                        ResponseImage responseImage = new ResponseImage()
                        {
                            Response = response
                        };
                        await responseImageRepository.CreateAsync(responseImage);

                        await storage.SaveAsync();

                        responseImage.ImageName = $"{responseImage.ImageId}.jpg";
                        responseImageRepository.Edit(responseImage);

                        await fileService.SaveFileAsync(faceBuffer, Path.Combine(fileService.GlobalResponseImagesPath, responseImage.ImageName));
                    }

                    break;
                }

                case nameof(DetectRequest):
                {
                    FaceRecognizer faceRecognizer = new FaceRecognizer(request.Images.First().ImageName, new RgbPixel(0, 0, 255), facePathSystem);
                    byte[]         faceBuffer     = faceRecognizer.GetOutlinedFacesImage();

                    response = new DetectResponse()
                    {
                        Discriminator = nameof(DetectResponse)
                    };
                    await responseRepository.CreateAsync(response);

                    ResponseImage responseImage = new ResponseImage()
                    {
                        Response = response
                    };
                    await responseImageRepository.CreateAsync(responseImage);

                    await storage.SaveAsync();

                    responseImage.ImageName = $"{responseImage.ImageId}.jpg";
                    responseImageRepository.Edit(responseImage);

                    await fileService.SaveFileAsync(faceBuffer, Path.Combine(fileService.GlobalResponseImagesPath, responseImage.ImageName));

                    break;
                }

                default:
                {
                    throw new KeyNotFoundException($"RequestType is {request.Discriminator} not exist.");
                }
                }
                ;
            }
            catch
            {
                foreach (RequestImage requestImage in request.Images)
                {
                    fileService.DeleteFile(Path.Combine(fileService.GlobalRequestImagesPath, requestImage.ImageName));
                }

                requestRepository.Delete(request);
                await storage.SaveAsync();

                throw new InvalidDataException("Non valid images.");
            }

            request.Response = response;
            requestRepository.Edit(request);

            await storage.SaveAsync();

            return(response);
        }