| @@ -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; | using EntryModel = Discord.API.AuditLogEntry; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| internal static class AuditLogHelper | 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; | 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; | 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; | IUser oldOwner = null; | ||||
| if (oldOwnerId != 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; | using EntryModel = Discord.API.AuditLogEntry; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| @@ -15,38 +17,25 @@ namespace Discord.Rest | |||||
| { | { | ||||
| var changes = entry.Changes; | 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; | Color? color = null; | ||||
| bool? mentionable = null, | |||||
| hoist = null; | |||||
| string name = null; | |||||
| GuildPermissions? permissions = 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, | return new RoleCreateAuditLogData(entry.TargetId.Value, | ||||
| new RoleInfo(color, mentionable, hoist, name, permissions)); | 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; | using EntryModel = Discord.API.AuditLogEntry; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| @@ -15,38 +17,25 @@ namespace Discord.Rest | |||||
| { | { | ||||
| var changes = entry.Changes; | 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; | Color? color = null; | ||||
| bool? mentionable = null, | |||||
| hoist = null; | |||||
| string name = null; | |||||
| GuildPermissions? permissions = 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, | return new RoleDeleteAuditLogData(entry.TargetId.Value, | ||||
| new RoleInfo(color, mentionable, hoist, name, permissions)); | 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; | using EntryModel = Discord.API.AuditLogEntry; | ||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| @@ -16,53 +18,36 @@ namespace Discord.Rest | |||||
| { | { | ||||
| var changes = entry.Changes; | 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, | Color? oldColor = null, | ||||
| newColor = null; | newColor = null; | ||||
| bool? oldMentionable = null, | |||||
| newMentionable = null; | |||||
| bool? oldHoist = null, | |||||
| newHoist = null; | |||||
| string oldName = null, | |||||
| newName = null; | |||||
| GuildPermissions? oldPermissions = null, | GuildPermissions? oldPermissions = null, | ||||
| newPermissions = 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 oldProps = new RoleInfo(oldColor, oldMentionable, oldHoist, oldName, oldPermissions); | ||||
| var newProps = new RoleInfo(newColor, newMentionable, newHoist, newName, newPermissions); | var newProps = new RoleInfo(newColor, newMentionable, newHoist, newName, newPermissions); | ||||