public async Task <IActionResult> Index([FromQuery] string key) { var item = ChannelboardWeb.GetItem(key); if (item == null) { return(View(new ChannelboardViewModel(ChannelboardErrors.InvalidKey))); } var guild = Client.GetGuild(item.GuildID); if (guild == null) { return(View(new ChannelboardViewModel(ChannelboardErrors.InvalidGuild))); } var user = await guild.GetUserFromGuildAsync(item.UserID); if (user == null) { return(View(new ChannelboardViewModel(ChannelboardErrors.UserAtGuildNotFound))); } var data = await ChannelStats.GetChannelboardDataAsync(guild, user); return(View(new ChannelboardViewModel(guild, user, data))); }
public IActionResult GetChannelboardData(string token) { if (string.IsNullOrEmpty(token)) { return(BadRequest(new { Error = "Missing token", Code = ChannelboardErrors.MissingWebToken })); } if (!ChannelStats.ExistsWebToken(token)) { return(BadRequest(new { Error = "Invalid token", Code = ChannelboardErrors.InvalidWebToken })); } var channelboardData = ChannelStats.GetChannelboardData(token, DiscordClient, out ChannelboardWebToken webToken); var guild = DiscordClient.Guilds.First(); var guildUser = guild.GetUser(webToken.UserID); var data = new Channelboard() { Items = channelboardData, Guild = GuildInfo.Create(guild), User = GuildUser.Create(guildUser) }; return(Ok(data)); }
public MessageDeletedHandler(DiscordSocketClient client, ChannelStats channelStats, Logger logger, CalledEventStats calledEventStats) { Client = client; Statistics = channelStats; Logger = logger; CalledEventStats = calledEventStats; }
public LeaderboardController(ChannelStats stats, DiscordSocketClient client, ChannelboardWeb channelboardWeb, UnverifyLogger unverifyLogger) { ChannelStats = stats; Client = client; ChannelboardWeb = channelboardWeb; UnverifyLogger = unverifyLogger; }
public BotStatusService(ChannelStats channelStats, IHostingEnvironment hostingEnvironment, Logger.Logger logger, IOptions <Configuration> config, Statistics.Statistics statistics) { Statistics = statistics; HostingEnvironment = hostingEnvironment; Logger = logger; Config = config.Value; ChannelStats = channelStats; }
public MessageReceivedHandler(DiscordSocketClient client, CommandService commands, IOptions <Configuration> config, IServiceProvider services, ChannelStats channelStats, AutoReplyService autoReply, EmoteChain emoteChain, CalledEventStats calledEventStats, Statistics statistics, EmoteStats emoteStats) { Client = client; Commands = commands; Services = services; ChannelStats = channelStats; AutoReply = autoReply; EmoteChain = emoteChain; CalledEventStats = calledEventStats; Statistics = statistics; EmoteStats = emoteStats; Config = config.Value; }
public SimpleBotStatus GetSimpleStatus() { var process = Process.GetCurrentProcess(); return(new SimpleBotStatus() { RamUsage = FormatHelper.FormatAsSize(process.WorkingSet64), ActiveWebTokensCount = ChannelStats.GetActiveWebTokensCount(), InstanceType = GetInstanceType(), StartTime = process.StartTime, ThreadStatus = GetThreadStatus(process), AvgReactTime = Statistics.GetAvgReactTime(), ActiveCpuTime = process.TotalProcessorTime }); }
public WrappedCallInvoker(ChannelStats channelStats, CallInvoker callInvoker) { _channelStats = channelStats; _baseCallInvoker = callInvoker; }
private async void run_Click(object sender, RoutedEventArgs e) { StatsConfig conf = DataContext as StatsConfig; guildName.Text = conf.Guild.Name; preRunContent.Visibility = Visibility.Collapsed; runContent.Visibility = Visibility.Visible; GuildStats stats = new GuildStats(conf.Guild); StringBuilder strBuilder = new StringBuilder(); if (selectAllChannels.IsChecked != false) { foreach (var channel in selectedChannels.SelectedItems.Cast <DiscordChannel>()) { strBuilder.Append($"&channel_id={channel.Id}"); } } string append = strBuilder.ToString(); string initialResult = await _httpClient.GetStringAsync($"https://discordapp.com/api/v7/guilds/{conf.Guild.Id}/messages/search?include_nsfw=true" + append); stats.TotalMessages = GetCount(initialResult); if (conf.UserMentionCounts == true || conf.UserMessageCounts == true) { await SetStatus("Retrieving members... (This may take a while)"); var members = (await conf.Guild.GetAllMembersAsync()).OrderBy(m => m.Username).ToList(); if (selectAllRoles.IsChecked != true) { members.RemoveAll(m => !m.Roles.Any(r => selectedRoles.SelectedItems.Contains(r))); } var users = members.Cast <DiscordUser>().ToList(); if (conf.IncludeBannedUsers == true) { await SetStatus("Retrieving bans... (This may take a while)"); var bans = await conf.Guild.GetBansAsync(); users.AddRange(bans.Select(b => b.User)); } Stopwatch watch = new Stopwatch(); TimeSpan timeSpan = default; watch.Start(); for (int i = 0; i < users.Count; i++) { var m = users.ElementAt(i); await SetStatus($"Searching for @{m.Username}#{m.Discriminator}", $"{i + 1}/{users.Count} - {timeSpan:mm\\:ss} remaining", i, users.Count); var mstats = new MemberStats(m, stats.TotalMessages); if (conf.UserMessageCounts == true) { try { string sentResult = await _httpClient.GetStringAsync($"https://discordapp.com/api/v7/guilds/{conf.Guild.Id}/messages/search?author_id={m.Id}&include_nsfw=true" + append); mstats.SentMessages = GetCount(sentResult); stats.MessagesAccountedFor += mstats.SentMessages; var array = JObject.Parse(sentResult)["messages"].FirstOrDefault(); if (array != null) { var message = array.ElementAtOrDefault(1) ?? array.ElementAtOrDefault(0); if (message != null) { mstats.LastMessage = message["timestamp"].ToObject <DateTimeOffset>().ToUniversalTime(); } } if (conf.BanMeDaddy != false) { await Task.Delay(100); } } catch (Exception ex) { HandleError(ex); continue; } } if (conf.UserMentionCounts == true) { try { string sentResult = await _httpClient.GetStringAsync($"https://discordapp.com/api/v7/guilds/{conf.Guild.Id}/messages/search?mentions={m.Id}&include_nsfw=true" + append); mstats.Mentions = GetCount(sentResult); if (conf.BanMeDaddy != false) { await Task.Delay(100); } } catch (Exception ex) { HandleError(ex); continue; } } timeSpan = TimeSpan.FromTicks((watch.Elapsed.Ticks / (i + 1)) * (users.Count - i)); stats.MemberStats.Add(mstats); } } if (conf.ChannelMessageCounts == true) { DiscordMember currentMember = conf.Guild.CurrentMember; configureGrid.Visibility = Visibility.Visible; var channels = conf.Guild.Channels .Where(c => c.PermissionsFor(currentMember).HasFlag(Permissions.AccessChannels)) .Where(c => c.Type == ChannelType.Text) .OrderBy(c => c.Position).ToList(); for (int i = 0; i < channels.Count; i++) { DiscordChannel c = channels.ElementAt(i); await SetStatus($"Getting message count for #{c.Name}", $"{i + 1}/{channels.Count}", i, channels.Count); ChannelStats channelStat = new ChannelStats(c); string result = await _httpClient.GetStringAsync($"https://discordapp.com/api/v7/guilds/{conf.Guild.Id}/messages/search?channel_id={c.Id}&include_nsfw=true"); channelStat.Messages = GetCount(result); stats.ChannelStats.Add(channelStat); if (conf.BanMeDaddy != false) { await Task.Delay(100); } } } await Dispatcher.InvokeAsync(() => { runContent.Visibility = Visibility.Collapsed; resultsContent.Visibility = Visibility.Visible; resultsContent.Navigate(new ResultsPage(stats)); }); }
public ChannelboardModule(ChannelStats channelStats, ChannelboardWeb channelboardWeb) { Stats = channelStats; ChannelboardWeb = channelboardWeb; }
private async Task OnMessageReceivedAsync(SocketMessage message) { CalledEventStats.Increment("MessageReceived"); var messageStopwatch = new Stopwatch(); messageStopwatch.Start(); try { if (!TryParseMessage(message, out SocketUserMessage userMessage)) { return; } var commandStopwatch = new Stopwatch(); var context = new SocketCommandContext(Client, userMessage); if (message.Channel is IPrivateChannel && !Config.IsUserBotAdmin(userMessage.Author.Id)) { return; } int argPos = 0; if (userMessage.HasStringPrefix(Config.CommandPrefix, ref argPos) || userMessage.HasMentionPrefix(Client.CurrentUser, ref argPos)) { await LogCommandAsync(userMessage, context, argPos).ConfigureAwait(false); commandStopwatch.Start(); var result = await Commands.ExecuteAsync(context, userMessage.Content.Substring(argPos), Services).ConfigureAwait(false); commandStopwatch.Stop(); if (!result.IsSuccess && result.Error != null) { switch (result.Error.Value) { case CommandError.UnknownCommand: return; case CommandError.UnmetPrecondition: case CommandError.ParseFailed: await context.Channel.SendMessageAsync(result.ErrorReason.PreventMassTags()).ConfigureAwait(false); break; case CommandError.BadArgCount: await SendCommandHelp(context, argPos).ConfigureAwait(false); break; default: throw new BotException(result); } } var command = message.Content.Split(' ')[0]; Statistics.LogCall(command, commandStopwatch.ElapsedMilliseconds); await EmoteChain.CleanupAsync(context.Channel, true).ConfigureAwait(false); } else { await ChannelStats.IncrementCounterAsync(userMessage.Channel).ConfigureAwait(false); await AutoReply.TryReplyAsync(userMessage).ConfigureAwait(false); await EmoteChain.ProcessChainAsync(context).ConfigureAwait(false); await EmoteStats.AnylyzeMessageAndIncrementValuesAsync(context).ConfigureAwait(false); } } finally { messageStopwatch.Stop(); Statistics.ComputeAvgReact(messageStopwatch.ElapsedMilliseconds); } }
public ChannelboardController(ChannelStats stats, DiscordSocketClient client, ChannelboardWeb channelboardWeb) { ChannelStats = stats; Client = client; ChannelboardWeb = channelboardWeb; }
public ChannelboardController(ChannelStats channelStats, DiscordSocketClient discordClient) { ChannelStats = channelStats; DiscordClient = discordClient; }
public static void ToExcel(GuildStats stats) { using (CommonSaveFileDialog dialog = new CommonSaveFileDialog()) { dialog.Filters.Add(new CommonFileDialogFilter("Excel file", ".xlsx")); if (dialog.ShowDialog() == CommonFileDialogResult.Ok) { Ookii.Dialogs.Wpf.TaskDialog progressDialog = new Ookii.Dialogs.Wpf.TaskDialog { Content = $"Exporting to \"{Path.GetFileName(dialog.FileName)}.xlsx\"", AllowDialogCancellation = false, WindowTitle = "Exporting to Excel" }; progressDialog.Buttons.Add(new Ookii.Dialogs.Wpf.TaskDialogButton(Ookii.Dialogs.Wpf.ButtonType.Cancel)); progressDialog.ProgressBarState = Ookii.Dialogs.Wpf.ProgressBarState.Normal; progressDialog.ProgressBarStyle = Ookii.Dialogs.Wpf.ProgressBarStyle.MarqueeProgressBar; progressDialog.ProgressBarMaximum = stats.MemberStats.Count() + stats.ChannelStats.Count(); new Thread(() => { try { Application app = new Application(); Workbook workbook = app.Workbooks.Add(); Worksheet memberSheet = workbook.Sheets.Add(); try { App.Current.Dispatcher.Invoke(() => progressDialog.ProgressBarStyle = Ookii.Dialogs.Wpf.ProgressBarStyle.ProgressBar); memberSheet.Name = "Members"; memberSheet.Cells[1, 1] = "Id"; memberSheet.Cells[1, 2] = "Username"; memberSheet.Cells[1, 3] = "Sent Messages"; memberSheet.Cells[1, 4] = "Mentions"; memberSheet.Cells[1, 5] = "Avg Messages / Day"; memberSheet.Cells[1, 6] = "Last Message"; for (int i = 0; i < stats.MemberStats.Count(); i++) { MemberStats stat = stats.MemberStats.ElementAt(i); memberSheet.Cells[i + 2, 1] = stat.Id.ToString(); memberSheet.Cells[i + 2, 2] = stat.Username.Trim('='); memberSheet.Cells[i + 2, 3] = stat.SentMessages; memberSheet.Cells[i + 2, 4] = stat.Mentions; memberSheet.Cells[i + 2, 5] = stat.AvgMessagesPerDay; memberSheet.Cells[i + 2, 6] = stat.LastMessage.ToString(); if ((i % 3) == 0) { App.Current.Dispatcher.Invoke(() => { try { progressDialog.ProgressBarValue = (progressDialog.ProgressBarValue + 3); } catch { } }); } } Worksheet channelsSheet = workbook.Sheets.Add(); channelsSheet.Name = "Channels"; channelsSheet.Cells[1, 1] = "Id"; channelsSheet.Cells[1, 2] = "Name"; channelsSheet.Cells[1, 3] = "Message Count"; channelsSheet.Cells[1, 4] = "Avg Messages / Day"; for (int i = 0; i < stats.ChannelStats.Count(); i++) { ChannelStats stat = stats.ChannelStats.ElementAt(i); channelsSheet.Cells[i + 2, 1] = stat.Id.ToString(); channelsSheet.Cells[i + 2, 2] = stat.Name.Trim('='); channelsSheet.Cells[i + 2, 3] = stat.Messages; channelsSheet.Cells[i + 2, 4] = stat.AvgMessagesPerDay; App.Current.Dispatcher.Invoke(() => { try { progressDialog.ProgressBarValue = (progressDialog.ProgressBarValue + 1); } catch { } }); } } finally { workbook.SaveAs(dialog.FileName); workbook.Close(); app.Quit(); App.Current.Dispatcher.Invoke(() => progressDialog.Dispose()); } } catch (Exception ex) { MainWindow.ShowTaskDialog($"Something went wrong exporting to Excel and an {ex.GetType().Name} occured.", Ookii.Dialogs.Wpf.TaskDialogIcon.Error); App.Current.Dispatcher.Invoke(() => progressDialog.Dispose()); } }).Start(); progressDialog.Show(); } } }
public ChannelboardModule(ChannelStats channelStats) { Stats = channelStats; }