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