本地缓存加入临时处理机制。

This commit is contained in:
liuwei
2025-02-19 09:30:29 +08:00
parent 122049f059
commit 5eab9245c9

View File

@@ -8,8 +8,8 @@ class GroupMemberChange:
def __init__(self, wcf: Wcf):
self.wcf = wcf # 假设 wcf 对象在此类中初始化
self.r = redis.Redis(host='192.168.2.32', port=6379, db=0, decode_responses=True)
# 初始化本地缓存
self.local_membercount = None
# 初始化本地缓存字典,使用 group_id 作为键
self.local_membercounts = {}
self.local_members = {}
def get_current_members(self, group_id):
@@ -33,15 +33,13 @@ class GroupMemberChange:
def process_message(self, group_id, xml_data_current):
""" 处理消息并更新 Redis """
# print(f"Processing message for group_id: {group_id}")
root_current = ET.fromstring(xml_data_current)
membercount_current = root_current.find('membercount').text
# print(f"Current membercount: {membercount_current}")
result = [] # 初始化文案列表
# 如果本地没有缓存数据,则从 Redis 获取
if self.local_membercount is None or not self.local_members:
if group_id not in self.local_membercounts or group_id not in self.local_members:
print("No local data, fetching from Redis")
membercount_previous, members_previous = self.get_previous_data_from_redis(group_id)
@@ -53,22 +51,20 @@ class GroupMemberChange:
self.r.hmset(f"group:group_members:{group_id}", members_current) # 存储当前成员信息
# 更新本地缓存
self.local_membercount = membercount_current
self.local_members = members_current
self.local_membercounts[group_id] = membercount_current
self.local_members[group_id] = members_current
result.append("$NO_CHANGE$")
return "\n".join(result)
else:
# 使用本地缓存的数据进行比较
# print("Using local data for comparison")
membercount_previous = self.local_membercount
members_previous = self.local_members
membercount_previous = self.local_membercounts[group_id]
members_previous = self.local_members[group_id]
# 比较 membercount 是否发生变化
if membercount_current != membercount_previous:
print(f"Membercount changed: {membercount_previous} -> {membercount_current}")
# result.append(f"membercount has changed: {membercount_previous} -> {membercount_current}")
members_current = self.get_current_members(group_id)
# 比较成员,仅使用 wxid 进行比较
@@ -81,17 +77,15 @@ class GroupMemberChange:
# 添加变化成员的文案
for wxid in added_members:
nickname = members_current[wxid]
# print(f"Detected member added: {nickname} ({wxid})")
result.append(f"检测到 {nickname}{wxid})加入群聊")
for wxid in removed_members:
nickname = members_previous[wxid]
# print(f"Detected member removed: {nickname} ({wxid})")
result.append(f"检测到 {nickname}{wxid})退出群聊")
# 更新本地缓存
print(f"Updating local cache with current membercount and members")
self.local_membercount = membercount_current
self.local_members = members_current
self.local_membercounts[group_id] = membercount_current
self.local_members[group_id] = members_current
# 更新 Redis 数据
print(f"Updating Redis with current membercount and members")
@@ -99,7 +93,6 @@ class GroupMemberChange:
self.r.hmset(f"group:group_members:{group_id}", members_current)
else:
# print("No change detected in membercount")
result.append("$NO_CHANGE$")
# 返回拼接后的结果