Esempio n. 1
0
        internal static RoleCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson colorModel       = changes.FirstOrDefault(x => x.ChangedProperty == "color");
            API.AuditLogChangeJson mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable");
            API.AuditLogChangeJson hoistModel       = changes.FirstOrDefault(x => x.ChangedProperty == "hoist");
            API.AuditLogChangeJson nameModel        = changes.FirstOrDefault(x => x.ChangedProperty == "name");
            API.AuditLogChangeJson permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions");

            uint?  colorRaw       = colorModel?.NewValue?.ToObject <uint>(discord.ApiClient.Serializer);
            bool?  mentionable    = mentionableModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);
            bool?  hoist          = hoistModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);
            string name           = nameModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            ulong? permissionsRaw = permissionsModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);

            Color?           color       = null;
            GuildPermissions?permissions = null;

            if (colorRaw.HasValue)
            {
                color = new Color(colorRaw.Value);
            }
            if (permissionsRaw.HasValue)
            {
                permissions = new GuildPermissions(permissionsRaw.Value);
            }

            return(new RoleCreateAuditLogData(entry.TargetId.Value,
                                              new RoleEditInfo(color, mentionable, hoist, name, permissions)));
        }
Esempio n. 2
0
        internal static ChannelUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson nameModel             = changes.FirstOrDefault(x => x.ChangedProperty == "name");
            API.AuditLogChangeJson topicModel            = changes.FirstOrDefault(x => x.ChangedProperty == "topic");
            API.AuditLogChangeJson rateLimitPerUserModel = changes.FirstOrDefault(x => x.ChangedProperty == "rate_limit_per_user");
            API.AuditLogChangeJson nsfwModel             = changes.FirstOrDefault(x => x.ChangedProperty == "nsfw");
            API.AuditLogChangeJson bitrateModel          = changes.FirstOrDefault(x => x.ChangedProperty == "bitrate");
            API.AuditLogChangeJson typeModel             = changes.FirstOrDefault(x => x.ChangedProperty == "type");

            string oldName          = nameModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newName          = nameModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            string oldTopic         = topicModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newTopic         = topicModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            int?oldRateLimitPerUser = rateLimitPerUserModel?.OldValue?.ToObject <int>(discord.ApiClient.Serializer),
               newRateLimitPerUser  = rateLimitPerUserModel?.NewValue?.ToObject <int>(discord.ApiClient.Serializer);
            bool?oldNsfw            = nsfwModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer),
                newNsfw             = nsfwModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);
            int?oldBitrate          = bitrateModel?.OldValue?.ToObject <int>(discord.ApiClient.Serializer),
               newBitrate           = bitrateModel?.NewValue?.ToObject <int>(discord.ApiClient.Serializer);
            ChannelType?oldType     = typeModel?.OldValue?.ToObject <ChannelType>(discord.ApiClient.Serializer),
                       newType      = typeModel?.NewValue?.ToObject <ChannelType>(discord.ApiClient.Serializer);

            ChannelInfo before = new ChannelInfo(oldName, oldTopic, oldRateLimitPerUser, oldNsfw, oldBitrate, oldType);
            ChannelInfo after  = new ChannelInfo(newName, newTopic, newRateLimitPerUser, newNsfw, newBitrate, newType);

            return(new ChannelUpdateAuditLogData(entry.TargetId.Value, before, after));
        }
        internal static InviteUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson maxAgeModel    = changes.FirstOrDefault(x => x.ChangedProperty == "max_age");
            API.AuditLogChangeJson codeModel      = changes.FirstOrDefault(x => x.ChangedProperty == "code");
            API.AuditLogChangeJson temporaryModel = changes.FirstOrDefault(x => x.ChangedProperty == "temporary");
            API.AuditLogChangeJson channelIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id");
            API.AuditLogChangeJson maxUsesModel   = changes.FirstOrDefault(x => x.ChangedProperty == "max_uses");

            int?oldMaxAge      = maxAgeModel?.OldValue?.ToObject <int>(discord.ApiClient.Serializer),
               newMaxAge       = maxAgeModel?.NewValue?.ToObject <int>(discord.ApiClient.Serializer);
            string oldCode     = codeModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newCode     = codeModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            bool?oldTemporary  = temporaryModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer),
                newTemporary   = temporaryModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);
            ulong?oldChannelId = channelIdModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer),
                 newChannelId  = channelIdModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            int?oldMaxUses     = maxUsesModel?.OldValue?.ToObject <int>(discord.ApiClient.Serializer),
               newMaxUses      = maxUsesModel?.NewValue?.ToObject <int>(discord.ApiClient.Serializer);

            InviteInfo before = new InviteInfo(oldMaxAge, oldCode, oldTemporary, oldChannelId, oldMaxUses);
            InviteInfo after  = new InviteInfo(newMaxAge, newCode, newTemporary, newChannelId, newMaxUses);

            return(new InviteUpdateAuditLogData(before, after));
        }
        internal static InviteDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson maxAgeModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_age");
            API.AuditLogChangeJson codeModel = changes.FirstOrDefault(x => x.ChangedProperty == "code");
            API.AuditLogChangeJson temporaryModel = changes.FirstOrDefault(x => x.ChangedProperty == "temporary");
            API.AuditLogChangeJson inviterIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "inviter_id");
            API.AuditLogChangeJson channelIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id");
            API.AuditLogChangeJson usesModel = changes.FirstOrDefault(x => x.ChangedProperty == "uses");
            API.AuditLogChangeJson maxUsesModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_uses");

            int maxAge = maxAgeModel.OldValue.ToObject<int>(discord.ApiClient.Serializer);
            string code = codeModel.OldValue.ToObject<string>(discord.ApiClient.Serializer);
            bool temporary = temporaryModel.OldValue.ToObject<bool>(discord.ApiClient.Serializer);
            ulong channelId = channelIdModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer);
            int uses = usesModel.OldValue.ToObject<int>(discord.ApiClient.Serializer);
            int maxUses = maxUsesModel.OldValue.ToObject<int>(discord.ApiClient.Serializer);

            RestUser inviter = null;
            if (inviterIdModel != null)
            {
                ulong inviterId = inviterIdModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer);
                API.UserJson inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId);
                inviter = RestUser.Create(discord, inviterInfo);
            }

            return new InviteDeleteAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses);
        }
