修复通讯录刷新未更新头像地址的问题

This commit is contained in:
liuwei
2026-04-27 09:25:49 +08:00
parent 711213ded8
commit a3e20db554

View File

@@ -667,8 +667,11 @@ class Robot:
if user_name.endswith("@chatroom"):
discovered_groups.add(user_name)
if not self.contacts_db.get_chatroom_info(user_name):
self.contacts_db.save_chatroom_info(contact)
# 群资料这里不能只在“首次发现”时写入:
# 1. 群头像、小群名、公告等字段都可能在微信侧发生变化;
# 2. 如果只插入不更新,后续头像缓存拿到的仍然会是旧 URL
# 3. 因此每次刷新通讯录都做一次 upsert确保群资料是最新的。
self.contacts_db.save_chatroom_info(contact)
continue
if user_name.startswith("gh_"):
@@ -676,10 +679,14 @@ class Robot:
else:
friend_contacts.append(contact)
# 联系人详情这里必须允许覆盖更新:
# 1. get_contract_detail 已经重新向远端拿到了最新昵称、签名、头像 URL
# 2. 如果 still only_insert=True库里旧联系人将永远保留历史头像地址
# 3. 改成 upsert 后,后续头像缓存同步才能真正拿到最新 URL 并下载新头像。
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:
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()
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_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} 的成员信息")
else:
self.contacts_db.mark_chatroom_members_left(group_id, [])
@@ -716,7 +727,7 @@ class Robot:
self.contacts_db.save_chatroom_info(chatroom_info)
members = await self.ipad_bot.get_chatroom_member_list(group_id)
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()
self.allContacts = self.get_all_contacts()