| @@ -1,79 +1,58 @@ | |||
| using Model = Discord.API.AuditLog; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using Model = Discord.API.AuditLog; | |||
| using EntryModel = Discord.API.AuditLogEntry; | |||
| namespace Discord.Rest | |||
| { | |||
| internal static class AuditLogHelper | |||
| { | |||
| public static IAuditLogData CreateData(BaseDiscordClient discord, Model log, EntryModel entry) | |||
| private static readonly Dictionary<ActionType, Func<BaseDiscordClient, Model, EntryModel, IAuditLogData>> CreateMapping | |||
| = new Dictionary<ActionType, Func<BaseDiscordClient, Model, EntryModel, IAuditLogData>>() | |||
| { | |||
| switch (entry.Action) | |||
| { | |||
| case ActionType.GuildUpdated: //1 | |||
| return GuildUpdateAuditLogData.Create(discord, log, entry); | |||
| [ActionType.GuildUpdated] = GuildUpdateAuditLogData.Create, | |||
| [ActionType.ChannelCreated] = ChannelCreateAuditLogData.Create, | |||
| [ActionType.ChannelUpdated] = ChannelUpdateAuditLogData.Create, | |||
| [ActionType.ChannelDeleted] = ChannelDeleteAuditLogData.Create, | |||
| case ActionType.ChannelCreated: //10 | |||
| return ChannelCreateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.ChannelUpdated: | |||
| return ChannelUpdateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.ChannelDeleted: | |||
| return ChannelDeleteAuditLogData.Create(discord, log, entry); | |||
| case ActionType.OverwriteCreated: | |||
| return OverwriteCreateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.OverwriteUpdated: | |||
| return OverwriteUpdateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.OverwriteDeleted: | |||
| return OverwriteDeleteAuditLogData.Create(discord, log, entry); | |||
| [ActionType.OverwriteCreated] = OverwriteCreateAuditLogData.Create, | |||
| [ActionType.OverwriteUpdated] = OverwriteUpdateAuditLogData.Create, | |||
| [ActionType.OverwriteDeleted] = OverwriteDeleteAuditLogData.Create, | |||
| case ActionType.Kick: //20 | |||
| return KickAuditLogData.Create(discord, log, entry); | |||
| case ActionType.Prune: | |||
| return PruneAuditLogData.Create(discord, log, entry); | |||
| case ActionType.Ban: | |||
| return BanAuditLogData.Create(discord, log, entry); | |||
| case ActionType.Unban: | |||
| return UnbanAuditLogData.Create(discord, log, entry); | |||
| case ActionType.MemberUpdated: | |||
| return MemberUpdateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.MemberRoleUpdated: | |||
| return MemberRoleAuditLogData.Create(discord, log, entry); | |||
| [ActionType.Kick] = KickAuditLogData.Create, | |||
| [ActionType.Prune] = PruneAuditLogData.Create, | |||
| [ActionType.Ban] = BanAuditLogData.Create, | |||
| [ActionType.Unban] = UnbanAuditLogData.Create, | |||
| [ActionType.MemberUpdated] = MemberUpdateAuditLogData.Create, | |||
| [ActionType.MemberRoleUpdated] = MemberRoleAuditLogData.Create, | |||
| case ActionType.RoleCreated: //30 | |||
| return RoleCreateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.RoleUpdated: | |||
| return RoleUpdateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.RoleDeleted: | |||
| return RoleDeleteAuditLogData.Create(discord, log, entry); | |||
| [ActionType.RoleCreated] = RoleCreateAuditLogData.Create, | |||
| [ActionType.RoleUpdated] = RoleUpdateAuditLogData.Create, | |||
| [ActionType.RoleDeleted] = RoleDeleteAuditLogData.Create, | |||
| case ActionType.InviteCreated: //40 | |||
| return InviteCreateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.InviteUpdated: | |||
| break; | |||
| case ActionType.InviteDeleted: | |||
| return InviteDeleteAuditLogData.Create(discord, log, entry); | |||
| [ActionType.InviteCreated] = InviteCreateAuditLogData.Create, | |||
| [ActionType.InviteUpdated] = InviteUpdateAuditLogData.Create, | |||
| [ActionType.InviteDeleted] = InviteDeleteAuditLogData.Create, | |||
| case ActionType.WebhookCreated: //50 | |||
| return WebhookCreateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.WebhookUpdated: | |||
| return WebhookUpdateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.WebhookDeleted: | |||
| return WebhookDeleteAuditLogData.Create(discord, log, entry); | |||
| [ActionType.WebhookCreated] = WebhookCreateAuditLogData.Create, | |||
| [ActionType.WebhookUpdated] = WebhookUpdateAuditLogData.Create, | |||
| [ActionType.WebhookDeleted] = WebhookDeleteAuditLogData.Create, | |||
| case ActionType.EmojiCreated: //60 | |||
| return EmoteCreateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.EmojiUpdated: | |||
| return EmoteUpdateAuditLogData.Create(discord, log, entry); | |||
| case ActionType.EmojiDeleted: | |||
| return EmoteDeleteAuditLogData.Create(discord, log, entry); | |||
| [ActionType.EmojiCreated] = EmoteCreateAuditLogData.Create, | |||
| [ActionType.EmojiUpdated] = EmoteUpdateAuditLogData.Create, | |||
| [ActionType.EmojiDeleted] = EmoteDeleteAuditLogData.Create, | |||
| case ActionType.MessageDeleted: //72 | |||
| return MessageDeleteAuditLogData.Create(discord, log, entry); | |||
| [ActionType.MessageDeleted] = MessageDeleteAuditLogData.Create, | |||
| }; | |||
| public static IAuditLogData CreateData(BaseDiscordClient discord, Model log, EntryModel entry) | |||
| { | |||
| if (CreateMapping.TryGetValue(entry.Action, out var func)) | |||
| return func(discord, log, entry); | |||
| default: //Unknown | |||
| return null; | |||
| } | |||
| return null; | |||
| //throw new NotImplementedException($"{nameof(AuditLogHelper)} does not implement the {entry.Action} audit log event."); | |||
| } | |||
| } | |||
| } | |||
| @@ -17,73 +17,37 @@ namespace Discord.Rest | |||
| { | |||
| var changes = entry.Changes; | |||
| int? oldAfkTimeout = null, | |||
| newAfkTimeout = null; | |||
| DefaultMessageNotifications? oldDefaultMessageNotifications = null, | |||
| newDefaultMessageNotifications = null; | |||
| ulong? oldAfkChannelId = null, | |||
| newAfkChannelId = null; | |||
| string oldName = null, | |||
| newName = null; | |||
| string oldRegionId = null, | |||
| newRegionId = null; | |||
| string oldIconHash = null, | |||
| newIconHash = null; | |||
| VerificationLevel? oldVerificationLevel = null, | |||
| newVerificationLevel = null; | |||
| ulong? oldOwnerId = null, | |||
| newOwnerId = null; | |||
| MfaLevel? oldMfaLevel = null, | |||
| newMfaLevel = null; | |||
| int? oldContentFilter = null, | |||
| newContentFilter = null; | |||
| var afkTimeoutModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var defaultMessageNotificationsModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var afkChannelModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var regionIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var iconHashModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var verificationLevelModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var ownerIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var mfaLevelModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| var contentFilterModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
| foreach (var change in changes) | |||
| { | |||
| switch (change.ChangedProperty) | |||
| { | |||
| case "afk_timeout": | |||
| oldAfkTimeout = change.OldValue?.ToObject<int>(); | |||
| newAfkTimeout = change.NewValue?.ToObject<int>(); | |||
| break; | |||
| case "default_message_notifications": | |||
| oldDefaultMessageNotifications = change.OldValue?.ToObject<DefaultMessageNotifications>(); | |||
| newDefaultMessageNotifications = change.OldValue?.ToObject<DefaultMessageNotifications>(); | |||
| break; | |||
| case "afk_channel_id": | |||
| oldAfkChannelId = change.OldValue?.ToObject<ulong>(); | |||
| newAfkChannelId = change.NewValue?.ToObject<ulong>(); | |||
| break; | |||
| case "name": | |||
| oldName = change.OldValue?.ToObject<string>(); | |||
| newName = change.NewValue?.ToObject<string>(); | |||
| break; | |||
| case "region": | |||
| oldRegionId = change.OldValue?.ToObject<string>(); | |||
| newRegionId = change.NewValue?.ToObject<string>(); | |||
| break; | |||
| case "icon_hash": | |||
| oldIconHash = change.OldValue?.ToObject<string>(); | |||
| newIconHash = change.NewValue?.ToObject<string>(); | |||
| break; | |||
| case "verification_level": | |||
| oldVerificationLevel = change.OldValue?.ToObject<VerificationLevel>(); | |||
| newVerificationLevel = change.NewValue?.ToObject<VerificationLevel>(); | |||
| break; | |||
| case "owner": | |||
| oldOwnerId = change.OldValue?.ToObject<ulong>(); | |||
| newOwnerId = change.NewValue?.ToObject<ulong>(); | |||
| break; | |||
| case "mfa_level": | |||
| oldMfaLevel = change.OldValue?.ToObject<MfaLevel>(); | |||
| newMfaLevel = change.OldValue?.ToObject<MfaLevel>(); | |||
| break; | |||
| case "explicit_content_filter": | |||
| oldContentFilter = change.OldValue?.ToObject<int>(); | |||
| newContentFilter = change.NewValue?.ToObject<int>(); | |||
| break; | |||
| } | |||
| } | |||
| int? oldAfkTimeout = afkTimeoutModel?.OldValue?.ToObject<int>(), | |||
| newAfkTimeout = afkTimeoutModel?.NewValue?.ToObject<int>(); | |||
| DefaultMessageNotifications? oldDefaultMessageNotifications = defaultMessageNotificationsModel?.OldValue?.ToObject<DefaultMessageNotifications>(), | |||
| newDefaultMessageNotifications = defaultMessageNotificationsModel?.NewValue?.ToObject<DefaultMessageNotifications>(); | |||
| ulong? oldAfkChannelId = afkChannelModel?.OldValue?.ToObject<ulong>(), | |||
| newAfkChannelId = afkChannelModel?.NewValue?.ToObject<ulong>(); | |||
| string oldName = nameModel?.OldValue?.ToObject<string>(), | |||
| newName = nameModel?.NewValue?.ToObject<string>(); | |||
| string oldRegionId = regionIdModel?.OldValue?.ToObject<string>(), | |||
| newRegionId = regionIdModel?.NewValue?.ToObject<string>(); | |||
| string oldIconHash = iconHashModel?.OldValue?.ToObject<string>(), | |||
| newIconHash = iconHashModel?.NewValue?.ToObject<string>(); | |||
| VerificationLevel? oldVerificationLevel = verificationLevelModel?.OldValue?.ToObject<VerificationLevel>(), | |||
| newVerificationLevel = verificationLevelModel?.NewValue?.ToObject<VerificationLevel>(); | |||
| ulong? oldOwnerId = ownerIdModel?.OldValue?.ToObject<ulong>(), | |||
| newOwnerId = ownerIdModel?.NewValue?.ToObject<ulong>(); | |||
| MfaLevel? oldMfaLevel = mfaLevelModel?.OldValue?.ToObject<MfaLevel>(), | |||
| newMfaLevel = mfaLevelModel?.NewValue?.ToObject<MfaLevel>(); | |||
| int? oldContentFilter = contentFilterModel?.OldValue?.ToObject<int>(), | |||
| newContentFilter = contentFilterModel?.NewValue?.ToObject<int>(); | |||
| IUser oldOwner = null; | |||
| if (oldOwnerId != null) | |||
| @@ -0,0 +1,20 @@ | |||
| namespace Discord.Rest | |||
| { | |||
| public struct InviteInfo | |||
| { | |||
| internal InviteInfo(int? maxAge, string code, bool? temporary, ulong? channelId, int? maxUses) | |||
| { | |||
| MaxAge = maxAge; | |||
| Code = code; | |||
| Temporary = temporary; | |||
| ChannelId = channelId; | |||
| MaxUses = maxUses; | |||
| } | |||
| public int? MaxAge { get; } | |||
| public string Code { get; } | |||
| public bool? Temporary { get; } | |||
| public ulong? ChannelId { get; } | |||
| public int? MaxUses { get; } | |||
| } | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| using System.Linq; | |||
| using Model = Discord.API.AuditLog; | |||
| using EntryModel = Discord.API.AuditLogEntry; | |||
| namespace Discord.Rest | |||
| { | |||
| public class InviteUpdateAuditLogData : IAuditLogData | |||
| { | |||
| private InviteUpdateAuditLogData(InviteInfo before, InviteInfo after) | |||
| { | |||
| Before = before; | |||
| After = after; | |||
| } | |||
| internal static InviteUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | |||
| { | |||
| var changes = entry.Changes; | |||
| var maxAgeModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_age"); | |||
| var codeModel = changes.FirstOrDefault(x => x.ChangedProperty == "code"); | |||
| var temporaryModel = changes.FirstOrDefault(x => x.ChangedProperty == "temporary"); | |||
| var channelIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id"); | |||
| var maxUsesModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_uses"); | |||
| int? oldMaxAge = maxAgeModel?.OldValue?.ToObject<int>(), | |||
| newMaxAge = maxAgeModel?.NewValue?.ToObject<int>(); | |||
| string oldCode = codeModel?.OldValue?.ToObject<string>(), | |||
| newCode = codeModel?.NewValue?.ToObject<string>(); | |||
| bool? oldTemporary = temporaryModel?.OldValue?.ToObject<bool>(), | |||
| newTemporary = temporaryModel?.NewValue?.ToObject<bool>(); | |||
| ulong? oldChannelId = channelIdModel?.OldValue?.ToObject<ulong>(), | |||
| newChannelId = channelIdModel?.NewValue?.ToObject<ulong>(); | |||
| int? oldMaxUses = maxUsesModel?.OldValue?.ToObject<int>(), | |||
| newMaxUses = maxUsesModel?.NewValue?.ToObject<int>(); | |||
| var before = new InviteInfo(oldMaxAge, oldCode, oldTemporary, oldChannelId, oldMaxUses); | |||
| var after = new InviteInfo(newMaxAge, newCode, newTemporary, newChannelId, newMaxUses); | |||
| return new InviteUpdateAuditLogData(before, after); | |||
| } | |||
| public InviteInfo Before { get; } | |||
| public InviteInfo After { get; } | |||
| } | |||
| } | |||
| @@ -1,4 +1,6 @@ | |||
| using Model = Discord.API.AuditLog; | |||
| using System.Linq; | |||
| using Model = Discord.API.AuditLog; | |||
| using EntryModel = Discord.API.AuditLogEntry; | |||
| namespace Discord.Rest | |||
| @@ -15,38 +17,25 @@ namespace Discord.Rest | |||
| { | |||
| var changes = entry.Changes; | |||
| var colorModel = changes.FirstOrDefault(x => x.ChangedProperty == "color"); | |||
| var mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable"); | |||
| var hoistModel = changes.FirstOrDefault(x => x.ChangedProperty == "hoist"); | |||
| var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
| var permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions"); | |||
| uint? colorRaw = colorModel?.NewValue?.ToObject<uint>(); | |||
| bool? mentionable = mentionableModel?.NewValue?.ToObject<bool>(); | |||
| bool? hoist = hoistModel?.NewValue?.ToObject<bool>(); | |||
| string name = nameModel?.NewValue?.ToObject<string>(); | |||
| ulong? permissionsRaw = permissionsModel?.NewValue?.ToObject<ulong>(); | |||
| Color? color = null; | |||
| bool? mentionable = null, | |||
| hoist = null; | |||
| string name = null; | |||
| GuildPermissions? permissions = null; | |||
| foreach (var model in changes) | |||
| { | |||
| switch (model.ChangedProperty) | |||
| { | |||
| case "color": | |||
| if (model.NewValue != null) | |||
| color = new Color(model.NewValue.ToObject<uint>()); | |||
| break; | |||
| case "mentionable": | |||
| if (model.NewValue != null) | |||
| mentionable = model.NewValue.ToObject<bool>(); | |||
| break; | |||
| case "hoist": | |||
| if (model.NewValue != null) | |||
| hoist = model.NewValue.ToObject<bool>(); | |||
| break; | |||
| case "name": | |||
| if (model.NewValue != null) | |||
| name = model.NewValue.ToObject<string>(); | |||
| break; | |||
| case "permissions": | |||
| if (model.NewValue != null) | |||
| permissions = new GuildPermissions(model.NewValue.ToObject<ulong>()); | |||
| break; | |||
| } | |||
| } | |||
| if (colorRaw.HasValue) | |||
| color = new Color(colorRaw.Value); | |||
| if (permissionsRaw.HasValue) | |||
| permissions = new GuildPermissions(permissionsRaw.Value); | |||
| return new RoleCreateAuditLogData(entry.TargetId.Value, | |||
| new RoleInfo(color, mentionable, hoist, name, permissions)); | |||
| @@ -1,4 +1,6 @@ | |||
| using Model = Discord.API.AuditLog; | |||
| using System.Linq; | |||
| using Model = Discord.API.AuditLog; | |||
| using EntryModel = Discord.API.AuditLogEntry; | |||
| namespace Discord.Rest | |||
| @@ -15,38 +17,25 @@ namespace Discord.Rest | |||
| { | |||
| var changes = entry.Changes; | |||
| var colorModel = changes.FirstOrDefault(x => x.ChangedProperty == "color"); | |||
| var mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable"); | |||
| var hoistModel = changes.FirstOrDefault(x => x.ChangedProperty == "hoist"); | |||
| var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
| var permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions"); | |||
| uint? colorRaw = colorModel?.OldValue?.ToObject<uint>(); | |||
| bool? mentionable = mentionableModel?.OldValue?.ToObject<bool>(); | |||
| bool? hoist = hoistModel?.OldValue?.ToObject<bool>(); | |||
| string name = nameModel?.OldValue?.ToObject<string>(); | |||
| ulong? permissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>(); | |||
| Color? color = null; | |||
| bool? mentionable = null, | |||
| hoist = null; | |||
| string name = null; | |||
| GuildPermissions? permissions = null; | |||
| foreach (var model in changes) | |||
| { | |||
| switch (model.ChangedProperty) | |||
| { | |||
| case "color": | |||
| if (model.OldValue != null) | |||
| color = new Color(model.OldValue.ToObject<uint>()); | |||
| break; | |||
| case "mentionable": | |||
| if (model.OldValue != null) | |||
| mentionable = model.OldValue.ToObject<bool>(); | |||
| break; | |||
| case "hoist": | |||
| if (model.OldValue != null) | |||
| hoist = model.OldValue.ToObject<bool>(); | |||
| break; | |||
| case "name": | |||
| if (model.OldValue != null) | |||
| name = model.OldValue.ToObject<string>(); | |||
| break; | |||
| case "permissions": | |||
| if (model.OldValue != null) | |||
| permissions = new GuildPermissions(model.OldValue.ToObject<ulong>()); | |||
| break; | |||
| } | |||
| } | |||
| if (colorRaw.HasValue) | |||
| color = new Color(colorRaw.Value); | |||
| if (permissionsRaw.HasValue) | |||
| permissions = new GuildPermissions(permissionsRaw.Value); | |||
| return new RoleDeleteAuditLogData(entry.TargetId.Value, | |||
| new RoleInfo(color, mentionable, hoist, name, permissions)); | |||
| @@ -1,4 +1,6 @@ | |||
| using Model = Discord.API.AuditLog; | |||
| using System.Linq; | |||
| using Model = Discord.API.AuditLog; | |||
| using EntryModel = Discord.API.AuditLogEntry; | |||
| namespace Discord.Rest | |||
| @@ -16,53 +18,36 @@ namespace Discord.Rest | |||
| { | |||
| var changes = entry.Changes; | |||
| var colorModel = changes.FirstOrDefault(x => x.ChangedProperty == "color"); | |||
| var mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable"); | |||
| var hoistModel = changes.FirstOrDefault(x => x.ChangedProperty == "hoist"); | |||
| var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
| var permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions"); | |||
| uint? oldColorRaw = colorModel?.OldValue?.ToObject<uint>(), | |||
| newColorRaw = colorModel?.NewValue?.ToObject<uint>(); | |||
| bool? oldMentionable = mentionableModel?.OldValue?.ToObject<bool>(), | |||
| newMentionable = mentionableModel?.NewValue?.ToObject<bool>(); | |||
| bool? oldHoist = hoistModel?.OldValue?.ToObject<bool>(), | |||
| newHoist = hoistModel?.NewValue?.ToObject<bool>(); | |||
| string oldName = nameModel?.OldValue?.ToObject<string>(), | |||
| newName = nameModel?.NewValue?.ToObject<string>(); | |||
| ulong? oldPermissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>(), | |||
| newPermissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>(); | |||
| Color? oldColor = null, | |||
| newColor = null; | |||
| bool? oldMentionable = null, | |||
| newMentionable = null; | |||
| bool? oldHoist = null, | |||
| newHoist = null; | |||
| string oldName = null, | |||
| newName = null; | |||
| GuildPermissions? oldPermissions = null, | |||
| newPermissions = null; | |||
| foreach (var model in changes) | |||
| { | |||
| switch (model.ChangedProperty) | |||
| { | |||
| case "color": | |||
| if (model.NewValue != null) | |||
| newColor = new Color(model.NewValue.ToObject<uint>()); | |||
| if (model.OldValue != null) | |||
| oldColor = new Color(model.OldValue.ToObject<uint>()); | |||
| break; | |||
| case "mentionable": | |||
| if (model.NewValue != null) | |||
| newMentionable = model.NewValue.ToObject<bool>(); | |||
| if (model.OldValue != null) | |||
| oldMentionable = model.OldValue.ToObject<bool>(); | |||
| break; | |||
| case "hoist": | |||
| if (model.NewValue != null) | |||
| newHoist = model.NewValue.ToObject<bool>(); | |||
| if (model.OldValue != null) | |||
| oldHoist = model.OldValue.ToObject<bool>(); | |||
| break; | |||
| case "name": | |||
| if (model.NewValue != null) | |||
| newName = model.NewValue.ToObject<string>(); | |||
| if (model.OldValue != null) | |||
| oldName = model.OldValue.ToObject<string>(); | |||
| break; | |||
| case "permissions": | |||
| if (model.NewValue != null) | |||
| newPermissions = new GuildPermissions(model.NewValue.ToObject<ulong>()); | |||
| if (model.OldValue != null) | |||
| oldPermissions = new GuildPermissions(model.OldValue.ToObject<ulong>()); | |||
| break; | |||
| } | |||
| } | |||
| 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); | |||
| var oldProps = new RoleInfo(oldColor, oldMentionable, oldHoist, oldName, oldPermissions); | |||
| var newProps = new RoleInfo(newColor, newMentionable, newHoist, newName, newPermissions); | |||