Beispiel #1
0
        public override void Write()
        {
            _worldPacket.WriteBit(ForEnemy);
            _worldPacket.FlushBits();

            MemberStats.Write(_worldPacket);
            _worldPacket.WritePackedGuid(MemberGuid);
        }
Beispiel #2
0
    void Awake()
    {
        name   = Helper.FindInChildren(gameObject, "CharName").GetComponent <Text>();
        level  = Helper.FindInChildren(gameObject, "Level").GetComponent <Text>();
        clas   = Helper.FindInChildren(gameObject, "Class").GetComponent <Text>();
        health = Helper.FindInChildren(gameObject, "HP").GetComponent <Text>();
        sanity = Helper.FindInChildren(gameObject, "Sanity").GetComponent <Text>();

        stats = GameObject.Find("MemberStatSheet").GetComponent <MemberStats>();
    }
Beispiel #3
0
        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));
            });
        }
Beispiel #4
0
        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();
                }
            }
        }