Exemple #1
0
        internal void Update(WebSocketGuildModel model)
        {
            Update(model as GuildModel);

            for (var i = 0; i < model.Channels.Length; i++)
            {
                var channelModel = model.Channels[i];
                _channels.AddOrUpdate(channelModel.Id,
                                      _ => CachedGuildChannel.Create(this, channelModel),
                                      (_, old) =>
                {
                    old.Update(channelModel);
                    return(old);
                });
            }

            Update(model.Members);

            for (var i = 0; i < model.VoiceStates.Length; i++)
            {
                var voiceState = model.VoiceStates[i];
                _members[voiceState.UserId].Update(voiceState);
            }

            if (model.Presences != null)
            {
                Update(model.Presences);
            }

            MemberCount   = model.MemberCount;
            IsLarge       = model.Large;
            IsUnavailable = !model.Unavailable.HasValue || model.Unavailable.Value;
        }
Exemple #2
0
        internal CachedGuild(DiscordClientBase client, WebSocketGuildModel model) : base(client, model.Id)
        {
            _roles    = new LockedDictionary <Snowflake, CachedRole>(model.Roles.Value.Length);
            _emojis   = new LockedDictionary <Snowflake, CachedGuildEmoji>(model.Emojis.Value.Length);
            _channels = new LockedDictionary <Snowflake, CachedGuildChannel>(model.Channels.Length);
            _members  = new LockedDictionary <Snowflake, CachedMember>(model.MemberCount);

            Update(model);
            if (client.IsBot && IsLarge)
            {
                ChunksExpected = (int)Math.Ceiling(model.MemberCount / 1000.0);
                ChunkTcs       = new TaskCompletionSource <bool>();
            }
            else if (!client.IsBot)
            {
                SyncTcs = new TaskCompletionSource <bool>();
            }
        }
Exemple #3
0
        internal void Update(WebSocketGuildModel model)
        {
            Update(model as GuildModel);

            _channels.Clear();
            for (var i = 0; i < model.Channels.Length; i++)
            {
                var channelModel = model.Channels[i];
                _channels.TryAdd(channelModel.Id, CachedGuildChannel.Create(Client, channelModel, this));
            }

            _members.Clear();
            for (var i = 0; i < model.Members.Length; i++)
            {
                var memberModel = model.Members[i];
                CachedMember member = null;
                if (Client.IsBot || !Client.IsBot && !_members.ContainsKey(memberModel.User.Id))
                    member = Client.GetOrCreateMember(this, memberModel, memberModel.User, true);

                if (member != null)
                {
                    var voiceState = Array.Find(model.VoiceStates, x => x.UserId == member.Id);
                    if (voiceState != null)
                        member.Update(voiceState);
                }
            }

            if (!Client.IsBot)
            {
                Update(model.Presences);
            }

            MemberCount = model.MemberCount;
            IsLarge = model.Large;
            IsUnavailable = !model.Unavailable.HasValue || model.Unavailable.Value;
        }
Exemple #4
0
        internal CachedGuild(DiscordClient client, WebSocketGuildModel model) : base(client, model.Id)
        {
            _roles = Extensions.CreateConcurrentDictionary<Snowflake, CachedRole>(model.Roles.Value.Length);
            _channels = Extensions.CreateConcurrentDictionary<Snowflake, CachedGuildChannel>(model.Channels.Length);
            _members = Extensions.CreateConcurrentDictionary<Snowflake, CachedMember>(model.Members.Length);
            Roles = new ReadOnlyDictionary<Snowflake, CachedRole>(_roles);
            Channels = new ReadOnlyDictionary<Snowflake, CachedGuildChannel>(_channels);
            Members = new ReadOnlyDictionary<Snowflake, CachedMember>(_members);
            NestedChannels = new ReadOnlyOfTypeDictionary<Snowflake, CachedGuildChannel, CachedNestedChannel>(_channels);
            TextChannels = new ReadOnlyOfTypeDictionary<Snowflake, CachedGuildChannel, CachedTextChannel>(_channels);
            VoiceChannels = new ReadOnlyOfTypeDictionary<Snowflake, CachedGuildChannel, CachedVoiceChannel>(_channels);
            CategoryChannels = new ReadOnlyOfTypeDictionary<Snowflake, CachedGuildChannel, CachedCategoryChannel>(_channels);

            Update(model);
            if (client.IsBot && IsLarge)
            {
                ChunksExpected = (int) Math.Ceiling(model.MemberCount / 1000.0);
                ChunkTcs = new TaskCompletionSource<bool>();
            }
            else if (!client.IsBot)
            {
                SyncTcs = new TaskCompletionSource<bool>();
            }
        }