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()