调整内容

This commit is contained in:
liuwei
2025-04-22 12:06:28 +08:00
parent d38624efe9
commit 6072f506f7

View File

@@ -406,47 +406,64 @@ class Robot(Job):
"""获取所有联系人信息并保存到数据库""" """获取所有联系人信息并保存到数据库"""
from db.contacts_db import ContactsDBOperator from db.contacts_db import ContactsDBOperator
try:
contacts_dict = {} contacts_dict = {}
# 获取所有联系人的wxid列表
contacts_wxids = self.client.fetch_contacts_list(self.app_id) contacts_wxids = self.client.fetch_contacts_list(self.app_id)
if not contacts_wxids:
self.LOG.warning("获取联系人列表为空")
return contacts_dict
# 初始化联系人数据库操作类 # 初始化联系人数据库操作类
contacts_db = ContactsDBOperator() contacts_db = ContactsDBOperator()
for wxid in contacts_wxids: # 将wxid列表分批处理每批50个
# 获取联系人详细信息 batch_size = 50
contact_info = self.client.get_detail_info(self.app_id, wxid) for i in range(0, len(contacts_wxids), batch_size):
batch_wxids = contacts_wxids[i:i + batch_size]
# 将联系人信息添加到字典中 # 批量获取联系人详细信息
contact_info = self.client.get_detail_info(self.app_id, batch_wxids)
# 处理返回的数据
if contact_info and contact_info.get("ret") == 200 and "data" in contact_info: if contact_info and contact_info.get("ret") == 200 and "data" in contact_info:
contact_data = contact_info.get("data", []) contact_data = contact_info.get("data", [])
# 保存联系人信息到数据库
if contact_data: if contact_data:
for contact in contact_data:
user_name = contact.get("userName")
if not user_name:
continue
try: try:
# 判断联系人类型 # 判断联系人类型
contact_type = "friends" # 默认为好友类型 contact_type = "friends" # 默认为好友类型
if wxid.endswith("@chatroom"): if user_name.endswith("@chatroom"):
contact_type = "chatrooms" contact_type = "chatrooms"
# 如果是这个类型,则取群成员信息 # 如果是群聊,则取群成员信息
# 提取群成员信息 self.update_chatroom_member_details(user_name)
self.update_chatroom_member_details(wxid) elif user_name.startswith("gh_"):
elif wxid.startswith("gh_"):
contact_type = "ghs" contact_type = "ghs"
# 保存到数据库 # 保存到数据库
contacts_db.save_contacts(contact_data, contact_type) contacts_db.save_contacts([contact], contact_type)
# 添加到返回字典 # 添加到返回字典
for contact in contact_data:
user_name = contact.get("userName")
if user_name:
contacts_dict[user_name] = contact.get("nickName") or user_name contacts_dict[user_name] = contact.get("nickName") or user_name
except Exception as e: except Exception as e:
self.LOG.error(f"保存联系人信息到数据库失败: {e}") self.LOG.error(f"处理联系人 {user_name} 失败: {e}")
continue
else:
self.LOG.error(f"获取联系人详情失败: {contact_info}")
self.LOG.info(f"成功获取并保存{len(contacts_dict)}个联系人信息") self.LOG.info(f"成功获取并保存{len(contacts_dict)}个联系人信息")
return contacts_dict return contacts_dict
except Exception as e:
self.LOG.error(f"获取联系人信息失败: {e}")
return {}
def update_chatroom_member_details(self, chatroom_id): def update_chatroom_member_details(self, chatroom_id):
"""更新群成员详细信息""" """更新群成员详细信息"""
try: try:
@@ -459,8 +476,12 @@ class Robot(Job):
member_wxids = [member.get('wxid') for member in member_list if member.get('wxid')] member_wxids = [member.get('wxid') for member in member_list if member.get('wxid')]
if member_wxids: if member_wxids:
# 获取成员详细信息 # 修改参数顺序先传入app_id再传入wxids列表最后传入chatroom_id
details_response = self.client.get_chatroom_member_detail(self.app_id, chatroom_id, member_wxids) details_response = self.client.get_chatroom_member_detail(
self.app_id,
wxids=member_wxids,
chatroom_id=chatroom_id
)
# 使用ContactsDBOperator处理响应 # 使用ContactsDBOperator处理响应
from db.contacts_db import ContactsDBOperator from db.contacts_db import ContactsDBOperator
@@ -481,4 +502,3 @@ class Robot(Job):
return False return False
except Exception as e: except Exception as e:
self.LOG.error(f"更新群聊成员详细信息出错: {e}") self.LOG.error(f"更新群聊成员详细信息出错: {e}")
return False