调整内容
This commit is contained in:
90
robot.py
90
robot.py
@@ -406,46 +406,63 @@ class Robot(Job):
|
|||||||
"""获取所有联系人信息并保存到数据库"""
|
"""获取所有联系人信息并保存到数据库"""
|
||||||
from db.contacts_db import ContactsDBOperator
|
from db.contacts_db import ContactsDBOperator
|
||||||
|
|
||||||
contacts_dict = {}
|
try:
|
||||||
contacts_wxids = self.client.fetch_contacts_list(self.app_id)
|
contacts_dict = {}
|
||||||
|
# 获取所有联系人的wxid列表
|
||||||
|
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]
|
||||||
|
|
||||||
# 将联系人信息添加到字典中
|
# 批量获取联系人详细信息
|
||||||
if contact_info and contact_info.get("ret") == 200 and "data" in contact_info:
|
contact_info = self.client.get_detail_info(self.app_id, batch_wxids)
|
||||||
contact_data = contact_info.get("data", [])
|
|
||||||
|
|
||||||
# 保存联系人信息到数据库
|
# 处理返回的数据
|
||||||
if contact_data:
|
if contact_info and contact_info.get("ret") == 200 and "data" in contact_info:
|
||||||
try:
|
contact_data = contact_info.get("data", [])
|
||||||
# 判断联系人类型
|
|
||||||
contact_type = "friends" # 默认为好友类型
|
|
||||||
if wxid.endswith("@chatroom"):
|
|
||||||
contact_type = "chatrooms"
|
|
||||||
# 如果是这个类型,则提取群成员信息
|
|
||||||
# 提取群成员信息
|
|
||||||
self.update_chatroom_member_details(wxid)
|
|
||||||
elif wxid.startswith("gh_"):
|
|
||||||
contact_type = "ghs"
|
|
||||||
|
|
||||||
# 保存到数据库
|
if contact_data:
|
||||||
contacts_db.save_contacts(contact_data, contact_type)
|
|
||||||
|
|
||||||
# 添加到返回字典
|
|
||||||
for contact in contact_data:
|
for contact in contact_data:
|
||||||
user_name = contact.get("userName")
|
user_name = contact.get("userName")
|
||||||
if user_name:
|
if not user_name:
|
||||||
contacts_dict[user_name] = contact.get("nickName") or user_name
|
continue
|
||||||
except Exception as e:
|
|
||||||
self.LOG.error(f"保存联系人信息到数据库失败: {e}")
|
|
||||||
|
|
||||||
self.LOG.info(f"成功获取并保存{len(contacts_dict)}个联系人信息")
|
try:
|
||||||
return contacts_dict
|
# 判断联系人类型
|
||||||
|
contact_type = "friends" # 默认为好友类型
|
||||||
|
if user_name.endswith("@chatroom"):
|
||||||
|
contact_type = "chatrooms"
|
||||||
|
# 如果是群聊,则获取群成员信息
|
||||||
|
self.update_chatroom_member_details(user_name)
|
||||||
|
elif user_name.startswith("gh_"):
|
||||||
|
contact_type = "ghs"
|
||||||
|
|
||||||
|
# 保存到数据库
|
||||||
|
contacts_db.save_contacts([contact], contact_type)
|
||||||
|
|
||||||
|
# 添加到返回字典
|
||||||
|
contacts_dict[user_name] = contact.get("nickName") or user_name
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self.LOG.error(f"处理联系人 {user_name} 失败: {e}")
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
self.LOG.error(f"获取联系人详情失败: {contact_info}")
|
||||||
|
|
||||||
|
self.LOG.info(f"成功获取并保存{len(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):
|
||||||
"""更新群成员详细信息"""
|
"""更新群成员详细信息"""
|
||||||
@@ -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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user