wxpy.api.chats.groups 源代码

# coding: utf-8
from __future__ import unicode_literals

from wxpy.utils import ensure_list, match_attributes, match_name
from .user import User


[文档]class Groups(list): """ 群聊的合集,可用于按条件搜索 """ # 记录已知的 shadow group 和 valid group # shadow group 直接抛弃 # valid group 直接通过 # 其他的需要确认是否包含机器人自身,并再分类到上面两种群中 shadow_group_user_names = list() valid_group_user_names = list() def __init__(self, group_list=None): if group_list: # Web 微信服务端似乎有个 BUG,会返回不存在的群 # 具体表现为: 名称为先前退出的群,但成员列表却完全陌生 # 因此加一个保护逻辑: 只返回"包含自己的群" groups_to_init = list() for group in group_list: if group.user_name in Groups.shadow_group_user_names: continue elif group.user_name in Groups.valid_group_user_names: groups_to_init.append(group) else: if group.bot.self in group: Groups.valid_group_user_names.append(group.user_name) groups_to_init.append(group) else: Groups.shadow_group_user_names.append(group.user_name) super(Groups, self).__init__(groups_to_init)
[文档] def search(self, keywords=None, users=None, **attributes): """ 在群聊合集中,根据给定的条件进行搜索 :param keywords: 群聊名称关键词 :param users: 需包含的用户 :param attributes: 属性键值对,键可以是 owner(群主对象), is_owner(自身是否为群主), nick_name(精准名称) 等。 :return: 匹配条件的群聊列表 :rtype: :class:`wxpy.Groups` """ users = ensure_list(users) if users: for user in users: if not isinstance(user, User): raise TypeError('expected `User`, got {} (type: {})'.format(user, type(user))) def match(group): if not match_name(group, keywords): return if users: for _user in users: if _user not in group: return if not match_attributes(group, **attributes): return return True return Groups(filter(match, self))