Esempio n. 5
0
        internal static EmoteDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson change = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "name");

            string emoteName = change.OldValue?.ToObject <string>(discord.ApiClient.Serializer);

            return(new EmoteDeleteAuditLogData(entry.TargetId.Value, emoteName));
        }
        internal static RoleUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson colorModel       = changes.FirstOrDefault(x => x.ChangedProperty == "color");
            API.AuditLogChangeJson mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable");
            API.AuditLogChangeJson hoistModel       = changes.FirstOrDefault(x => x.ChangedProperty == "hoist");
            API.AuditLogChangeJson nameModel        = changes.FirstOrDefault(x => x.ChangedProperty == "name");
            API.AuditLogChangeJson permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions");

            uint?oldColorRaw        = colorModel?.OldValue?.ToObject <uint>(discord.ApiClient.Serializer),
                newColorRaw         = colorModel?.NewValue?.ToObject <uint>(discord.ApiClient.Serializer);
            bool?oldMentionable     = mentionableModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer),
                newMentionable      = mentionableModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);
            bool?oldHoist           = hoistModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer),
                newHoist            = hoistModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);
            string oldName          = nameModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newName          = nameModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            ulong?oldPermissionsRaw = permissionsModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer),
                 newPermissionsRaw  = permissionsModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);

            Color?oldColor = null,
                 newColor  = null;
            GuildPermissions?oldPermissions = null,
                            newPermissions  = null;

            if (oldColorRaw.HasValue)
            {
                oldColor = new Color(oldColorRaw.Value);
            }
            if (newColorRaw.HasValue)
            {
                newColor = new Color(newColorRaw.Value);
            }
            if (oldPermissionsRaw.HasValue)
            {
                oldPermissions = new GuildPermissions(oldPermissionsRaw.Value);
            }
            if (newPermissionsRaw.HasValue)
            {
                newPermissions = new GuildPermissions(newPermissionsRaw.Value);
            }

            RoleEditInfo oldProps = new RoleEditInfo(oldColor, oldMentionable, oldHoist, oldName, oldPermissions);
            RoleEditInfo newProps = new RoleEditInfo(newColor, newMentionable, newHoist, newName, newPermissions);

            return(new RoleUpdateAuditLogData(entry.TargetId.Value, oldProps, newProps));
        }
