예제 #1
0
 public SearchImageCacher()
 {
     _http = new HttpClient();
     _http.AddFakeHeaders();
     _rng   = new Random();
     _cache = new SortedSet <ImageCacherObject>();
 }
예제 #2
0
            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));
            }
예제 #3
0
            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");
                    }
                }
            }
예제 #4
0
            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();
                }
            }
예제 #5
0
            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);
                    }
                }
            }
예제 #6
0
            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);
                }
            }
예제 #7
0
        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);
            }
        });
예제 #8
0
            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);
                }
            }
예제 #9
0
        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());
            }
        }
예제 #10
0
 public SearchImageCacher(IHttpClientFactory http)
 {
     _http = http.CreateClient();
     _http.AddFakeHeaders();
     _rng   = new Random();
     _cache = new SortedSet <ImageCacherObject>();
     _log   = LogManager.GetCurrentClassLogger();
 }
예제 #11
0
        public SearchImageCacher()
        {
            _http = new HttpClient();
            _http.AddFakeHeaders();

            _log   = LogManager.GetCurrentClassLogger();
            _rng   = new NadekoRandom();
            _cache = new SortedSet <ImageCacherObject>();
        }
예제 #12
0
        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);
            }
        }
예제 #13
0
 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;
 }
예제 #14
0
        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);
                }
            });
        }
예제 #15
0
            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);
                    }
                });
            }
예제 #16
0
        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)));
            }
        }
예제 #17
0
            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);
                }
            }
예제 #18
0
        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?");
            }
        }
예제 #19
0
        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);
            }
        }
예제 #20
0
파일: Utils.cs 프로젝트: faulty15/Faulty
        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));
        }
예제 #21
0
        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);
            }
        });
예제 #22
0
        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);
            }
        });
예제 #23
0
        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);
            }
        });
예제 #24
0
        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.");
            }
        }