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