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);
        }
Ejemplo n.º 2
0
        internal static InviteDeleteAuditLogData 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 inviterIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "inviter_id");
            var channelIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id");
            var usesModel      = changes.FirstOrDefault(x => x.ChangedProperty == "uses");
            var maxUsesModel   = changes.FirstOrDefault(x => x.ChangedProperty == "max_uses");

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

            var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId);
            var inviter     = RestUser.Create(discord, inviterInfo);

            return(new InviteDeleteAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses));
        }
        internal void Update(Model model)
        {
            if (ChannelId != model.ChannelId)
            {
                ChannelId = model.ChannelId;
            }
            if (model.Avatar.IsSpecified)
            {
                AvatarId = model.Avatar.Value;
            }
            if (model.Creator.IsSpecified)
            {
                Creator = RestUser.Create(Discord, model.Creator.Value);
            }
            if (model.GuildId.IsSpecified)
            {
                GuildId = model.GuildId.Value;
            }
            if (model.Name.IsSpecified)
            {
                Name = model.Name.Value;
            }

            ApplicationId = model.ApplicationId;
        }
Ejemplo n.º 4
0
        internal void Update(Model model)
        {
            Description          = model.Description;
            RPCOrigins           = model.RPCOrigins.IsSpecified ? model.RPCOrigins.Value.ToImmutableArray() : ImmutableArray <string> .Empty;
            Name                 = model.Name;
            IconId               = model.Icon;
            IsBotPublic          = model.IsBotPublic;
            BotRequiresCodeGrant = model.BotRequiresCodeGrant;
            Tags                 = model.Tags.GetValueOrDefault(null)?.ToImmutableArray() ?? ImmutableArray <string> .Empty;
            PrivacyPolicy        = model.PrivacyPolicy;
            TermsOfService       = model.TermsOfService;
            var installParams = model.InstallParams.GetValueOrDefault(null);

            InstallParams = new ApplicationInstallParams(installParams?.Scopes ?? new string[0], (GuildPermission?)installParams?.Permission ?? null);

            if (model.Flags.IsSpecified)
            {
                Flags = model.Flags.Value;
            }
            if (model.Owner.IsSpecified)
            {
                Owner = RestUser.Create(Discord, model.Owner.Value);
            }
            if (model.Team != null)
            {
                Team = RestTeam.Create(Discord, model.Team);
            }
        }
Ejemplo n.º 5
0
        internal static MemberUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var changes = entry.Changes;

            var nickModel   = changes.FirstOrDefault(x => x.ChangedProperty == "nick");
            var deafModel   = changes.FirstOrDefault(x => x.ChangedProperty == "deaf");
            var muteModel   = changes.FirstOrDefault(x => x.ChangedProperty == "mute");
            var avatarModel = changes.FirstOrDefault(x => x.ChangedProperty == "avatar_hash");

            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);
            string oldAvatar = avatarModel?.OldValue?.ToObject <string>(discord.ApiClient.Serializer),
                   newAvatar = avatarModel?.NewValue?.ToObject <string>(discord.ApiClient.Serializer);

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

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

            return(new MemberUpdateAuditLogData(user, before, after));
        }
Ejemplo n.º 6
0
 internal void Update(Model model)
 {
     Name        = model.Name;
     Icon        = model.Icon.IsSpecified ? model.Icon.Value : null;
     Description = model.Description;
     Summary     = model.Summary;
     Bot         = RestUser.Create(Discord, model.Bot.Value);
 }
Ejemplo n.º 7
0
        internal static StageInstanceCreateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var topic        = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "topic").NewValue.ToObject <string>(discord.ApiClient.Serializer);
            var privacyLevel = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "privacy_level").NewValue.ToObject <StagePrivacyLevel>(discord.ApiClient.Serializer);
            var user         = log.Users.FirstOrDefault(x => x.Id == entry.UserId);
            var channelId    = entry.Options.ChannelId;

            return(new StageInstanceCreateAuditLogData(topic, privacyLevel, RestUser.Create(discord, user), channelId ?? 0));
        }
Ejemplo n.º 8
0
 //Helpers
 private static IUser GetAuthor(BaseDiscordClient client, IGuild guild, UserModel model, ulong? webhookId)
 {
     IUser author = null;
     if (guild != null)
         author = guild.GetUserAsync(model.Id, CacheMode.CacheOnly).Result;
     if (author == null)
         author = RestUser.Create(client, guild, model, webhookId);
     return author;
 }
