fix: 添加 event_id 去重机制,防止消息重复处理
- 添加 processed_events 集合追踪已处理消息 - _process_message 检查 event_id 是否已处理 - 限制集合大小防止内存过大
This commit is contained in:
@@ -26,6 +26,7 @@ class MatrixBot:
|
||||
self.is_running: bool = False
|
||||
self.on_message_callback: Optional[Callable] = None
|
||||
self.last_room_id: str = ""
|
||||
self.processed_events: set = set() # 已处理的事件ID,防止重复处理
|
||||
|
||||
async def init_from_config(self):
|
||||
"""从数据库配置初始化"""
|
||||
@@ -171,6 +172,20 @@ class MatrixBot:
|
||||
|
||||
async def _process_message(self, room, sender, message_text, event_id):
|
||||
"""处理消息的核心逻辑"""
|
||||
# 检查是否已处理过此事件(防止重复处理)
|
||||
if event_id in self.processed_events:
|
||||
logger.debug(f"忽略已处理的事件: {event_id}")
|
||||
return
|
||||
|
||||
# 标记为已处理
|
||||
self.processed_events.add(event_id)
|
||||
logger.info(f"处理消息: event_id={event_id}")
|
||||
|
||||
# 限制集合大小,保留最近的100个
|
||||
if len(self.processed_events) > 100:
|
||||
# 清理旧的一半
|
||||
self.processed_events = set(list(self.processed_events)[-50:])
|
||||
|
||||
# 忽略自己发送的消息
|
||||
if sender == self.user_id:
|
||||
logger.debug(f"忽略自己发送的消息: {sender}")
|
||||
|
||||
Reference in New Issue
Block a user