public async Task Update(string number, IssueUpdateArgs args) { Issue issue = await((IQueryable <Issue>)DataStore.Issues).SingleOrDefaultAsync(i => i.GuildId == Context.Guild.Id && i.Number == number); if (issue is null) { throw new CommandExecutionException("That issue does not exist"); } var(category, changed) = await IssueHelper.UpdateIssue(issue, args); await Context.Channel.SendMessageAsync(embed : IssueHelper.GenerateInlineIssueEmbed(issue, category: category)); }
public async Task <(IssueCategory, bool)> UpdateIssue(Issue issue, IssueUpdateArgs args) { string number = issue.Number; IssueCategory category = null; issue.Title = args.Title ?? issue.Title; issue.Description = args.Description ?? issue.Description; if (ReferenceEquals(args.Assignee, IssueUpdateArgs.NoUser)) { issue.Assignee = null; } else { issue.Assignee = args.Assignee?.Id ?? issue.Assignee; } issue.ImageUrl = args.Image ?? issue.ImageUrl; issue.ThumbnailUrl = args.Thumbnail ?? issue.ThumbnailUrl; if (args.Status != null && Enum.TryParse(typeof(IssueStatus), args.Status.Replace(" ", ""), true, out object s)) { issue.Status = s as IssueStatus? ?? throw new CommandExecutionException("Invalid value for `Status`"); } else if (args.Status != null) { throw new CommandExecutionException("Invalid value for `Status`"); } if (args.Priority != null && Enum.TryParse(typeof(IssuePriority), args.Priority.Replace(" ", ""), true, out object p)) { issue.Priority = p as IssuePriority? ?? throw new CommandExecutionException("Invalid value for `Priority`"); } else if (args.Priority != null) { throw new CommandExecutionException("Invalid value for `Priority`"); } if (args.Category != null) { throw new CommandExecutionException("Changing issue categories is not supported. Please close this issue and open another."); } await dataStore.SaveChangesAsync(); await UpdateLogIssueEmbed(issue, issue.Category); return(category, number != issue.Number); }