public async Task ListWarningsAsync(IGuildUser user) { var warnings = _warnings.GetWarnings(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) ); }
/// <inheritdoc/> protected override async Task OnTickAsync(CancellationToken ct) { if (this.Client.ConnectionState != ConnectionState.Connected) { // Give the client some time to start up await Task.Delay(TimeSpan.FromSeconds(5), ct); return; } var now = DateTime.UtcNow; foreach (var guild in this.Client.Guilds) { var warnings = _warnings.GetWarnings(guild).Where(w => w.IsTemporary); foreach (var warning in warnings) { if (warning.ExpiresOn <= now) { await _warnings.DeleteWarningAsync(warning); } } if (!guild.GetUser(this.Client.CurrentUser.Id).GuildPermissions.BanMembers) { // No point in trying to rescind bans if the bot doesn't have ban perms continue; } var bans = _bans.GetBans(guild).Where(b => b.IsTemporary); foreach (var ban in bans) { if (ban.ExpiresOn <= now) { await _bans.DeleteBanAsync(ban); await guild.RemoveBanAsync((ulong)ban.User.DiscordID); } } } await Task.Delay(TimeSpan.FromHours(1), ct); }