Ejemplo n.º 9
0
 internal void Update(Model model)
 {
     base.Update(model);
     Inviter         = RestUser.Create(Discord, model.Inviter);
     IsRevoked       = model.Revoked;
     IsTemporary     = model.Temporary;
     MaxAge          = model.MaxAge != 0 ? model.MaxAge : (int?)null;
     MaxUses         = model.MaxUses;
     Uses            = model.Uses;
     _createdAtTicks = model.CreatedAt.UtcTicks;
 }
Ejemplo n.º 10
0
        public static async Task <RestUser> GetUserAsync(BaseDiscordClient client,
                                                         ulong id, RequestOptions options)
        {
            var model = await client.ApiClient.GetUserAsync(id, options).ConfigureAwait(false);

            if (model != null)
            {
                return(RestUser.Create(client, model));
            }
            return(null);
        }
        internal static MemberUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var changes = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "nick");

            var newNick = changes.NewValue?.ToObject <string>();
            var oldNick = changes.OldValue?.ToObject <string>();

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

            return(new MemberUpdateAuditLogData(user, newNick, oldNick));
        }
Ejemplo n.º 12
0
        internal static RestAuditLogEntry Create(BaseDiscordClient discord, Model fullLog, EntryModel model)
        {
            var   userInfo = fullLog.Users.FirstOrDefault(x => x.Id == model.UserId);
            IUser user     = null;

            if (userInfo != null)
            {
                user = RestUser.Create(discord, userInfo);
            }

            return(new RestAuditLogEntry(discord, fullLog, model, user));
        }
Ejemplo n.º 13
0
        internal static MessagePinAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            RestUser user = null;

            if (entry.TargetId.HasValue)
            {
                API.UserJson userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId);
                user = RestUser.Create(discord, userInfo);
            }

            return(new MessagePinAuditLogData(entry.Options.MessageId.Value, entry.Options.ChannelId.Value, user));
        }
Ejemplo n.º 14
0
        internal void Update(Model model)
        {
            base.Update(model);
            Inviter = model.Inviter != null?RestUser.Create(Discord, model.Inviter) : null;

            IsRevoked       = model.Revoked;
            IsTemporary     = model.Temporary;
            MaxAge          = model.MaxAge.IsSpecified ? model.MaxAge.Value : (int?)null;
            MaxUses         = model.MaxUses.IsSpecified ? model.MaxUses.Value : (int?)null;
            Uses            = model.Uses.IsSpecified ? model.Uses.Value : (int?)null;
            _createdAtTicks = model.CreatedAt.IsSpecified ? model.CreatedAt.Value.UtcTicks : (long?)null;
        }
Ejemplo n.º 15
0
 internal RestTeamMember(BaseDiscordClient discord, Model model)
 {
     MembershipState = model.MembershipState switch
     {
         API.MembershipState.Invited => MembershipState.Invited,
         API.MembershipState.Accepted => MembershipState.Accepted,
         _ => throw new InvalidOperationException("Invalid membership state"),
     };
     Permissions = model.Permissions;
     TeamId      = model.TeamId;
     User        = RestUser.Create(discord, model.User);
 }
Ejemplo n.º 16
0
 internal void Update(Model model)
 {
     GuildId        = model.Guild.IsSpecified ? model.Guild.Value.Id : default(ulong?);
     ChannelId      = model.Channel.Id;
     GuildName      = model.Guild.IsSpecified ? model.Guild.Value.Name : null;
     ChannelName    = model.Channel.Name;
     MemberCount    = model.MemberCount.IsSpecified ? model.MemberCount.Value : null;
     PresenceCount  = model.PresenceCount.IsSpecified ? model.PresenceCount.Value : null;
     ChannelType    = (ChannelType)model.Channel.Type;
     Inviter        = model.Inviter.IsSpecified ? RestUser.Create(Discord, model.Inviter.Value) : null;
     TargetUser     = model.TargetUser.IsSpecified ? RestUser.Create(Discord, model.TargetUser.Value) : null;
     TargetUserType = model.TargetUserType.IsSpecified ? model.TargetUserType.Value : TargetUserType.Undefined;
 }
Ejemplo n.º 17
0
        internal void Update(Model model)
        {
            Name              = model.Name;
            Type              = model.Type;
            IsEnabled         = model.Enabled;
            IsSyncing         = model.Syncing;
            ExpireBehavior    = model.ExpireBehavior;
            ExpireGracePeriod = model.ExpireGracePeriod;
            _syncedAtTicks    = model.SyncedAt.UtcTicks;

            RoleId = model.RoleId;
            User   = RestUser.Create(Discord, model.User);
        }
