using System; using System.IO; using System.Linq; using System.Net.Http; using ImageSharp; using NadekoBot.Common; using NadekoBot.Extensions; using NadekoBot.Core.Services; using NLog; using SixLabors.Primitives; namespace NadekoBot.Modules.Games.Common { public class GirlRating { private static readonly Logger _log = LogManager.GetCurrentClassLogger(); private readonly IImageCache _images; public double Crazy { get; } public double Hot { get; } public int Roll { get; } public string Advice { get; } public AsyncLazy Url { get; } public GirlRating(IImageCache images, double crazy, double hot, int roll, string advice) { _images = images; Crazy = crazy; Hot = hot; Roll = roll; Advice = advice; // convenient to have it here, even though atm there are only few different ones. Url = new AsyncLazy(async () => { try { using (var ms = new MemoryStream(_images.WifeMatrix.ToArray(), false)) using (var img = Image.Load(ms)) { const int minx = 35; const int miny = 385; const int length = 345; var pointx = (int)(minx + length * (Hot / 10)); var pointy = (int)(miny - length * ((Crazy - 4) / 6)); using (var pointMs = new MemoryStream(_images.RategirlDot.ToArray(), false)) using (var pointImg = Image.Load(pointMs)) { img.DrawImage(pointImg, 100, default, new Point(pointx - 10, pointy - 10)); } string url; using (var http = new HttpClient()) using (var imgStream = new MemoryStream()) { img.SaveAsPng(imgStream); var byteContent = new ByteArrayContent(imgStream.ToArray()); http.AddFakeHeaders(); var reponse = await http.PutAsync("https://transfer.sh/img.png", byteContent); url = await reponse.Content.ReadAsStringAsync(); } return url; } } catch (Exception ex) { _log.Warn(ex); return null; } }); } } }