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"); } }
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(); }