public SearchImageCacher() { _http = new HttpClient(); _http.AddFakeHeaders(); _rng = new Random(); _cache = new SortedSet <ImageCacherObject>(); }
static AnimeSearchCommands() { _log = LogManager.GetCurrentClassLogger(); anilistTokenRefresher = new Timer(async(state) => { try { var headers = new Dictionary <string, string> { { "grant_type", "client_credentials" }, { "client_id", "kwoth-w0ki9" }, { "client_secret", "Qd6j4FIAi1ZK6Pc7N7V4Z" }, }; using (var http = new HttpClient()) { http.AddFakeHeaders(); var formContent = new FormUrlEncodedContent(headers); var response = await http.PostAsync("http://anilist.co/api/auth/access_token", formContent).ConfigureAwait(false); var stringContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); anilistToken = JObject.Parse(stringContent)["access_token"].ToString(); } } catch (Exception ex) { _log.Error(ex); } }, null, TimeSpan.FromSeconds(0), TimeSpan.FromMinutes(29)); }
public async Task Osu(IUserMessage umsg, string usr, [Remainder] string mode = null) { var channel = (ITextChannel)umsg.Channel; if (string.IsNullOrWhiteSpace(usr)) { return; } using (HttpClient http = new HttpClient()) { try { var m = 0; if (!string.IsNullOrWhiteSpace(mode)) { m = ResolveGameMode(mode); } http.AddFakeHeaders(); var res = await http.GetStreamAsync(new Uri($"http://lemmmy.pw/osusig/sig.php?uname={ usr }&flagshadow&xpbar&xpbarhex&pp=2&mode={m}")).ConfigureAwait(false); MemoryStream ms = new MemoryStream(); res.CopyTo(ms); ms.Position = 0; await channel.SendFileAsync(ms, $"{usr}.png", $"🎧 **Profile Link: **https://osu.ppy.sh/u/{Uri.EscapeDataString(usr)}\n`Image provided by https://lemmmy.pw/osusig`").ConfigureAwait(false); } catch (Exception ex) { await channel.SendMessageAsync("💢 Failed retrieving osu signature :\\").ConfigureAwait(false); _log.Warn(ex, "Osu command failed"); } } }
private async Task RefreshAnilistToken() { if (DateTime.Now - lastRefresh > TimeSpan.FromMinutes(29)) { lastRefresh = DateTime.Now; } else { return; } var headers = new Dictionary <string, string> { { "grant_type", "client_credentials" }, { "client_id", "kwoth-w0ki9" }, { "client_secret", "Qd6j4FIAi1ZK6Pc7N7V4Z" }, }; using (var http = new HttpClient()) { http.AddFakeHeaders(); var formContent = new FormUrlEncodedContent(headers); var response = await http.PostAsync("http://anilist.co/api/auth/access_token", formContent).ConfigureAwait(false); var stringContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); anilistToken = JObject.Parse(stringContent)["access_token"].ToString(); } }
public async Task Osu(string usr, [Remainder] string mode = null) { if (string.IsNullOrWhiteSpace(usr)) { return; } using (var http = new HttpClient()) { try { var m = 0; if (!string.IsNullOrWhiteSpace(mode)) { m = ResolveGameMode(mode); } http.AddFakeHeaders(); var res = await http.GetStreamAsync(new Uri($"http://lemmmy.pw/osusig/sig.php?uname={ usr }&flagshadow&xpbar&xpbarhex&pp=2&mode={m}")).ConfigureAwait(false); var ms = new MemoryStream(); res.CopyTo(ms); ms.Position = 0; await Context.Channel.SendFileAsync(ms, $"{usr}.png", $"🎧 **{GetText("profile_link")}** <https://new.ppy.sh/u/{Uri.EscapeDataString(usr)}>\n`Image provided by https://lemmmy.pw/osusig`").ConfigureAwait(false); } catch (Exception ex) { await ReplyErrorLocalized("osu_failed").ConfigureAwait(false); _log.Warn(ex); } } }
public async Task <OverwatchApiModel.OverwatchPlayer> GetProfile(Region region, string battletag) { try { using (var handler = new HttpClientHandler()) { using (var http = new HttpClient(handler)) { http.AddFakeHeaders(); var url = $"http://owapi.discord.how:2095/api/v3/u/{battletag}/blob?format=json_pretty"; var res = await http.GetStringAsync(url).ConfigureAwait(false); var model = JsonConvert.DeserializeObject <OverwatchApiModel.OverwatchResponse>(res); switch (region) { case Region.Eu: return(model.Eu); case Region.Kr: return(model.Kr); default: return(model.Us); } } } } catch (Exception ex) { _log.Warn(ex); return(null); } }
public async Task <string> GetDerpibooruImageLink(string tag) => await Task.Run(async() => { try { var max = 101; var rng = new Random(); GETIMAGE: using (var http = new HttpClient()) { http.AddFakeHeaders(); var url = $"https://derpibooru.org/search.json?q=explicit%2C-guro"; if (!string.IsNullOrWhiteSpace(tag)) { url += ($"%2C{(tag.Replace("+", "%2C").Replace(" ", "+"))}"); } url += ($"&page={rng.Next(0, max)}&key=h-jh3W2FA7xpssjyyt1y"); var json = await http.GetStringAsync(url).ConfigureAwait(false); var matches = Regex.Matches(json, @"derpicdn\.net\/img\/[0-9]+\/[0-9]+\/[0-9]+\/[0-9]+\/large\.png"); if (matches.Count == 0) { max -= 5; goto GETIMAGE; } var match = matches[rng.Next(0, matches.Count)]; return($"https://{match.Value}"); } } catch { return(null); } });
public async Task <OverwatchApiModel.OverwatchPlayer> GetProfile(Region region, string battletag) { try { using (var handler = new HttpClientHandler()) { handler.ServerCertificateCustomValidationCallback = (x, y, z, e) => true; using (var http = new HttpClient(handler)) { http.AddFakeHeaders(); var url = $"https://owapi.evilMortybot.me/api/v3/u/{battletag}/stats"; var res = await http.GetStringAsync($"https://owapi.evilMortybot.me/api/v3/u/{battletag}/stats"); var model = JsonConvert.DeserializeObject <OverwatchApiModel.OverwatchResponse>(res); switch (region) { case Region.Eu: return(model.Eu); case Region.Kr: return(model.Kr); default: return(model.Us); } } } } catch (Exception ex) { _log.Warn(ex); return(null); } }
public async Task <ImageCacherObject[]> DownloadImages(string tag, bool isExplicit, DapiSearchType type) { _log.Info($"Loading extra images from {type}"); tag = tag?.Replace(" ", "_").ToLowerInvariant(); if (isExplicit) { tag = "rating%3Aexplicit+" + tag; } var website = ""; switch (type) { case DapiSearchType.Safebooru: website = $"https://safebooru.org/index.php?page=dapi&s=post&q=index&limit=1000&tags={tag}"; break; case DapiSearchType.E621: website = $"https://e621.net/post/index.json?limit=1000&tags={tag}"; break; case DapiSearchType.Danbooru: website = $"http://danbooru.donmai.us/posts.json?limit=100&tags={tag}"; break; case DapiSearchType.Gelbooru: website = $"http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=100&tags={tag}"; break; case DapiSearchType.Rule34: website = $"https://rule34.xxx/index.php?page=dapi&s=post&q=index&limit=100&tags={tag}"; break; case DapiSearchType.Konachan: website = $"https://konachan.com/post.json?s=post&q=index&limit=100&tags={tag}"; break; case DapiSearchType.Yandere: website = $"https://yande.re/post.json?limit=100&tags={tag}"; break; } using (var http = new HttpClient()) { http.AddFakeHeaders(); if (type == DapiSearchType.Konachan || type == DapiSearchType.Yandere || type == DapiSearchType.E621 || type == DapiSearchType.Danbooru) { var data = await http.GetStringAsync(website).ConfigureAwait(false); return(JsonConvert.DeserializeObject <DapiImageObject[]>(data) .Where(x => x.File_Url != null) .Select(x => new ImageCacherObject(x, type)) .ToArray()); } return((await LoadXmlAsync(website, type)).ToArray()); } }
public SearchImageCacher(IHttpClientFactory http) { _http = http.CreateClient(); _http.AddFakeHeaders(); _rng = new Random(); _cache = new SortedSet <ImageCacherObject>(); _log = LogManager.GetCurrentClassLogger(); }
public SearchImageCacher() { _http = new HttpClient(); _http.AddFakeHeaders(); _log = LogManager.GetCurrentClassLogger(); _rng = new NadekoRandom(); _cache = new SortedSet <ImageCacherObject>(); }
public static async Task <string> InternalDapiSearch(string tag, DapiSearchType type) { tag = tag?.Replace(" ", "_"); var website = ""; switch (type) { case DapiSearchType.Safebooru: website = $"https://safebooru.org/index.php?page=dapi&s=post&q=index&limit=100&tags={tag}"; break; case DapiSearchType.Gelbooru: website = $"http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=100&tags={tag}"; break; case DapiSearchType.Rule34: website = $"https://rule34.xxx/index.php?page=dapi&s=post&q=index&limit=100&tags={tag}"; break; case DapiSearchType.Konachan: website = $"https://konachan.com/post.xml?s=post&q=index&limit=100&tags={tag}"; break; case DapiSearchType.Yandere: website = $"https://yande.re/post.xml?limit=100&tags={tag}"; break; } try { var toReturn = await Task.Run(async() => { using (var http = new HttpClient()) { http.AddFakeHeaders(); var data = await http.GetStreamAsync(website).ConfigureAwait(false); var doc = new XmlDocument(); doc.Load(data); var node = doc.LastChild.ChildNodes[new NadekoRandom().Next(0, doc.LastChild.ChildNodes.Count)]; var url = node.Attributes["file_url"].Value; if (!url.StartsWith("http")) { url = "https:" + url; } return(url); } }).ConfigureAwait(false); return(toReturn); } catch { return(null); } }
public FF14Service(DiscordSocketClient client, DbService db, EvilMortyBot bot, IDataCache cache, FontProvider fonts) { Http = new HttpClient(); Http.AddFakeHeaders(); _client = client; _db = db; _log = LogManager.GetCurrentClassLogger(); _imgs = cache.LocalImages; _cache = cache; _fonts = fonts; }
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 <string>(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.Mutate(x => x.DrawImage(GraphicsOptions.Default, pointImg, new Point(pointx - 10, pointy - 10))); } string url; using (var http = new HttpClient()) using (var imgStream = new MemoryStream()) { img.SaveAsPng(imgStream); using (var byteContent = new ByteArrayContent(imgStream.ToArray())) { http.AddFakeHeaders(); var reponse = await http.PutAsync("https://transfer.sh/img.png", byteContent).ConfigureAwait(false); url = await reponse.Content.ReadAsStringAsync().ConfigureAwait(false); } } return(url); } } catch (Exception ex) { _log.Warn(ex); return(null); } }); }
public GirlRating(double crazy, double hot, int roll, string advice) { 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 <string>(async() => { try { using (var ms = new MemoryStream(NadekoBot.Images.WifeMatrix.ToArray(), false)) using (var img = new ImageSharp.Image(ms)) { var clr = new ImageSharp.Color(0x0000ff); 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)); var p = new Pen(ImageSharp.Color.Red, 5); //using (var pointMs = File.ReadAllBytes("data/images/point.png").ToStream()) //using (var pointIMg = new ImageSharp.Image(pointMs)) //{ // img.DrawImage(pointIMg, 100, new ImageSharp.Size(100, 100), new Point(pointx, pointy)); //} string url; using (var http = new HttpClient()) using (var imgStream = new MemoryStream()) { img.Save(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); } }); }
public SearchImagesService() { _rng = new Random(); _http = new HttpClient(); _http.AddFakeHeaders(); _cache = new SearchImageCacher(); _db = new ServiceDb <SearchImageContext>(SearchImageContext.BaseOptions.Build()); using (var uow = _db.GetDbContext()) { _blacklistedTags = new ConcurrentDictionary <ulong, HashSet <string> >(uow.BlacklistedTags .ToDictionary(x => x.GuildId, x => new HashSet <string>(x.Tags))); } }
public async Task Randjoke() { using (var http = new HttpClient()) { http.AddFakeHeaders(); var config = Configuration.Default.WithDefaultLoader(); var document = await BrowsingContext.New(config).OpenAsync("http://www.goodbadjokes.com/random"); var html = document.QuerySelector(".post > .joke-content"); var part1 = html.QuerySelector("dt").TextContent; var part2 = html.QuerySelector("dd").TextContent; await Context.Channel.SendConfirmAsync("", part1 + "\n\n" + part2, footer : document.BaseUri).ConfigureAwait(false); } }
public static async Task <string> GetE621ImageLink(string tags) { try { using (var http = new HttpClient()) { http.AddFakeHeaders(); var data = await http.GetStreamAsync("http://e621.net/post/index.xml?tags=" + Uri.EscapeUriString(tags) + "%20order:random&limit=1"); var doc = XDocument.Load(data); return(doc.Descendants("file_url").FirstOrDefault().Value); } } catch (Exception ex) { Console.WriteLine("Error in e621 search: \n" + ex); return("Error, do you have too many tags?"); } }
public static async Task <string> GetGelbooruImageLink(string tag) { using (var http = new HttpClient()) { http.AddFakeHeaders(); var webpage = await http.GetStringAsync("http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=100&tags=" + tag.Replace(" ", "_")).ConfigureAwait(false); var matches = Regex.Matches(webpage, "file_url=\"(?<url>.*?)\""); if (matches.Count == 0) { return(null); } var rng = new NadekoRandom(); var match = matches[rng.Next(0, matches.Count)]; return(matches[rng.Next(0, matches.Count)].Groups["url"].Value); } }
public static CookieCollection GetCookies(string url) { CookieContainer container = new CookieContainer(); HttpResponseMessage res; using (var handler = new HttpClientHandler() { CookieContainer = container }) using (var http = new HttpClient(handler)) { http.AddFakeHeaders(); http.DefaultRequestHeaders.Add("ContentType", "text/html"); res = http.GetAsync(url).GetAwaiter().GetResult(); } var response = res.Content.ReadAsStringAsync().GetAwaiter().GetResult(); return(container.GetCookies(res.RequestMessage.RequestUri)); }
public static Task <string> GetDanbooruImageLink(string tag) => Task.Run(async() => { try { using (var http = new HttpClient()) { http.AddFakeHeaders(); var data = await http.GetStreamAsync("https://danbooru.donmai.us/posts.xml?limit=100&tags=" + tag).ConfigureAwait(false); var doc = new XmlDocument(); doc.Load(data); var nodes = doc.GetElementsByTagName("file-url"); var node = nodes[new NadekoRandom().Next(0, nodes.Count)]; return("https://danbooru.donmai.us" + node.InnerText); } } catch { return(null); } });
public static Task <string> GetE621ImageLink(string tag) => Task.Run(async() => { try { using (var http = new HttpClient()) { http.AddFakeHeaders(); var data = await http.GetStreamAsync("http://e621.net/post/index.xml?tags=" + tag).ConfigureAwait(false); var doc = new XmlDocument(); doc.Load(data); var nodes = doc.GetElementsByTagName("file_url"); var node = nodes[new NadekoRandom().Next(0, nodes.Count)]; return(node.InnerText); } } catch { return(null); } });
public async Task <string> GetPonybooruImageLink(string tag) => await Task.Run(async() => { try { using (var http = new HttpClient()) { http.AddFakeHeaders(); var url = "https://www.bronibooru.com/posts/random?"; if (!string.IsNullOrWhiteSpace(tag)) { url += $"tags={tag.Replace(" ", "_")}"; } var webpage = await http.GetStringAsync(url).ConfigureAwait(false); var match = Regex.Match(webpage, "data-large-file-url=\"(?<id>.*?)\""); return(!match.Success ? null : $"http:{match.Groups["id"].Value}"); } } catch { return(null); } });
public SearchesService(DiscordSocketClient client, IGoogleApiService google, DbService db, Kotocorn bot, IDataCache cache, FontProvider fonts) { Http = new HttpClient(); Http.AddFakeHeaders(); _client = client; _google = google; _db = db; _log = LogManager.GetCurrentClassLogger(); _imgs = cache.LocalImages; _cache = cache; _fonts = fonts; _blacklistedTags = new ConcurrentDictionary <ulong, HashSet <string> >( bot.AllGuildConfigs.ToDictionary( x => x.GuildId, x => new HashSet <string>(x.NsfwBlacklistedTags.Select(y => y.Tag)))); //translate commands _client.MessageReceived += (msg) => { var _ = Task.Run(async() => { try { var umsg = msg as SocketUserMessage; if (umsg == null) { return; } if (!TranslatedChannels.TryGetValue(umsg.Channel.Id, out var autoDelete)) { return; } var key = new UserChannelPair() { UserId = umsg.Author.Id, ChannelId = umsg.Channel.Id, }; if (!UserLanguages.TryGetValue(key, out string langs)) { return; } var text = await Translate(langs, umsg.Resolve(TagHandling.Ignore)) .ConfigureAwait(false); if (autoDelete) { try { await umsg.DeleteAsync().ConfigureAwait(false); } catch { } } await umsg.Channel.SendConfirmAsync($"{umsg.Author.Mention} `:` " + text.Replace("<@ ", "<@").Replace("<@! ", "<@!")).ConfigureAwait(false); } catch { } }); return(Task.CompletedTask); }; //joke commands if (File.Exists("data/wowjokes.json")) { WowJokes = JsonConvert.DeserializeObject <List <WoWJoke> >(File.ReadAllText("data/wowjokes.json")); } else { _log.Warn("data/wowjokes.json is missing. WOW Jokes are not loaded."); } if (File.Exists("data/magicitems.json")) { MagicItems = JsonConvert.DeserializeObject <List <MagicItem> >(File.ReadAllText("data/magicitems.json")); } else { _log.Warn("data/magicitems.json is missing. Magic items are not loaded."); } }