Пример #1
0
        public async Task Cancel()
        {
            if (RunningStats.TryGetValue(Context.Channel.Id, out var src))
            {
                await ReplyAsync("Stopping...");

                src.TokenSource.Cancel();
            }
            else
            {
                await ReplyAsync("This channel has no statistics ongoing");
            }
        }
Пример #2
0
        public async Task Run(ITextChannel channel, int maximumMessages = 1000, bool includeBots = false)
        {
            if (RunningStats.TryGetValue(channel.Id, out var stats))
            {
                await ReplyAsync("This channel is already being looked at.");

                return;
            }
            if (RunningStats.Count > 0)
            {
                var existing = RunningStats.Keys.First();
                await ReplyAsync($"A statistics check is already in progress for <#{existing}>, and only one can occur at a time");

                return;
            }
            var msg = await ReplyAsync(embed : new EmbedBuilder()
                                       .WithDescription("Starting stats checks...")
                                       .Build());

            var src = new CancellationTokenSource(TimeSpan.FromMinutes(30));

            stats = new Statistics()
            {
                Channel     = channel as ITextChannel,
                Status      = msg,
                Maximum     = maximumMessages,
                Remaining   = maximumMessages,
                TokenSource = src,
                Token       = src.Token,
                IncludeBots = includeBots
            };
            await msg.ModifyAsync(x => x.Embed = stats.ToEmbed().Build());

            RunningStats[channel.Id] = stats;
            AllStats[stats.Id]       = stats;
            stats.Start();
        }