Esempio n. 7
0
        internal static WebhookDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson channelIdModel  = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id");
            API.AuditLogChangeJson typeModel       = changes.FirstOrDefault(x => x.ChangedProperty == "type");
            API.AuditLogChangeJson nameModel       = changes.FirstOrDefault(x => x.ChangedProperty == "name");
            API.AuditLogChangeJson avatarHashModel = changes.FirstOrDefault(x => x.ChangedProperty == "avatar_hash");

            ulong       channelId  = channelIdModel.OldValue.ToObject <ulong>(discord.ApiClient.Serializer);
            WebhookType type       = typeModel.OldValue.ToObject <WebhookType>(discord.ApiClient.Serializer);
            string      name       = nameModel.OldValue.ToObject <string>(discord.ApiClient.Serializer);
            string      avatarHash = avatarHashModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer);

            return(new WebhookDeleteAuditLogData(entry.TargetId.Value, channelId, type, name, avatarHash));
        }
Esempio n. 8
0
        internal static OverwriteCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson denyModel  = changes.FirstOrDefault(x => x.ChangedProperty == "deny");
            API.AuditLogChangeJson allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow");

            ulong deny  = denyModel.NewValue.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong allow = allowModel.NewValue.ToObject <ulong>(discord.ApiClient.Serializer);

            OverwritePermissions permissions = new OverwritePermissions(allow, deny);

            ulong            id   = entry.Options.OverwriteTargetId.Value;
            PermissionTarget type = entry.Options.OverwriteType;

            return(new OverwriteCreateAuditLogData(entry.TargetId.Value, new Overwrite(id, type, permissions)));
        }
        internal static WebhookCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson channelIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id");
            API.AuditLogChangeJson typeModel      = changes.FirstOrDefault(x => x.ChangedProperty == "type");
            API.AuditLogChangeJson nameModel      = changes.FirstOrDefault(x => x.ChangedProperty == "name");

            ulong       channelId = channelIdModel.NewValue.ToObject <ulong>(discord.ApiClient.Serializer);
            WebhookType type      = typeModel.NewValue.ToObject <WebhookType>(discord.ApiClient.Serializer);
            string      name      = nameModel.NewValue.ToObject <string>(discord.ApiClient.Serializer);

            API.WebhookJson webhookInfo = log.Webhooks?.FirstOrDefault(x => x.Id == entry.TargetId);
            RestWebhook     webhook     = webhookInfo == null ? null : RestWebhook.Create(discord, (IGuild)null, webhookInfo);

            return(new WebhookCreateAuditLogData(webhook, entry.TargetId.Value, type, name, channelId));
        }
        internal static OverwriteUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson denyModel  = changes.FirstOrDefault(x => x.ChangedProperty == "deny");
            API.AuditLogChangeJson allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow");

            ulong?beforeAllow = allowModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong?afterAllow  = allowModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong?beforeDeny  = denyModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong?afterDeny   = denyModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);

            OverwritePermissions beforePermissions = new OverwritePermissions(beforeAllow ?? 0, beforeDeny ?? 0);
            OverwritePermissions afterPermissions  = new OverwritePermissions(afterAllow ?? 0, afterDeny ?? 0);

            PermissionTarget type = entry.Options.OverwriteType;

            return(new OverwriteUpdateAuditLogData(entry.TargetId.Value, beforePermissions, afterPermissions, entry.Options.OverwriteTargetId.Value, type));
        }
        internal static MemberUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson nickModel = changes.FirstOrDefault(x => x.ChangedProperty == "nick");
            API.AuditLogChangeJson deafModel = changes.FirstOrDefault(x => x.ChangedProperty == "deaf");
            API.AuditLogChangeJson muteModel = changes.FirstOrDefault(x => x.ChangedProperty == "mute");

            string oldNick = nickModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newNick = nickModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            bool?oldDeaf   = deafModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer),
                newDeaf    = deafModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);
            bool?oldMute   = muteModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer),
                newMute    = muteModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);

            API.UserJson targetInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId);
            RestUser     user       = RestUser.Create(discord, targetInfo);

            MemberInfo before = new MemberInfo(oldNick, oldDeaf, oldMute);
            MemberInfo after  = new MemberInfo(newNick, newDeaf, newMute);

            return(new MemberUpdateAuditLogData(user, before, after));
        }
        internal static ChannelDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson overwritesModel       = changes.FirstOrDefault(x => x.ChangedProperty == "permission_overwrites");
            API.AuditLogChangeJson typeModel             = changes.FirstOrDefault(x => x.ChangedProperty == "type");
            API.AuditLogChangeJson nameModel             = changes.FirstOrDefault(x => x.ChangedProperty == "name");
            API.AuditLogChangeJson rateLimitPerUserModel = changes.FirstOrDefault(x => x.ChangedProperty == "rate_limit_per_user");
            API.AuditLogChangeJson nsfwModel             = changes.FirstOrDefault(x => x.ChangedProperty == "nsfw");
            API.AuditLogChangeJson bitrateModel          = changes.FirstOrDefault(x => x.ChangedProperty == "bitrate");

            List <Overwrite> overwrites = overwritesModel.OldValue.ToObject <API.OverwriteJson[]>(discord.ApiClient.Serializer)
                                          .Select(x => new Overwrite(x.TargetId, x.TargetType, new OverwritePermissions(x.Allow, x.Deny)))
                                          .ToList();
            ChannelType type             = typeModel.OldValue.ToObject <ChannelType>(discord.ApiClient.Serializer);
            string      name             = nameModel.OldValue.ToObject <string>(discord.ApiClient.Serializer);
            int?        rateLimitPerUser = rateLimitPerUserModel?.OldValue?.ToObject <int>(discord.ApiClient.Serializer);
            bool?       nsfw             = nsfwModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer);
            int?        bitrate          = bitrateModel?.OldValue?.ToObject <int>(discord.ApiClient.Serializer);
            ulong       id = entry.TargetId.Value;

            return(new ChannelDeleteAuditLogData(id, name, type, rateLimitPerUser, nsfw, bitrate, overwrites.ToReadOnlyCollection()));
        }
        internal static WebhookUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson nameModel       = changes.FirstOrDefault(x => x.ChangedProperty == "name");
            API.AuditLogChangeJson channelIdModel  = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id");
            API.AuditLogChangeJson avatarHashModel = changes.FirstOrDefault(x => x.ChangedProperty == "avatar_hash");

            string      oldName      = nameModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer);
            ulong?      oldChannelId = channelIdModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            string      oldAvatar    = avatarHashModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer);
            WebhookInfo before       = new WebhookInfo(oldName, oldChannelId, oldAvatar);

            string      newName      = nameModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            ulong?      newChannelId = channelIdModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            string      newAvatar    = avatarHashModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            WebhookInfo after        = new WebhookInfo(newName, newChannelId, newAvatar);

            API.WebhookJson webhookInfo = log.Webhooks?.FirstOrDefault(x => x.Id == entry.TargetId);
            RestWebhook     webhook     = webhookInfo != null?RestWebhook.Create(discord, (IGuild)null, webhookInfo) : null;

            return(new WebhookUpdateAuditLogData(webhook, before, after));
        }
        internal static GuildUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            API.AuditLogChangeJson[] changes = entry.Changes;

            API.AuditLogChangeJson afkTimeoutModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
            API.AuditLogChangeJson defaultMessageNotificationsModel = changes.FirstOrDefault(x => x.ChangedProperty == "default_message_notifications");
            API.AuditLogChangeJson afkChannelModel        = changes.FirstOrDefault(x => x.ChangedProperty == "afk_channel_id");
            API.AuditLogChangeJson nameModel              = changes.FirstOrDefault(x => x.ChangedProperty == "name");
            API.AuditLogChangeJson regionIdModel          = changes.FirstOrDefault(x => x.ChangedProperty == "region");
            API.AuditLogChangeJson iconHashModel          = changes.FirstOrDefault(x => x.ChangedProperty == "icon_hash");
            API.AuditLogChangeJson verificationLevelModel = changes.FirstOrDefault(x => x.ChangedProperty == "verification_level");
            API.AuditLogChangeJson ownerIdModel           = changes.FirstOrDefault(x => x.ChangedProperty == "owner_id");
            API.AuditLogChangeJson mfaLevelModel          = changes.FirstOrDefault(x => x.ChangedProperty == "mfa_level");
            API.AuditLogChangeJson contentFilterModel     = changes.FirstOrDefault(x => x.ChangedProperty == "explicit_content_filter");
            API.AuditLogChangeJson systemChannelIdModel   = changes.FirstOrDefault(x => x.ChangedProperty == "system_channel_id");
            API.AuditLogChangeJson widgetChannelIdModel   = changes.FirstOrDefault(x => x.ChangedProperty == "widget_channel_id");
            API.AuditLogChangeJson widgetEnabledModel     = changes.FirstOrDefault(x => x.ChangedProperty == "widget_enabled");

            int?oldAfkTimeout = afkTimeoutModel?.OldValue?.ToObject <int>(discord.ApiClient.Serializer),
               newAfkTimeout  = afkTimeoutModel?.NewValue?.ToObject <int>(discord.ApiClient.Serializer);
            DefaultMessageNotifications?oldDefaultMessageNotifications = defaultMessageNotificationsModel?.OldValue?.ToObject <DefaultMessageNotifications>(discord.ApiClient.Serializer),
                                       newDefaultMessageNotifications  = defaultMessageNotificationsModel?.NewValue?.ToObject <DefaultMessageNotifications>(discord.ApiClient.Serializer);
            ulong?oldAfkChannelId = afkChannelModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer),
                 newAfkChannelId  = afkChannelModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            string oldName        = nameModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newName        = nameModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            string oldRegionId    = regionIdModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newRegionId    = regionIdModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            string oldIconHash    = iconHashModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newIconHash    = iconHashModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);
            VerificationLevel?oldVerificationLevel = verificationLevelModel?.OldValue?.ToObject <VerificationLevel>(discord.ApiClient.Serializer),
                             newVerificationLevel  = verificationLevelModel?.NewValue?.ToObject <VerificationLevel>(discord.ApiClient.Serializer);
            ulong?oldOwnerId     = ownerIdModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer),
                 newOwnerId      = ownerIdModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            MfaLevel?oldMfaLevel = mfaLevelModel?.OldValue?.ToObject <MfaLevel>(discord.ApiClient.Serializer),
                    newMfaLevel  = mfaLevelModel?.NewValue?.ToObject <MfaLevel>(discord.ApiClient.Serializer);
            ExplicitContentFilterLevel?oldContentFilter = contentFilterModel?.OldValue?.ToObject <ExplicitContentFilterLevel>(discord.ApiClient.Serializer),
                                      newContentFilter  = contentFilterModel?.NewValue?.ToObject <ExplicitContentFilterLevel>(discord.ApiClient.Serializer);
            ulong?oldSystemChannelId = systemChannelIdModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer),
                 newSystemChannelId  = systemChannelIdModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            ulong?oldWidgetChannelId = widgetChannelIdModel?.OldValue?.ToObject <ulong>(discord.ApiClient.Serializer),
                 newWidgetChannelId  = widgetChannelIdModel?.NewValue?.ToObject <ulong>(discord.ApiClient.Serializer);
            bool?oldWidgetEnabled    = widgetEnabledModel?.OldValue?.ToObject <bool>(discord.ApiClient.Serializer),
                newWidgetEnabled     = widgetEnabledModel?.NewValue?.ToObject <bool>(discord.ApiClient.Serializer);

            IUser oldOwner = null;

            if (oldOwnerId != null)
            {
                API.UserJson oldOwnerInfo = log.Users.FirstOrDefault(x => x.Id == oldOwnerId.Value);
                oldOwner = RestUser.Create(discord, oldOwnerInfo);
            }

            IUser newOwner = null;

            if (newOwnerId != null)
            {
                API.UserJson newOwnerInfo = log.Users.FirstOrDefault(x => x.Id == newOwnerId.Value);
                newOwner = RestUser.Create(discord, newOwnerInfo);
            }

            GuildInfo before = new GuildInfo(oldAfkTimeout, oldDefaultMessageNotifications,
                                             oldAfkChannelId, oldName, oldRegionId, oldIconHash, oldVerificationLevel, oldOwner,
                                             oldMfaLevel, oldContentFilter, oldSystemChannelId, oldWidgetChannelId, oldWidgetEnabled);
            GuildInfo after = new GuildInfo(newAfkTimeout, newDefaultMessageNotifications,
                                            newAfkChannelId, newName, newRegionId, newIconHash, newVerificationLevel, newOwner,
                                            newMfaLevel, newContentFilter, newSystemChannelId, newWidgetChannelId, newWidgetEnabled);

            return(new GuildUpdateAuditLogData(before, after));
        }