private async Task AddGuildEventInteractive(CommandContext context, InteractivityExtension interactivity, DiscordMessage msg) { using IBotAccessProvider provider = this.accessBuilder.Build(); if (msg == null) { await context.RespondAsync(content : "Ok, what do you want the event name to be?"); } else { await msg.ModifyAsync(content : "Ok, what do you want the event name to be?"); } InteractivityResult <DiscordMessage> result = await interactivity.WaitForMessageAsync(xm => xm.Author.Equals(context.User) && xm.Channel.Equals(context.Channel)); if (result.TimedOut) { DiscordMessage snark = await context.RespondAsync( content : "You failed to provide a valid event title within the time limit, so thanks for wasting a minute of myyyy time. :triumph:"); await Task.Delay(5000); await context.Channel.DeleteMessagesAsync(new List <DiscordMessage> { msg, result.Result, snark }); return; } string eventName = result.Result.Content; await result.Result.DeleteAsync(); await msg.ModifyAsync("What do you want the event description to be?"); result = await interactivity.WaitForMessageAsync(xm => xm.Author.Equals(context.User) && xm.Channel.Equals(context.Channel), timeoutoverride : TimeSpan.FromMinutes(3)); if (result.TimedOut) { DiscordMessage snark = await context.RespondAsync( content : "You failed to provide a valid event description within the time limit, so thanks for wasting a minute of myyyy time. :triumph:"); await Task.Delay(5000); await context.Channel.DeleteMessagesAsync(new List <DiscordMessage> { msg, result.Result, snark }); return; } string eventDesc = result.Result.Content; await result.Result.DeleteAsync(); provider.AddGuildEvent(context.Guild.Id, eventName, eventDesc); DiscordEmbed embed = new DiscordEmbedBuilder() .WithAuthor(context.Client.CurrentUser.Username, iconUrl: context.Client.CurrentUser.AvatarUrl) .WithDescription(eventDesc) .WithTitle(eventName) .Build(); await msg.ModifyAsync("You have added the following event to your guild:", embed : embed); }