Beispiel #1
0
        public async Task <IReadOnlyList <string> > RoomMemberSearch(string roomId, RoomMemberQueryFilter query)
        {
            if (Logger.IsEnabled(LogLevel.Trace))
            {
                Logger.LogTrace($"roomMemberSearch({roomId}, {JsonConvert.SerializeObject(query)})");
            }
            if (string.IsNullOrWhiteSpace(SelfId))
            {
                throw new InvalidOperationException("no puppet.id. need puppet to be login-ed for a search");
            }
            if (query == null)
            {
                throw new InvalidOperationException("no query");
            }
            var memberIds = await RoomMemberList(roomId);

            var ids = new List <string>();

            if (query.ContactAlias != null || query.Name != null)
            {
                ids.AddRange(await ContactSearch(new ContactQueryFilter {
                    Alias = query.ContactAlias, Name = query.Name
                }));
            }
            if (query.RoomAlias != null)
            {
                var memberPayloads = await Task.WhenAll(memberIds.Select(async m => await RoomMemberPayload(roomId, m)));

                ids.AddRange(memberPayloads.Where(payload => payload.RoomAlias == query.RoomAlias).Select(p => p.Id));
            }
            return(ids);
        }
Beispiel #2
0
        public async Task <Contact?> Member(RoomMemberQueryFilter query)
        {
            if (Logger.IsEnabled(LogLevel.Trace))
            {
                Logger.LogTrace($"member({JsonConvert.SerializeObject(query)})");
            }
            var list = await MemberAll(query);

            return(list.FirstOrDefault());
        }
Beispiel #3
0
        public async Task <IReadOnlyList <Contact> > MemberAll(RoomMemberQueryFilter query)
        {
            if (Logger.IsEnabled(LogLevel.Trace))
            {
                Logger.LogTrace($"memberAll({JsonConvert.SerializeObject(query)})");
            }
            var contactIdList = await Puppet.RoomMemberSearch(Id, query);

            return(contactIdList.Select(id => WechatyInstance.Contact.Load(id))
                   .ToImmutableList());
        }