コード例 #1
0
        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)
            );
        }
コード例 #2
0
        /// <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);
        }