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); }
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()); }
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()); }