Ejemplo n.º 18
0
 internal static RestUser Create(BaseDiscordClient discord, IGuild guild, EventUserModel model)
 {
     if (model.Member.IsSpecified)
     {
         var member = model.Member.Value;
         member.User = model.User;
         return(RestGuildUser.Create(discord, guild, member));
     }
     else
     {
         return(RestUser.Create(discord, model.User));
     }
 }
Ejemplo n.º 19
0
        //Helpers
        private static IUser GetAuthor(BaseDiscordClient client, IGuild guild, UserModel model)
        {
            IUser author = null;

            if (guild != null)
            {
                author = guild.GetUserAsync(model.Id, CacheMode.CacheOnly).Result;
            }
            if (author == null)
            {
                author = RestUser.Create(client, model);
            }
            return(author);
        }
Ejemplo n.º 20
0
        internal static MemberRoleAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var changes = entry.Changes;

            var roleInfos = changes.SelectMany(x => x.NewValue.ToObject <API.Role[]>(discord.ApiClient.Serializer),
                                               (model, role) => new { model.ChangedProperty, Role = role })
                            .Select(x => new MemberRoleEditInfo(x.Role.Name, x.Role.Id, x.ChangedProperty == "$add"))
                            .ToList();

            var      userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId);
            RestUser user     = (userInfo != null) ? RestUser.Create(discord, userInfo) : null;

            return(new MemberRoleAuditLogData(roleInfos.ToReadOnlyCollection(), user));
        }
Ejemplo n.º 21
0
        internal static StageInstanceUpdatedAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
        {
            var channelId = entry.Options.ChannelId.Value;

            var topic   = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "topic");
            var privacy = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "privacy");

            var user = RestUser.Create(discord, log.Users.FirstOrDefault(x => x.Id == entry.UserId));

            var oldTopic   = topic?.OldValue.ToObject <string>();
            var newTopic   = topic?.NewValue.ToObject <string>();
            var oldPrivacy = privacy?.OldValue.ToObject <StagePrivacyLevel>();
            var newPrivacy = privacy?.NewValue.ToObject <StagePrivacyLevel>();

            return(new StageInstanceUpdatedAuditLogData(channelId, new StageInfo(user, oldPrivacy, oldTopic), new StageInfo(user, newPrivacy, newTopic)));
        }
        internal void Update(Model model)
        {
            Description = model.Description;
            RPCOrigins  = model.RPCOrigins;
            Name        = model.Name;
            _iconId     = model.Icon;

            if (model.Flags.IsSpecified)
            {
                Flags = model.Flags.Value; //TODO: Do we still need this?
            }
            if (model.Owner.IsSpecified)
            {
                Owner = RestUser.Create(Discord, model.Owner.Value);
            }
        }
Ejemplo n.º 23
0
        internal void Update(BaseDiscordClient discord, Model model, bool withSnapshot)
        {
            Code        = model.Code;
            Name        = model.Name;
            Description = model.Description;
            UsageCount  = model.UsageCount;
            CreatorId   = model.CreatorId;
            Creator     = RestUser.Create(discord, model.Creator);

            SourceGuildId = model.SourceGuildId;
            CreatedAt     = model.CreatedAt;
            UpdatedAt     = model.UpdatedAt;
            if (withSnapshot)
            {
                Snapshot = RestGuildSnapshot.Create(discord, (model as GuildTemplateSnapshotJson).Snapshot);
            }
        }
Ejemplo n.º 24
0
 internal void Update(Model model)
 {
     if (model.Avatar.IsSpecified)
     {
         AvatarId = model.Avatar.Value;
     }
     if (model.Creator.IsSpecified)
     {
         Creator = RestUser.Create(Discord, model.Creator.Value);
     }
     if (model.GuildId.IsSpecified)
     {
         GuildId = model.GuildId.Value;
     }
     if (model.Name.IsSpecified)
     {
         Name = model.Name.Value;
     }
 }
Ejemplo n.º 25
0
        internal void Update(Model model)
        {
            Name      = model.Name;
            Type      = model.Type;
            IsEnabled = model.Enabled;

            IsSyncing           = model.Syncing.IsSpecified ? model.Syncing.Value : null;
            RoleId              = model.RoleId.IsSpecified ? model.RoleId.Value : null;
            HasEnabledEmoticons = model.EnableEmoticons.IsSpecified ? model.EnableEmoticons.Value : null;
            ExpireBehavior      = model.ExpireBehavior.IsSpecified ? model.ExpireBehavior.Value : null;
            ExpireGracePeriod   = model.ExpireGracePeriod.IsSpecified ? model.ExpireGracePeriod.Value : null;
            User            = model.User.IsSpecified ? RestUser.Create(Discord, model.User.Value) : null;
            Account         = model.Account.IsSpecified ? RestIntegrationAccount.Create(model.Account.Value) : null;
            SubscriberCount = model.SubscriberAccount.IsSpecified ? model.SubscriberAccount.Value : null;
            IsRevoked       = model.Revoked.IsSpecified ? model.Revoked.Value : null;
            Application     = model.Application.IsSpecified ? RestIntegrationApplication.Create(Discord, model.Application.Value) : null;

            _syncedAtTicks = model.SyncedAt.IsSpecified ? model.SyncedAt.Value.UtcTicks : null;
        }
