修复通讯录刷新未更新头像地址的问题
This commit is contained in:
21
robot.py
21
robot.py
@@ -667,7 +667,10 @@ class Robot:
|
|||||||
|
|
||||||
if user_name.endswith("@chatroom"):
|
if user_name.endswith("@chatroom"):
|
||||||
discovered_groups.add(user_name)
|
discovered_groups.add(user_name)
|
||||||
if not self.contacts_db.get_chatroom_info(user_name):
|
# 群资料这里不能只在“首次发现”时写入:
|
||||||
|
# 1. 群头像、小群名、公告等字段都可能在微信侧发生变化;
|
||||||
|
# 2. 如果只插入不更新,后续头像缓存拿到的仍然会是旧 URL;
|
||||||
|
# 3. 因此每次刷新通讯录都做一次 upsert,确保群资料是最新的。
|
||||||
self.contacts_db.save_chatroom_info(contact)
|
self.contacts_db.save_chatroom_info(contact)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -676,10 +679,14 @@ class Robot:
|
|||||||
else:
|
else:
|
||||||
friend_contacts.append(contact)
|
friend_contacts.append(contact)
|
||||||
|
|
||||||
|
# 联系人详情这里必须允许覆盖更新:
|
||||||
|
# 1. get_contract_detail 已经重新向远端拿到了最新昵称、签名、头像 URL;
|
||||||
|
# 2. 如果 still only_insert=True,库里旧联系人将永远保留历史头像地址;
|
||||||
|
# 3. 改成 upsert 后,后续头像缓存同步才能真正拿到最新 URL 并下载新头像。
|
||||||
if friend_contacts:
|
if friend_contacts:
|
||||||
self.contacts_db.save_contacts(friend_contacts, "friends", only_insert=True)
|
self.contacts_db.save_contacts(friend_contacts, "friends", only_insert=False)
|
||||||
if official_contacts:
|
if official_contacts:
|
||||||
self.contacts_db.save_contacts(official_contacts, "ghs", only_insert=True)
|
self.contacts_db.save_contacts(official_contacts, "ghs", only_insert=False)
|
||||||
|
|
||||||
groups = self.contacts_db.get_chatroom_list()
|
groups = self.contacts_db.get_chatroom_list()
|
||||||
for group in groups:
|
for group in groups:
|
||||||
@@ -700,7 +707,11 @@ class Robot:
|
|||||||
|
|
||||||
self.contacts_db.mark_chatroom_members_active(group_id, active_member_wxids)
|
self.contacts_db.mark_chatroom_members_active(group_id, active_member_wxids)
|
||||||
self.contacts_db.mark_chatroom_members_left(group_id, active_member_wxids)
|
self.contacts_db.mark_chatroom_members_left(group_id, active_member_wxids)
|
||||||
self.contacts_db.save_chatroom_member_simple(group_id, members, only_insert=True)
|
# 群成员头像 URL 同样需要覆盖更新:
|
||||||
|
# 1. 群成员换头像后,成员表里的 small_head_img_url 会变;
|
||||||
|
# 2. 若只做 INSERT IGNORE,则历史记录不会被刷新;
|
||||||
|
# 3. 这里改成 upsert,保证后台通讯录与头像缓存都能感知到最新头像地址。
|
||||||
|
self.contacts_db.save_chatroom_member_simple(group_id, members, only_insert=False)
|
||||||
self.LOG.info(f"已增量同步群 {group_id} 的成员信息")
|
self.LOG.info(f"已增量同步群 {group_id} 的成员信息")
|
||||||
else:
|
else:
|
||||||
self.contacts_db.mark_chatroom_members_left(group_id, [])
|
self.contacts_db.mark_chatroom_members_left(group_id, [])
|
||||||
@@ -716,7 +727,7 @@ class Robot:
|
|||||||
self.contacts_db.save_chatroom_info(chatroom_info)
|
self.contacts_db.save_chatroom_info(chatroom_info)
|
||||||
members = await self.ipad_bot.get_chatroom_member_list(group_id)
|
members = await self.ipad_bot.get_chatroom_member_list(group_id)
|
||||||
if members:
|
if members:
|
||||||
self.contacts_db.save_chatroom_member_simple(group_id, members, only_insert=True)
|
self.contacts_db.save_chatroom_member_simple(group_id, members, only_insert=False)
|
||||||
|
|
||||||
friends = await self.ipad_bot.get_contract_list()
|
friends = await self.ipad_bot.get_contract_list()
|
||||||
self.allContacts = self.get_all_contacts()
|
self.allContacts = self.get_all_contacts()
|
||||||
|
|||||||
Reference in New Issue
Block a user