添加 刷新通讯录功能,用于解决冗余数据问题。
This commit is contained in:
23
robot.py
23
robot.py
@@ -181,7 +181,6 @@ class Robot(Job):
|
|||||||
self.allContacts = self.get_all_contacts()
|
self.allContacts = self.get_all_contacts()
|
||||||
self.contact_manager.set_contacts(self.allContacts)
|
self.contact_manager.set_contacts(self.allContacts)
|
||||||
|
|
||||||
|
|
||||||
self.message_storage = MessageStorage(self.ipad_bot)
|
self.message_storage = MessageStorage(self.ipad_bot)
|
||||||
|
|
||||||
# 初始化消息工具类 - 使用联系人管理器
|
# 初始化消息工具类 - 使用联系人管理器
|
||||||
@@ -514,26 +513,26 @@ class Robot(Job):
|
|||||||
self.LOG.error(f"获取联系人信息失败: {e}")
|
self.LOG.error(f"获取联系人信息失败: {e}")
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
def refresh_contacts_db(self):
|
async def refresh_contacts_db(self):
|
||||||
"""刷新联系人信息"""
|
"""刷新联系人信息"""
|
||||||
#获取用户所有的联系人,并保存到数据库
|
# 获取用户所有的联系人,并保存到数据库
|
||||||
self.LOG.info("开始刷新联系人信息")
|
self.LOG.info("开始刷新联系人信息")
|
||||||
#删除所有的联系人信息
|
# 删除所有的联系人信息
|
||||||
self.contacts_db.delete_all_contacts()
|
self.contacts_db.delete_all_contacts()
|
||||||
self.LOG.debug("已删除所有的联系人信息")
|
self.LOG.debug("已删除所有的联系人信息")
|
||||||
contacts = self.ipad_bot.get_contract_list()
|
contacts = await self.ipad_bot.get_contract_list()
|
||||||
self.LOG.debug(f"获取到的联系人数量:{len(contacts)}")
|
self.LOG.debug(f"获取到的联系人:{contacts}")
|
||||||
#获取联系人详细信息,get_contract_detail每次可以获取20个
|
# 获取联系人详细信息,get_contract_detail每次可以获取20个
|
||||||
#每次获取20个,需要循环获取
|
# 每次获取20个,需要循环获取
|
||||||
# 将联系人列表分成每组20个
|
# 将联系人列表分成每组20个
|
||||||
batch_size = 20
|
batch_size = 20
|
||||||
for i in range(0, len(contacts), batch_size):
|
for i in range(0, len(contacts), batch_size):
|
||||||
# 获取当前批次的联系人
|
# 获取当前批次的联系人
|
||||||
batch_contacts = contacts[i:i + batch_size]
|
batch_contacts = contacts[i:i + batch_size]
|
||||||
# 获取这批联系人的详细信息
|
# 获取这批联系人的详细信息
|
||||||
contact_info = self.ipad_bot.get_contract_detail(batch_contacts)
|
contact_info = await self.ipad_bot.get_contract_detail(batch_contacts)
|
||||||
self.LOG.debug(f"获取到的联系人详细信息数量:{len(contact_info)}")
|
self.LOG.debug(f"获取到的联系人详细信息数量:{len(contact_info)}")
|
||||||
self.contacts_db.save_contacts(contact_info,"friends")
|
self.contacts_db.save_contacts(contact_info, "friends")
|
||||||
|
|
||||||
# 获取群聊列表
|
# 获取群聊列表
|
||||||
groups = self.contacts_db.get_chatroom_list()
|
groups = self.contacts_db.get_chatroom_list()
|
||||||
@@ -541,7 +540,7 @@ class Robot(Job):
|
|||||||
for group in groups:
|
for group in groups:
|
||||||
# 调用接口获取群成员信息
|
# 调用接口获取群成员信息
|
||||||
group_id = group["UserName"]
|
group_id = group["UserName"]
|
||||||
chatroom_info = self.ipad_bot.get_chatroom_info(group_id)
|
chatroom_info = await self.ipad_bot.get_chatroom_info(group_id)
|
||||||
self.LOG.debug(f"获取到的群成员信息:{chatroom_info}")
|
self.LOG.debug(f"获取到的群成员信息:{chatroom_info}")
|
||||||
if chatroom_info:
|
if chatroom_info:
|
||||||
# 保存群信息到数据库
|
# 保存群信息到数据库
|
||||||
@@ -573,7 +572,7 @@ class Robot(Job):
|
|||||||
self.LOG.info(f"已更新群 {group_id} 的成员信息")
|
self.LOG.info(f"已更新群 {group_id} 的成员信息")
|
||||||
else:
|
else:
|
||||||
self.LOG.error(f"获取群 {group_id} 信息失败,证明用户无该群信息,删除群的相关资料。")
|
self.LOG.error(f"获取群 {group_id} 信息失败,证明用户无该群信息,删除群的相关资料。")
|
||||||
#删除群数据库中的群信息
|
# 删除群数据库中的群信息
|
||||||
self.contacts_db.delete_chatroom_member_info(group_id)
|
self.contacts_db.delete_chatroom_member_info(group_id)
|
||||||
self.LOG.info("联系人信息刷新完成")
|
self.LOG.info("联系人信息刷新完成")
|
||||||
|
|
||||||
|
|||||||
@@ -99,15 +99,15 @@ class FriendMixin(WechatAPIClientBase):
|
|||||||
else:
|
else:
|
||||||
self.error_handler(json_resp)
|
self.error_handler(json_resp)
|
||||||
|
|
||||||
async def get_contract_list(self, wx_seq: int = 0, chatroom_seq: int = 0) -> dict:
|
async def get_contract_list(self, wx_seq: int = 0, chatroom_seq: int = 0) -> list:
|
||||||
"""获取联系人列表
|
"""获取联系人用户名列表
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
wx_seq: 联系人序列
|
wx_seq: 联系人序列
|
||||||
chatroom_seq: 群聊序列
|
chatroom_seq: 群聊序列
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict: 联系人列表数据
|
list: 联系人用户名列表
|
||||||
"""
|
"""
|
||||||
if not self.wxid:
|
if not self.wxid:
|
||||||
raise UserLoggedOut("请先登录")
|
raise UserLoggedOut("请先登录")
|
||||||
@@ -118,7 +118,8 @@ class FriendMixin(WechatAPIClientBase):
|
|||||||
json_resp = await response.json()
|
json_resp = await response.json()
|
||||||
|
|
||||||
if json_resp.get("Success"):
|
if json_resp.get("Success"):
|
||||||
return json_resp.get("Data")
|
# 直接返回联系人用户名列表
|
||||||
|
return json_resp.get("Data").get("ContactUsernameList", [])
|
||||||
else:
|
else:
|
||||||
self.error_handler(json_resp)
|
self.error_handler(json_resp)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user