Beispiel #1
0
        private async Task <Yolol.Grammar.AST.Program?> Parse(string input)
        {
            var(program, error) = await _parser.Parse(input);

            if (program != null)
            {
                return(program);
            }

            await ReplyAsync(error);

            return(null);
        }
Beispiel #2
0
        public async Task Create()
        {
            await ReplyAsync("What is the challenge title?");

            var title = await NextMessageAsync();

            await ReplyAsync("What is the challenge description?");

            var desc = await NextMessageAsync();

            var levels = string.Join(',', Enum.GetNames(typeof(ChallengeDifficulty)));

            await ReplyAsync($"What is the challenge difficulty ({levels})?");

            var difficulty = Enum.Parse <ChallengeDifficulty>(await NextMessageAsync());

            await ReplyAsync("What's the Challenge code?");

            var code = await NextMessageAsync();

            var(parseOk, parseErr) = await _parser.Parse(code);

            if (parseOk == null || parseErr != null)
            {
                await ReplyAsync("Parse Error! Aborting challenge creation");
                await ReplyAsync(parseErr ?? "Null Error");

                return;
            }

            await ReplyAsync("What is the challenge URL (raw JSON)?");

            var url = await NextMessageAsync();

            if (!Uri.TryCreate(url, UriKind.Absolute, out var datasetUri))
            {
                await ReplyAsync("Invalid URL format");

                return;
            }

            if (datasetUri.Host != "gist.githubusercontent.com")
            {
                await ReplyAsync("URL must begin with `gist.githubusercontent.com`");

                return;
            }

            Data?data;

            try
            {
                using var hc = new HttpClient();
                var json = await hc.GetStringAsync(datasetUri);

                data = JsonConvert.DeserializeObject <Data>(json, new JsonSerializerSettings
                {
                    Converters = new JsonConverter[] {
                        new YololValueConverter()
                    },
                    FloatParseHandling = FloatParseHandling.Decimal
                });
            }
            catch (Exception e)
            {
                await ReplyAsync($"Failed: {e.Message[..Math.Min(1000, e.Message.Length)]}");