From f3636dddd692e2dcf1645daee884c07ea84e402f Mon Sep 17 00:00:00 2001 From: hubian <908234780@qq.com> Date: Sun, 12 Apr 2026 00:26:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0=20event=5Fid=20?= =?UTF-8?q?=E5=8E=BB=E9=87=8D=E6=9C=BA=E5=88=B6=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E9=87=8D=E5=A4=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 processed_events 集合追踪已处理消息 - _process_message 检查 event_id 是否已处理 - 限制集合大小防止内存过大 --- ai_chat.db | Bin 81920 -> 86016 bytes ...x.tphai.com_BDTRXIGPBE.blacklisted_devices | 0 ...atrix.tphai.com_BDTRXIGPBE.ignored_devices | 0 ...atrix.tphai.com_BDTRXIGPBE.trusted_devices | 7 +++++++ .../matrix_service.cpython-310.pyc | Bin 9539 -> 9779 bytes services/matrix_service.py | 15 +++++++++++++++ 6 files changed, 22 insertions(+) create mode 100644 matrix_store/@tester:matrix.tphai.com_BDTRXIGPBE.blacklisted_devices create mode 100644 matrix_store/@tester:matrix.tphai.com_BDTRXIGPBE.ignored_devices create mode 100644 matrix_store/@tester:matrix.tphai.com_BDTRXIGPBE.trusted_devices diff --git a/ai_chat.db b/ai_chat.db index 28aa0fe85bce9d6003ecef2b0ad68660da356722..4d26ed55c5c6b0472ef723f50d471c0f9f4c34d4 100644 GIT binary patch delta 3418 zcmZ`+TT@%t6-G(z)YOL56Ebo7Q0hsi8KovjATXYeZ47aeNoO)?lTMq5CiqeZJ9ZL- zT~BX1l912^-H<>69S}l@n?V;O8=(vGV}3xN`Uq$5ea=i~a9{e;mwx*kp}L;w%$_qN z_S$Q&{e5e#Zy^XrgoPu4*N-;uH#If21>4WR(7d1fTz>ty(R8l6tHadU(`_*2KmHNB za@=S-Pn>RGB6IAhEmH>=;||lFh)r;L+=` zPsCLvwkuE0U}2L+R!H0@CnEC7tEh zJ9kjAz$t%|KSSdI9{6klQIjQ+-?W`!mJG44GRK%ya&Xsb=+rvKm)k8B1%#^wN8%p2 z7Go@}n)LoU`Rb{G1ow!Ay3+oMV<;g8#-;g~yy`ICD@pG5u zNfxjvwkn_ibX0Uor8IVxWRy6wa@Io9kJ);J_>(+L?I&nLu-P0e1pmjFw^NGg@!8h@12tB2IqpT@*hbyZa0RNT`xvKwLH)jc6f0vqy*g*YF=1F6}- zoK*C1xRTjDf#-rO1n_qfTE^WPu&|WO21{A9eutUFj_H;pvp2W@^Djq?=@gGJz?zJK)I$o0F5H3bw0Rl>W}1J)?G8(UhU`gYyaT6`gQ%{?a?oW@7y{M0N6thah8d5 zoO&1c1ysot7F|t{ihp15qPU;NXMq7PaJ^m;TuNdG@W|DwRNOpFR_qxLivB%YvK^W0 z*ktJYL;1xsQst$$s}xy|F!ww$EzlxX_$01Oqk`7vT3FMfD%b#e{U{??e4}l zDW*Afo|;rF(=os5VJQp~Q^SOrQ}b*k${{WmsZ+D@rD4N~2b&tLELNbt6v^yRXAnIC zT|>j*t$J$s)_Cfd%Tjd;siF1~%OM_eW}DYzc8pGpOXVdsii!B`q0zg;4~(6W-@mCl zZZ`Cu>q471_My}Bl(4;ZQ6=TxbEMRnU|YK^HBa5sG&J96t$KYUER7n3K>``#M(eex zx6TT97jl?xB#_V4x5x^MQdy98%ub%bnJ`&KW%1quJ445_Jb@!p+0p9{SyDHjC+KNh zK}m*4sIz@-nq`s$4FLC=lOOYhyjHemYf`a3s2Idi4!YWLk+ zYK3k;>C;_2+I#{MuWSCcsrlQy;pN@tV{X$RPm%Dk$i<)O+RXgT|6g#4*9qB?YH2x< z(i*k{C zAcAbiYxp&XF)=a2#0noPCQ%E}bx|{JfQ9(zG$en5R6}g+aorU{ak#l2nN@dMT)e_u zUZfoJLAvTvy*PsrhAcSvAmVj1*EkeLbFNCWoV2pi4p|yw6#-~8bQ@v~tZ=Pdi(>lG zW*9}VLD=|#|t7OMszof?S57Y7JXeL6F%%^q;1p{!jEhNM!EI%{M$JEDXGFnW+LjxR?3uYh^n^z&7fL<#}AKRP*g{*=e1H{Y|ap`$crKS)M?j5{&tIZLqfMRLwgDyeEMgqQc_s810MZg>4F|7}oCn}EQXKaqm8Bv& zW0a45W*7nS(h7;~(u7mv|C#jO2!b3%m;{O%E_FnT9xetdExd`TIe>fQbe5MTpW?P? ztia_O57vf|X9h4?Kr--BBxW_+`N{EhvW>dr#flM9Ui4s^rkhKA3=dR!y@o};;7)Yn zfg~5K2V2)$TOQoA@}?4VXmn`0q@{X;GF}3iU2U+M0pO9V9lDbz)!9n@@5tEKt+wj_ E05|pU*Z=?k delta 129 zcmV-{0Dk{~pap<{1&|sB3FQC)02GlRJ^~5lv0&&L3^6u3F*PnZHa0UgHnUV4=VA;o zH99abE;chaFf}u?M}EB_5CjkG000006c76k_7Cw7?6VQT+YgiPuN4D64vv!tuzj;J jAPNq%j=pwr3Y(fYy~Ur^N!pEi zF~w4+v<1sPKQ=w5!A#k))1nFKqXaFWWqJ0qWWq>fW@dY%#Yy{nbaxn+6*g`;6Pfg> zs;GJ`kKNe&rpvRot~ychEu6SN(Y15j2vXyKyvx@Px=!*N<(C6m!cUmW^jJGnQSR z4VT7)U}6QBmf#DsM&;PJOlBCpJ)}{30&Agdnr<&cMwXo6zEhcE;GWw|qaSeGH$D_eMGEP(3tAZQ{S0 zzFbNrois70atICj(os$rh)~Ub(thzZGsn8RZyM-p97?vs@HU-wp5aZ zBx?A1MCQYFljgw0zpPeFM#(5K?fKdQn9Ir?`MPolx9Qd|uMe5FnQj&c5eV)`)q}er z3qoquu$Nel!nS;=WU%Y+p+TMs{hIo?o{LVm@{N?`r`}}1X3BBQcIwE|Hp$>e(r3a0# z7T&T3KgcZ88kdwYBnBEI?PxDWJXJBUJe3!oWPDIuYU~f9EuTavn_7+A>K1SF|xL@b9+RLM|C?7UOl3+;21 zXjANMigu-Obt7X!KQnkNu#Tv(T7D8i?!YebPE#*EEN(W1J0C`p$aYuZ(|-a`&U#d! zE9wRGtBr~Xgny+Y#nrH`I+2El=bFUbws3K=?Nho{)`i(vZlvqDuBA)Wm6-lDknnEN z-+qYpiVN-iLD@be!@iE9!{WF0J#bwq17wUT*|?<^kd@X)QDsEYSv6VX~8meip$ zrnQ8@#jDX{xmHx#g8)2B_y9s50=5Ck%Oz%)d0_;eM|cogj<8?z006dA9go39T-4+o$d3F*l7~SKN{S)k#JkuKpG*MC`pS_wP~9o3XO^i#>rk?JF(sF zUD_r(E3GOdiexF$J|HL+4sVqJsWJ};c!OsILLhN36|ejUAVp$k9XpAIt^2fhJM(=r zyF0VZi$BhVtD%rV;P?J*xA@JeXW_3DdR+XVycA^Q3dySTE;*a^if!d;^eJ^cmbr4{ zDd7ol`1g|dm5zz8)oe5juR7iR8_mDfoAgz*$||n9Y_7T5o&3tG32(~rQI{@Bh885j z$~7igamik)mTyfBHy>#q)3G>yR@kEJU8+`Y6bn|jOQcvS+PNFNTF$jBhMHHrpDXDj z=;*zh=apimzz6V6Td5X`72XG9epK`t-|EQD$HXtjQ2I0uG1R@`SazPsdspv4B6ZzpE6vtg)&JfM!^kP=x|c*Ld+g~9t{@>dky6)%=zvC?#TeRkLNF#tO z%)6zW2hMYZ5>N`V4WHvHh1y~eM3}#Y$o%+Sx)^n}?Xo}?h@&-nw!mEmrZ*xx5`M>T zE$@}AcpN_q#0iM&r6{l&EC`{69FI&#Vd2kI*7IIns~J*ONZE*#Ri%khG8~0P>v~&$ zJq$Lzr2{goUUs0~$z_355*}jrt$j~PEkMb77_#eUeIhZC*%&}hScRY+YYaNUE!yI% zg*t)tJ0TWg19cB2?UiyuyDPO%H`b+_MBPog=G~_}=mgq}Dh?0CHeg9NDNo59OyaAapv9t3q4I_Uvf@vV~knBbn!@;K?aEE1o5j8R^y4e6Wjr36J$1fO21KCx54x zo4=(j)r$>mel;PUr<2W_=`ZLA_9UtA`mxdFEVIH|4M_&Miqqrb#PI8MQdq;MBeLdT%|IOjw2v7oEv%ga*Nfyow%hh KwnxV4wf_LNAim%L diff --git a/services/matrix_service.py b/services/matrix_service.py index 45e0121..2cb4143 100644 --- a/services/matrix_service.py +++ b/services/matrix_service.py @@ -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}")