public async Task ReplInvokeAsync( [Remainder] [Summary("The code to decompile.")] string code) { if (!(Context.Channel is IGuildChannel)) { await ReplyAsync("il can only be executed in public guild channels."); return; } code = FormatUtilities.StripFormatting(code); if (code.Length > 1000) { await ReplyAsync("Decompile Failed: Code is greater than 1000 characters in length"); return; } var guildUser = Context.User as IGuildUser; var message = await Context.Channel.SendMessageAsync("Working..."); var content = FormatUtilities.BuildContent(code); HttpResponseMessage res; try { var client = _httpClientFactory.CreateClient(); using (var tokenSrc = new CancellationTokenSource(30000)) { res = await client.PostAsync(_ilUrl, content, tokenSrc.Token); } } catch (TaskCanceledException) { await message.ModifyAsync(a => { a.Content = $"Gave up waiting for a response from the Decompile service."; }); return; } catch (Exception ex) { await message.ModifyAsync(a => { a.Content = $"Decompile failed: {ex.Message}"; }); Log.Error(ex, "Decompile Failed"); return; } if (!res.IsSuccessStatusCode & res.StatusCode != HttpStatusCode.BadRequest) { await message.ModifyAsync(a => { a.Content = $"Decompile failed: {res.StatusCode}"; }); return; } var parsedResult = await res.Content.ReadAsStringAsync(); var embed = await BuildEmbedAsync(guildUser, code, parsedResult); await _autoRemoveMessageService.RegisterRemovableMessageAsync(Context.User, embed, async (e) => { await message.ModifyAsync(a => { a.Content = string.Empty; a.Embed = e.Build(); }); return(message); }); await Context.Message.DeleteAsync(); }