Exemple #1
0
        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);
        }