From a3e20db554fcef193aa1e40d4d76caa73b135525 Mon Sep 17 00:00:00 2001 From: liuwei Date: Mon, 27 Apr 2026 09:25:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=80=9A=E8=AE=AF=E5=BD=95?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=9C=AA=E6=9B=B4=E6=96=B0=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robot.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/robot.py b/robot.py index fbfcbb3..5451373 100644 --- a/robot.py +++ b/robot.py @@ -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()