Ejemplo n.º 1
0
        internal RestAuditLogGuildMetadata(RestDiscordClient client, AuditLogModel auditLogModel, AuditLogEntryModel model) : base(client)
        {
            for (var i = 0; i < model.Changes.Length; i++)
            {
                var change = model.Changes[i];
                switch (change.Key)
                {
                case "name":
                {
                    Name = new AuditLogValue <string>(change);
                    break;
                }

                case "icon_hash":
                {
                    IconHash = new AuditLogValue <string>(change);
                    break;
                }

                case "splash_hash":
                {
                    SplashHash = new AuditLogValue <string>(change);
                    break;
                }

                case "owner_id":
                {
                    OwnerId = new AuditLogValue <ulong>(change);
                    var ownerBeforeModel = Array.Find(auditLogModel.Users, x => x.Id == OwnerId.OldValue);
                    var ownerAfterModel  = Array.Find(auditLogModel.Users, x => x.Id == OwnerId.NewValue);
                    Owner = new AuditLogValue <RestUser>(
                        ownerBeforeModel != null
                                ? new RestUser(client, ownerBeforeModel)
                                : Optional <RestUser> .Empty,
                        ownerAfterModel != null
                                ? new RestUser(client, ownerAfterModel)
                                : Optional <RestUser> .Empty);
                    break;
                }

                case "region":
                {
                    VoiceRegionId = new AuditLogValue <string>(change);
                    break;
                }

                case "afk_channel_id":
                {
                    AfkChannelId = new AuditLogValue <ulong?>(change);
                    break;
                }

                case "afk_timeout":
                {
                    AfkTimeout = new AuditLogValue <int>(change);
                    break;
                }

                case "mfa_level":
                {
                    MfaLevel = new AuditLogValue <MfaLevel>(change);
                    break;
                }

                case "verification_level":
                {
                    VerificationLevel = new AuditLogValue <VerificationLevel>(change);
                    break;
                }

                case "explicit_content_filter":
                {
                    ContentFilterLevel = new AuditLogValue <ContentFilterLevel>(change);
                    break;
                }

                case "default_message_notifications":
                {
                    DefaultNotificationLevel = new AuditLogValue <DefaultNotificationLevel>(change);
                    break;
                }

                case "vanity_url_code":
                {
                    VanityUrlCode = new AuditLogValue <string>(change);
                    break;
                }

                case "widget_enabled":
                {
                    IsWidgetEnabled = new AuditLogValue <bool>(change);
                    break;
                }

                case "widget_channel_id":
                {
                    WidgetChannelId = new AuditLogValue <ulong?>(change);
                    break;
                }

                case "system_channel_id":
                {
                    SystemChannelId = new AuditLogValue <ulong?>(change);
                    break;
                }
                }
            }
        }
Ejemplo n.º 2
0
        internal RestAuditLogChannelMetadata(RestDiscordClient client, AuditLogModel auditLogModel, AuditLogEntryModel model) : base(client)
        {
            ChannelId = model.TargetId;

            for (var i = 0; i < model.Changes.Length; i++)
            {
                var change = model.Changes[i];
                switch (change.Key)
                {
                case "name":
                {
                    Name = new AuditLogValue <string>(change);
                    break;
                }

                case "topic":
                {
                    Topic = new AuditLogValue <string>(change);
                    break;
                }

                case "bitrate":
                {
                    Bitrate = new AuditLogValue <int>(change);
                    break;
                }

                case "permission_overwrites":
                {
                    var overwritesBefore = Optional <IReadOnlyList <RestOverwrite> > .Empty;
                    if (change.OldValue.HasValue)
                    {
                        var models = client.Serializer.ToObject <OverwriteModel[]>(change.OldValue.Value);
                        overwritesBefore = models.Select(x => new RestOverwrite(client, x, ChannelId)).ToImmutableArray();
                    }

                    var overwritesAfter = Optional <IReadOnlyList <RestOverwrite> > .Empty;
                    if (change.NewValue.HasValue)
                    {
                        var models = client.Serializer.ToObject <OverwriteModel[]>(change.NewValue.Value);
                        overwritesAfter = models.Select(x => new RestOverwrite(client, x, ChannelId)).ToImmutableArray();
                    }

                    Overwrites = new AuditLogValue <IReadOnlyList <RestOverwrite> >(overwritesBefore, overwritesAfter);
                    break;
                }

                case "nsfw":
                {
                    IsNsfw = new AuditLogValue <bool>(change);
                    break;
                }

                case "rate_limit_per_user":
                {
                    Slowmode = new AuditLogValue <int>(change);
                    break;
                }

                case "type":
                {
                    ChannelType = client.Serializer.ToObject <AuditLogChannelType>(change.OldValue.HasValue ? change.OldValue.Value : change.NewValue.Value);
                    break;
                }
                }
            }
        }