From 5c33bc7d31a60570163fcecafc136d500029e95e Mon Sep 17 00:00:00 2001 From: hackrobot Date: Mon, 4 Mar 2024 20:53:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=91=E9=80=81=E5=8D=A1=E7=89=87?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robot.py | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/robot.py b/robot.py index bf20601..9bf32f6 100644 --- a/robot.py +++ b/robot.py @@ -75,7 +75,8 @@ class Robot(Job): @staticmethod def value_check(args: dict) -> bool: if args: - return all(value is not None for key, value in args.items() if key != 'proxy') + return all(value is not None for key, value in args.items() + if key != 'proxy') return False def toAt(self, msg: WxMsg) -> bool: @@ -116,10 +117,33 @@ class Robot(Job): """闲聊,接入 ChatGPT """ if not self.chat: # 没接 ChatGPT,固定回复 + nq = re.sub(r"@.*?[\u2005|\s]", "", msg.content).replace(" ", "") + # print(nq,'==', allcontacts) + #通过wxid查询用户 头像/昵称/性别,并存储数据库 [目前无法获取头像] + senferInfo = self.wcf.get_info_by_wxid(wxid=msg.sender) + # 'wxid': 'wxid_4413224132412', 'code': 'smallzhiyun', 'remark': '', 'name': 'Eric', 'country': '', 'province': '', 'city': '', 'gender': '男'} + print('senferInfo==>', senferInfo) + # 发送link卡片信息 (url设置key=wxid) + #用户打开后,将wxid和opid存储到localstorage,并将绑定关系设置到数据库, 防止重复绑定 + self.wcf.send_rich_text( + name='异度世界', + title=f'欢迎{senferInfo["name"]}加入群聊,标题,最多两行', + digest='摘要,三行', + account='gh_bebb67a13c77', + url=f'https://www.baidu.com?wxid={msg.sender}', + thumburl= + 'http://wx.qlogo.cn/mmopen/uicvdbOicOINDh2GSMGquIBT5kVvq6qY129SLCSWRgicFjhAwbhJXhx6jiaVleDdyaPYNYbejV1IE1fn0t7jINvXmEphabXasBa6/64', + receiver=msg.sender) + return False rsp = "你@我干嘛?" else: # 接了 ChatGPT,智能回复 q = re.sub(r"@.*?[\u2005|\s]", "", msg.content).replace(" ", "") - rsp = self.chat.get_answer(q, (msg.roomid if msg.from_group() else msg.sender)) + rsp = self.chat.get_answer( + q, (msg.roomid if msg.from_group() else msg.sender)) if rsp: # 回复群消息 @@ -128,7 +152,6 @@ class Robot(Job): # 回复私聊 else: self.sendTextMsg(rsp, msg.sender) - return True else: self.LOG.error(f"无法从 ChatGPT 获得答案") @@ -186,6 +209,7 @@ class Robot(Job): self.wcf.enable_recv_msg(self.onMsg) def enableReceivingMsg(self) -> None: + def innerProcessMsg(wcf: Wcf): while wcf.is_receiving_msg(): try: @@ -198,7 +222,10 @@ class Robot(Job): self.LOG.error(f"Receiving message error: {e}") self.wcf.enable_receiving_msg() - Thread(target=innerProcessMsg, name="GetMessage", args=(self.wcf,), daemon=True).start() + Thread(target=innerProcessMsg, + name="GetMessage", + args=(self.wcf, ), + daemon=True).start() def sendTextMsg(self, msg: str, receiver: str, at_list: str = "") -> None: """ 发送消息 @@ -230,8 +257,12 @@ class Robot(Job): 获取联系人(包括好友、公众号、服务号、群成员……) 格式: {"wxid": "NickName"} """ - contacts = self.wcf.query_sql("MicroMsg.db", "SELECT UserName, NickName FROM Contact;") - return {contact["UserName"]: contact["NickName"] for contact in contacts} + contacts = self.wcf.query_sql( + "MicroMsg.db", "SELECT UserName, NickName FROM Contact;") + return { + contact["UserName"]: contact["NickName"] + for contact in contacts + } def keepRunningAndBlockProcess(self) -> None: """