Пример #1
0
        public async Task BuyCommand()
        {
            var attachments = Context.Message.Attachments;

            if (attachments.Count == 0)
            {
                return;
            }

            var file = attachments.FirstOrDefault(attachment => Path.GetExtension(attachment.Filename) == ".ydk");

            if (file is null)
            {
                await ReplyAsync("Invalid file provided! Must be a ydk or text file!");

                return;
            }

            var    url = file.Url;
            string text;

            await using (var stream = await Web.GetStream(url))
            {
                var buffer = new byte[stream.Length];

                await stream.ReadAsync(buffer.AsMemory(0, (int)stream.Length));

                text = Encoding.UTF8.GetString(buffer);
            }

            var cards = text.Replace("#main", "")
                        .Replace("#extra", "")
                        .Replace("#created by ...", "")
                        .Replace("!side", "")
                        .Split('\n')
                        .Select(passcode => passcode.Trim())
                        .Where(passcode => !string.IsNullOrEmpty(passcode))
                        .Select(async passcode => await YuGiOhDbService.GetNameWithPasscodeAsync(passcode))
                        .Select(task => task.Result)
                        .Where(name => !string.IsNullOrEmpty(name))
                        .GroupBy(name => name)
                        .Aggregate(new StringBuilder(), (builder, group) => builder.Append("||").Append(Uri.EscapeDataString($"{group.Count()} {group.First()}")))
                        .ToString();

            url = $"http://store.tcgplayer.com/massentry?productline=YuGiOh&c={cards}";
            var response = await Web.Post("https://api-ssl.bitly.com/v4/shorten", $"{{\"long_url\": \"{url}\"}}", "Bearer", Config.Instance.Tokens.Bitly);

            url = JObject.Parse(await response.Content.ReadAsStringAsync())["link"].Value <string>();

            await ReplyAsync(url);
        }
Пример #2
0
        private async Task <(string name, int count, double price)> GetName(IGrouping <string, string> group)
        {
            var passcode = group.First();
            var name     = await YuGiOhDbService.GetNameWithPasscodeAsync(passcode);

            if (name is not null)
            {
                var response = await Web.GetResponseMessage(Constants.FandomWikiUrl + passcode);

                name = response.RequestMessage.RequestUri.Segments.Last().Replace('_', ' ');
                name = WebUtility.UrlDecode(name);
            }

            return(name, group.Count(), double.Epsilon);
        }