def _get_chat_by_user_name(self, user_name): """ 通过 user_name 找到对应的聊天对象 :param user_name: user_name :return: 找到的对应聊天对象 """ def match_in_chats(_chats): for c in _chats: if c.user_name == user_name: return c _chat = None if user_name.startswith('@@'): _chat = match_in_chats(self.bot.groups()) elif user_name: _chat = match_in_chats(self.bot.friends()) if _chat is None: _chat = match_in_chats(self.bot.mps()) if _chat is None: _chat = Chat(wrap_user_name(user_name), self.bot) return _chat
def _get_chat_by_user_name(self, user_name): """ 通过 user_name 找到对应的聊天对象 :param user_name: user_name :return: 找到的对应聊天对象 """ def match_in_chats(_chats): for c in _chats: if c.user_name == user_name: return c _chat = None if user_name.startswith('@@'): _chat = match_in_chats(self.bot.groups()) elif user_name: _chat = match_in_chats(self.bot.friends()) if not _chat: _chat = match_in_chats(self.bot.mps()) if not _chat: _chat = Chat(wrap_user_name(user_name), self.bot) return _chat
def create_group(self, users, topic=None): """ 创建一个新的群聊 :param users: 用户列表 :param topic: 群名称 :return: 若建群成功,返回一个新的群聊对象 :rtype: :class:`wxpy.Group` """ logger.info('{}: creating group (topic: {}), with users:\n{}'.format( self, topic, pformat(users))) @handle_response() def request(): return self.core.create_chatroom(memberList=dict_list, topic=topic or '') dict_list = wrap_user_name(self.except_self(ensure_list(users))) ret = request() user_name = ret.get('ChatRoomName') if user_name: return Group(self.core.update_chatroom(userName=user_name), self) else: raise Exception('Failed to create group:\n{}'.format(pformat(ret)))
def post_login(self, dump=True): self.core.web_init() self.core.show_mobile_login() self.core.get_contact(True) if dump: self.core.start_receiving(self.bot_logout) self.isLogging = False enhance_webwx_request(self) self.self = User(self.core.loginInfo['User'], self) self.file_helper = Chat(wrap_user_name('filehelper'), self) self.start() self.register_func() add_running_bot(self) self.cache_path = 'data/bots/%s.pkl' % self.self.name self.enable_puid("data/bots/%s.uid" % self.self.name) self.load_config("data/bots/%s.cfg" % self.self.name) if self.notify_dingding: cutt.send_dingding_msg('机器人 %s 上线了' % self.self.name, self.master_phone) if dump: self.file_helper.send('🤖️机器人上线了') self.dump_login_status(self.cache_path)
def __init__(self, cache_path=None, console_qr=False, qr_path=None, qr_callback=None, login_callback=None, logout_callback=None): """ :param cache_path: * 设置当前会话的缓存路径,并开启缓存功能;为 `None` (默认) 则不开启缓存功能。 * 开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。 * 设为 `True` 时,使用默认的缓存路径 'wxpy.pkl'。 :param console_qr: * 在终端中显示登陆二维码,需要安装 pillow 模块 (`pip3 install pillow`)。 * 可为整数(int),表示二维码单元格的宽度,通常为 2 (当被设为 `True` 时,也将在内部当作 2)。 * 也可为负数,表示以反色显示二维码,适用于浅底深字的命令行界面。 * 例如: 在大部分 Linux 系统中可设为 `True` 或 2,而在 macOS Terminal 的默认白底配色中,应设为 -2。 :param qr_path: 保存二维码的路径 :param qr_callback: 获得二维码后的回调,接收参数: uuid, status, qrcode :param login_callback: 登陆成功后的回调,接收参数同上 :param logout_callback: 登出时的回调,接收参数同上 """ self.core = itchat.Core() itchat.instanceList.append(self) enhance_connection(self.core.s) if cache_path is True: cache_path = 'wxpy.pkl' self.cache_path = cache_path if console_qr is True: console_qr = 2 self.core.auto_login(hotReload=bool(cache_path), statusStorageDir=cache_path, enableCmdQR=console_qr, picDir=qr_path, qrCallback=qr_callback, loginCallback=login_callback, exitCallback=logout_callback) self.self = Friend(self.core.loginInfo['User'], self) self.file_helper = Chat(wrap_user_name('filehelper'), self) self.messages = Messages() self.registered = Registered(self) self.is_listening = False self.listening_thread = None self.temp_dir = tempfile.TemporaryDirectory(prefix='wxpy_') self.start() atexit.register(self._cleanup)
def remove_members(self, members): """ 从群聊中移除用户 :param members: 待移除的用户列表或单个用户 """ return self.bot.core.delete_member_from_chatroom( self.user_name, ensure_list(wrap_user_name(members)))
def add_members(self, users, use_invitation=False): """ 向群聊中加入用户 :param users: 待加入的用户列表或单个用户 :param use_invitation: 使用发送邀请的方式 """ return self.bot.core.add_member_into_chatroom( self.user_name, ensure_list(wrap_user_name(users)), use_invitation)
def remove_members(self, members): """ 从群聊中移除用户 :param members: 待移除的用户列表或单个用户 """ logger.info('removing {} from {}'.format(members, self)) return self.bot.core.delete_member_from_chatroom( self.user_name, ensure_list(wrap_user_name(members)))
def add_members(self, users, use_invitation=False): """ 向群聊中加入用户 :param users: 待加入的用户列表或单个用户 :param use_invitation: 使用发送邀请的方式 """ logger.info('adding {} into {} (use_invitation={}))'.format( users, self, use_invitation)) return self.bot.core.add_member_into_chatroom( self.user_name, ensure_list(wrap_user_name(users)), use_invitation)
def remove_members(self, members): """ 从群聊中移除用户 :param members: 待移除的用户列表或单个用户 """ logger.info('removing {} from {}'.format(members, self)) return self.bot.core.delete_member_from_chatroom( self.user_name, ensure_list(wrap_user_name(members)) )
def add_members(self, users, use_invitation=False): """ 向群聊中加入用户 :param users: 待加入的用户列表或单个用户 :param use_invitation: 使用发送邀请的方式 """ logger.info('adding {} into {} (use_invitation={}))'.format(users, self, use_invitation)) return self.bot.core.add_member_into_chatroom( self.user_name, ensure_list(wrap_user_name(users)), use_invitation )
def request(): return self.core.create_chatroom( memberList=ensure_list(wrap_user_name(users)), topic=topic or '' )