本地缓存加入临时处理机制。
This commit is contained in:
@@ -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$")
|
||||
|
||||
# 返回拼接后的结果
|
||||
|
||||
Reference in New Issue
Block a user