public async Task <IResult> ListNotesAsync(IUser user) { var notes = await _notes.GetNotesAsync(_context.GuildID.Value, user.ID); var createPages = await PaginatedEmbedFactory.PagesFromCollectionAsync ( notes, async note => { var getAuthor = await _userAPI.GetUserAsync(note.Author.DiscordID); if (!getAuthor.IsSuccess) { return(Result <Embed> .FromError(getAuthor)); } var author = getAuthor.Entity; var getAuthorAvatar = CDN.GetUserAvatarUrl(author); var embedFields = new List <EmbedField>(); var eb = new Embed { Title = $"Note #{note.ID} for {user.Username}:{user.Discriminator}", Colour = Color.Gold, Author = new EmbedAuthor(author.Username) { IconUrl = getAuthorAvatar.IsSuccess ? getAuthorAvatar.Entity.ToString() : default(Optional <string>) }, Description = note.Content, Fields = embedFields }; embedFields.Add(new EmbedField("Created", note.CreatedAt.Humanize())); if (note.CreatedAt != note.UpdatedAt) { embedFields.Add(new EmbedField("Last Updated", note.UpdatedAt.Humanize())); } return(eb); } ); if (createPages.Any(p => !p.IsSuccess)) { return(createPages.First(p => !p.IsSuccess)); } var pages = createPages.Select(p => p.Entity).ToList(); return((Result)await _feedback.SendContextualPaginatedMessageAsync ( _context.User.ID, pages, ct : this.CancellationToken )); }
public async Task <RuntimeResult> ListWarningsAsync(IGuildUser user) { var warnings = await _warnings.GetWarningsAsync(user); var appearance = PaginatedAppearanceOptions.Default; appearance.Title = "Warnings"; appearance.Color = Color.Orange; var paginatedEmbed = await PaginatedEmbedFactory.PagesFromCollectionAsync ( _feedback, _interactivity, this.Context.User, warnings, async (eb, warning) => { eb.WithTitle($"Warning #{warning.ID} for {user.Username}:{user.Discriminator}"); var author = await this.Context.Guild.GetUserAsync((ulong)warning.Author.DiscordID); eb.WithAuthor(author); eb.WithDescription(warning.Reason); eb.AddField("Created", warning.CreatedAt); if (warning.CreatedAt != warning.UpdatedAt) { eb.AddField("Last Updated", warning.UpdatedAt); } if (warning.IsTemporary) { eb.AddField("Expires On", warning.ExpiresOn); } if (!(warning.MessageID is null)) { // TODO } }, appearance : appearance ); await _interactivity.SendInteractiveMessageAndDeleteAsync ( this.Context.Channel, paginatedEmbed, TimeSpan.FromMinutes(5) ); return(RuntimeCommandResult.FromSuccess()); }
public async Task <Result> ShowCharactersAsync(IUser discordUser) { var getCharacters = await _characters.GetUserCharactersAsync ( _context.GuildID.Value, discordUser.ID, this.CancellationToken ); if (!getCharacters.IsSuccess) { return(Result.FromError(getCharacters)); } var getChannel = await _channelAPI.GetChannelAsync(_context.ChannelID, this.CancellationToken); if (!getChannel.IsSuccess) { return(Result.FromError(getChannel)); } var channel = getChannel.Entity; var isChannelNSFW = channel.IsNsfw.IsDefined(out var isNsfw) && isNsfw; var characters = getCharacters.Entity.ToList(); var pages = await PaginatedEmbedFactory.PagesFromCollectionAsync ( characters, async c => { Embed embed; if (c.IsNSFW && !isChannelNSFW) { embed = new Embed(Description: "Redacted (Character is NSFW, but channel is not)"); } else { var createEmbed = await CreateCharacterInfoEmbedAsync(c); if (!createEmbed.IsSuccess) { return(createEmbed); } embed = createEmbed.Entity; } return(embed with { Title = $"{(_context.User.ID == discordUser.ID ? "Your" : $"<@{discordUser.ID}>'s")} characters" }); },
public async Task ListBansAsync(IGuildUser user) { var bans = _bans.GetBans(user); var appearance = PaginatedAppearanceOptions.Default; appearance.Title = "Bans"; appearance.Color = Color.Orange; var paginatedEmbed = await PaginatedEmbedFactory.PagesFromCollectionAsync ( _feedback, _interactivity, this.Context.User, bans, async (eb, ban) => { eb.WithTitle($"Ban #{ban.ID} for {user.Username}:{user.Discriminator}"); var author = await this.Context.Guild.GetUserAsync((ulong)ban.Author.DiscordID); eb.WithAuthor(author); eb.WithDescription(ban.Reason); eb.AddField("Created", ban.CreatedAt); if (ban.CreatedAt != ban.UpdatedAt) { eb.AddField("Last Updated", ban.UpdatedAt); } if (ban.IsTemporary) { eb.AddField("Expires On", ban.ExpiresOn); } if (!(ban.MessageID is null)) { // TODO } }, appearance : appearance ); await _interactivity.SendInteractiveMessageAndDeleteAsync ( this.Context.Channel, paginatedEmbed, TimeSpan.FromMinutes(5) ); }
public async Task <RuntimeResult> ListNotesAsync(IGuildUser user) { var notes = await _notes.GetNotesAsync(user); var appearance = PaginatedAppearanceOptions.Default; appearance.Title = "Notes"; appearance.Color = Color.Gold; var paginatedEmbed = await PaginatedEmbedFactory.PagesFromCollectionAsync ( _feedback, _interactivity, this.Context.User, notes, async (eb, note) => { eb.WithTitle($"Note #{note.ID} for {user.Username}:{user.Discriminator}"); var author = await this.Context.Guild.GetUserAsync((ulong)note.Author.DiscordID); eb.WithAuthor(author); eb.WithDescription(note.Content); eb.AddField("Created", note.CreatedAt); if (note.CreatedAt != note.UpdatedAt) { eb.AddField("Last Updated", note.UpdatedAt); } }, appearance : appearance ); await _interactivity.SendInteractiveMessageAndDeleteAsync ( this.Context.Channel, paginatedEmbed, TimeSpan.FromMinutes(5) ); return(RuntimeCommandResult.FromSuccess()); }
public async Task <RuntimeResult> ListBansAsync() { var bans = await _bans.GetBansAsync(this.Context.Guild); var appearance = PaginatedAppearanceOptions.Default; appearance.Title = "Bans"; appearance.Color = Color.Orange; var paginatedEmbed = await PaginatedEmbedFactory.PagesFromCollectionAsync ( _feedback, _interactivity, this.Context.User, bans, async (eb, ban) => { IUser?bannedUser = null; if (this.Context.Client is DiscordSocketClient socketClient) { bannedUser = await socketClient.Rest.GetUserAsync((ulong)ban.User.DiscordID); } if (bannedUser is null) { eb.WithTitle($"Ban #{ban.ID} for user with ID {ban.User.DiscordID}"); } else { eb.WithTitle($"Ban #{ban.ID} for {bannedUser.Username}:{bannedUser.Discriminator}"); } var author = await this.Context.Guild.GetUserAsync((ulong)ban.Author.DiscordID); eb.WithAuthor(author); eb.WithDescription(ban.Reason); eb.AddField("Created", ban.CreatedAt); if (ban.CreatedAt != ban.UpdatedAt) { eb.AddField("Last Updated", ban.UpdatedAt); } if (ban.IsTemporary) { eb.AddField("Expires On", ban.ExpiresOn); } if (!(ban.MessageID is null)) { // TODO } }, appearance : appearance ); await _interactivity.SendInteractiveMessageAndDeleteAsync ( this.Context.Channel, paginatedEmbed, TimeSpan.FromMinutes(5) ); return(RuntimeCommandResult.FromSuccess()); }
public async Task <IResult> ListBansAsync() { var bans = await _bans.GetBansAsync(_context.GuildID.Value); var createPages = await PaginatedEmbedFactory.PagesFromCollectionAsync ( bans, async ban => { var getBanAuthor = await _userAPI.GetUserAsync(ban.Author.DiscordID); if (!getBanAuthor.IsSuccess) { return(Result <Embed> .FromError(getBanAuthor)); } var banAuthor = getBanAuthor.Entity; var getBannedUser = await _userAPI.GetUserAsync(ban.User.DiscordID); if (!getBannedUser.IsSuccess) { return(Result <Embed> .FromError(getBannedUser)); } var bannedUser = getBanAuthor.Entity; var getBanAuthorAvatar = CDN.GetUserAvatarUrl(banAuthor); var embedFields = new List <IEmbedField>(); var eb = new Embed { Title = $"Ban #{ban.ID} for {bannedUser.Username}:{bannedUser.Discriminator}", Colour = Color.Orange, Author = new EmbedAuthor(banAuthor.Username) { Url = getBanAuthorAvatar.IsSuccess ? getBanAuthorAvatar.Entity.ToString() : default(Optional <string>) }, Description = ban.Reason, Fields = embedFields }; embedFields.Add(new EmbedField("Created", ban.CreatedAt.Humanize())); if (ban.CreatedAt != ban.UpdatedAt) { embedFields.Add(new EmbedField("Last Updated", ban.UpdatedAt.Humanize())); } if (ban.ExpiresOn.HasValue) { embedFields.Add(new EmbedField("Expires On", ban.ExpiresOn.Humanize())); } if (ban.MessageID is not null) { // TODO } return(eb); } ); if (createPages.Any(p => !p.IsSuccess)) { return(createPages.First(p => !p.IsSuccess)); } var pages = createPages.Select(p => p.Entity).ToList(); return((Result)await _feedback.SendContextualPaginatedMessageAsync ( _context.User.ID, pages, ct : this.CancellationToken )); }