Ejemplo n.º 26
0
 internal void Update(Model model)
 {
     if (ChannelId != model.ChannelId)
     {
         ChannelId = model.ChannelId;
     }
     if (model.Avatar.IsSpecified)
     {
         AvatarId = model.Avatar.Value;
     }
     if (model.Creator.IsSpecified)
     {
         Creator = RestUser.Create(Discord, model.Creator.Value);
     }
     if (model.GuildId.IsSpecified)
     {
         GuildId = model.GuildId.Value;
     }
     if (model.Name.IsSpecified)
     {
         Name = model.Name.Value;
     }
     if (model.SourceGuild.IsSpecified)
     {
         SourceGuild = new WebhookFollowGuild
         {
             Id   = model.SourceGuild.Value.Id,
             Icon = model.SourceGuild.Value.Icon,
             Name = model.SourceGuild.Value.Name
         }
     }
     ;
     if (model.SourceChannel.IsSpecified)
     {
         SourceChannel = new WebhookFollowChannel
         {
             Id   = model.SourceChannel.Value.Id,
             Name = model.SourceChannel.Value.Name
         }
     }
     ;
 }
        internal void Update(Model model)
        {
            if (model.Creator.IsSpecified)
            {
                Creator = RestUser.Create(Discord, model.Creator.Value);
            }

            CreatorId    = model.CreatorId.ToNullable() ?? 0; // should be changed?
            ChannelId    = model.ChannelId.IsSpecified ? model.ChannelId.Value : null;
            Name         = model.Name;
            Description  = model.Description.GetValueOrDefault();
            StartTime    = model.ScheduledStartTime;
            EndTime      = model.ScheduledEndTime;
            PrivacyLevel = model.PrivacyLevel;
            Status       = model.Status;
            Type         = model.EntityType;
            EntityId     = model.EntityId;
            Location     = model.EntityMetadata?.Location.GetValueOrDefault();
            UserCount    = model.UserCount.ToNullable();
        }
Ejemplo n.º 28
0
 internal void Update(Model model)
 {
     Description          = model.Description;
     RPCOrigins           = model.RPCOrigins;
     Name                 = model.Name;
     _iconId              = model.Icon;
     IsBotPublic          = model.IsBotPublic;
     BotRequiresCodeGrant = model.BotRequiresCodeGrant;
     if (model.Flags.IsSpecified)
     {
         Flags = model.Flags.Value; //TODO: Do we still need this?
     }
     if (model.Owner.IsSpecified)
     {
         Owner = RestUser.Create(Discord, model.Owner.Value);
     }
     if (model.Team != null)
     {
         Team = RestTeam.Create(Discord, model.Team);
     }
 }
        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));
        }
Ejemplo n.º 30
0
        public static IAsyncEnumerable <IReadOnlyCollection <IUser> > GetReactionUsersAsync(IMessage msg, IEmote emote,
                                                                                            int?limit, BaseDiscordClient client, RequestOptions options)
        {
            Preconditions.NotNull(emote, nameof(emote));
            var emoji = (emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name);

            return(new PagedAsyncEnumerable <IUser>(
                       DiscordConfig.MaxUserReactionsPerBatch,
                       async(info, ct) =>
            {
                var args = new GetReactionUsersParams
                {
                    Limit = info.PageSize
                };

                if (info.Position != null)
                {
                    args.AfterUserId = info.Position.Value;
                }

                var models = await client.ApiClient.GetReactionUsersAsync(msg.Channel.Id, msg.Id, emoji, args, options).ConfigureAwait(false);
                return models.Select(x => RestUser.Create(client, x)).ToImmutableArray();
            },
                       nextPage: (info, lastPage) =>
            {
                if (lastPage.Count != DiscordConfig.MaxUsersPerBatch)
                {
                    return false;
                }

                info.Position = lastPage.Max(x => x.Id);
                return true;
            },
                       count: limit
                       ));
        }