From 585d4ce39cbfac51c3a68aa96e945d8b6fcc3c1b Mon Sep 17 00:00:00 2001 From: hubian <908234780@qq.com> Date: Sat, 11 Apr 2026 23:00:19 +0800 Subject: [PATCH] =?UTF-8?q?debug:=20=E6=B7=BB=E5=8A=A0MegolmEvent=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E8=B0=83=E8=AF=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 打印event的所有属性 - 尝试多种方式获取解密内容 - 尝试手动解密decrypt_event --- ai_chat.db | Bin 69632 -> 69632 bytes .../matrix_service.cpython-310.pyc | Bin 7537 -> 8329 bytes services/matrix_service.py | 58 +++++++++++++----- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/ai_chat.db b/ai_chat.db index 365bcc463b810b4a3ada6b37ef273504f92dc7c3..44e6bff3690b75cd085be49bd12058def2a9b2b7 100644 GIT binary patch delta 858 zcmZva%}*LZ7{*!AXg8)DtVvT4_tYMYWOrc^NK9&a=*>gpsi}z{u}Kr-p=f$5ix#UW z0;LFr<-;#Z+qhs*QH1)xkey-ognvTcaWSch$z-y5_kCvG=l6`5?-ujj5i_+DwY;Ks zPG<14$AX7tJ=~bh<>qI7$VW=oNtY?J~B|l zffoZ4gFUle?+5Sl?9%d0E*WH6(w2Hw#hD|ek;j`crM9kI{MHgO3Rh8dzum|(I9bAL z6)542sB$GLmmBb{?I%$r(XQvz>m+HAHuYc1MX0qWBRSPdeL+$g?_NTWkETJZrNTII zj-;Y`{X_e@-L7xrL|&C^AaB=G^eCg>f&x{g5d*n?3)D49R11D|A*0|g_2&UvuV|^i zFn}&m{Xtkb7lFCeQl?Yi*j2>@HN-$GX%z$-RFd3OO97474 zG_9>QP`IRA9ktS@c;^U3gKB9LT2QReuKNjrdPN8M-10;kM@4`oz;vo(1vhi*wyb2=mzq63!R;TYJ z$1@|0of&5YhNh9cjRHk{d;r{G#HLgvnRWsN_fir2&bHK2TsMm2WprFn!DcYs2^bYt zaaPhPtMXn;PT=$@It<~=D%jHnfRzMxixt8~fpg_*S5FA)ooMgFBF{_r_vU{ntViH% nPQh+>u*9HXCQQtCO!yJ|_=8+nk3+Bl7MJ@LWp&y}9rXVL0^X@< delta 93 zcmV-j0HXhZpag)R1dtm66_Ff60Tr=e<{Az(Iy5jkGBqwRF)=YPGP6`0L1PRuGCD9e zE;%?jGB!A~p?+gA0~!xzlLxRhvoRnl53^>!oYECf{K(TG^!v)w6fB?p>gmhycxH( zHLlYJP=AD~kB?AQ>hMuu0agftMcJ`nf%u7?*Vsx|h!vYkaPM=RG(y<&o%ilN=iGZ| z?i>F#dU1a+-_hYy;B#%do<6jDHTamnqQVw^-^0%?fjLJ?QAeo~MwSUtTxE{Vsf;r9 zEi$Gs?OBB=Q*b?^Xo{m1_Y$QHsL~)XJj~;g>&gv^Jf<@(qn9cAU0OAk73noxCFPw` zUIK+OIZK!ZLQE5Dem0UMb;C(#t$e|mD0E{r#oSEll{~jjSv+z3oe$P)wb2A85IK-E z#eu-i=zdu9r_dlisq&b(92yi$0W;nM4!S_8kHl$^go&2~Nf+@h&^zLbz;MV9;mxkU zqM{iXs>r5QM|0`oW*gE6o;gpuG3kMp=JahI-7#Fsj77>Hg_t)-n717-{msm>ij1-* zQ9eLrQL|;MCiAD2FRS>tNJRe(alg2y}k{xE-2yi zEy24>c^%!3jXZeHus%&rJ@|a3&*g?0kXGSajY$>$u}G`)=<+pvTJ2J4Jbb0oKZk;Wo7Hl|HDU z(ASdU`FwT+Pkttyv)V8zu)gwfqxNR=!qvv5o1+PPR<^URWbA4sEbIV*#-%D^zPZpm zS8KjsZLYoBV*UBum3E?ig)RU#FJ5k3`fR)8e*%q9R@cA&RQwve|6ms%1{Qw+Ox?g5 zp=5p-cPdMBeh`D>GB`VJPdg6hW9UkvIfQ<1yC?Brs4pEsR|m6ZcyZoI$SM*Sz;+P^l}<-_AxMYAx^v0D2b8; zp{ho75>|sG0B^(utaQ>xG}T9Yhz}xwSkUMY86r_iDROl9_9604*ptAw=RaX}?YB^h z3`~MHe*q2NlB7pg&8N_DR2+&7laJO;M_yFPG4XTP4KgV*-LZQS$t4l*8*nVRV5b>N zHpUN%mG1E{dig9G>=v9_&#oB5rNjpcw#8Ff7~biV7M~PjJ!kae7@ZV9^h^^=BzsSg zjJVQ!Pgs_Nxp)fAVR5V1_F&Pg;*q|e$mAM{b&}4K4&!H?agwxdWbKnqao!S%_<3Dc zTETx5-3CrS5kJO%Cws)r{z6!Geg;J`#LtTz1H09L_i-^bQ1dUMOAgPxhzzF4&VK>@ Cc?|CW delta 1142 zcmX|AO>7fK6rPz~@7me5v(68Voj>U--DTl>wM_rCXb-uGtz z9QtoC_JFKXPS+?UA(>-y3TIs5>TNbm zc;Y0XWCGSvqLM(Z9ipTGym}ktB)AsRdt`-SCf7saXcJ@-xD9%fVn)+ipbNxKR`cD-sK4uktlwG)q1tCXB8o^XG0Md8EUzqZ!b2MZ@`T~3;N(@3zH z$iX6hltcaP@}Zg9)dpL(#8?aMp&4q?4w_tIpX6(Epfv@dokn}8G}C>H^~pdDp|{_d zxD>LvL=#svuFjG*)=)wPZ0HJXHMaHGP9PT|NmzA=X|Z0ZP`gKXOPJsWH-Be20!pZ{ zhAK~AV`4l^h{=$wCPNx(A=X$_)>M$x*p}27MPYXkil%r5Xv$|vn^BOxrFI)+*Fp9? zungWB>Yq8>;>LBekwkx(TurYLJVHDMqoLo_u|AKj1**avvhsQB*{MkLy{ag=kzVpD zfm;b8z3k5fwRu-qpj)I~_IM3QZiTxd9?sT-`|sEP*nE6za~Y=63>>fP`wGZBe&)j= zNc*Uj_XqBcpqiJ3Y`0v!zPC*+$iR%lT+x^iD4Q^bkb6y!|7f+xN1ik~nxET49bSm+fcgl%VM zZePy9Jw_t4>bqh`hoZcgyP;jcXi@%~o2FB8Fn^iO$d!D*6(0xRB`zYIlP~i=e1?SF zkw0|5qQ#B2o_1=Av*3Ym2^EpYdVkg8Bi2zBtpdJ}M84~NO|$YzU)73R_Q5MKBtrR3 Y|3M{{?3P~ty3s&aJm726E;v;GA2Spk#{d8T diff --git a/services/matrix_service.py b/services/matrix_service.py index fc13df9..cfc98be 100644 --- a/services/matrix_service.py +++ b/services/matrix_service.py @@ -106,24 +106,54 @@ class MatrixBot: """处理加密消息(MegolmEvent)""" logger.info(f"收到加密消息: [{room.room_id}] event_id={event.event_id}") - # nio 解密 MegolmEvent 后,需要获取解密的内容 + # 打印 event 的所有属性来调试 + logger.info(f"MegolmEvent属性: {dir(event)}") + logger.info(f"event.source: {event.source}") + logger.info(f"event.sender: {event.sender}") + logger.info(f"event.session_id: {event.session_id if hasattr(event, 'session_id') else 'N/A'}") + + # 尝试从不同来源获取消息内容 try: - # 检查是否有解密后的内容 + body = None + sender = event.sender + + # 方法1: 从 source 获取 if hasattr(event, 'source') and event.source: - decrypted_content = event.source.get('content', {}) - msgtype = decrypted_content.get('msgtype', '') - body = decrypted_content.get('body', '') - + content = event.source.get('content', {}) + body = content.get('body', '') sender = event.source.get('sender', event.sender) - - logger.info(f"解密消息: sender={sender}, body={body[:50]}") - - # 如果是文本消息,处理它 - if msgtype == 'm.text' and body: - # 调用消息处理逻辑 - await self._process_message(room, sender, body, event.event_id) + logger.info(f"从source获取: body={body[:50] if body else 'empty'}") + + # 方法2: 直接尝试 event.body (nio可能已解密) + if hasattr(event, 'body') and event.body: + body = event.body + logger.info(f"从event.body获取: {body[:50]}") + + # 方法3: 检查 room 中的最近事件 + if not body: + # 从 room timeline 查找解密后的消息 + for timeline_event in room.timeline: + if hasattr(timeline_event, 'event_id') and timeline_event.event_id == event.event_id: + if hasattr(timeline_event, 'body'): + body = timeline_event.body + logger.info(f"从room.timeline获取: {body[:50] if body else 'empty'}") + + if body: + logger.info(f"解密成功: sender={sender}, body={body[:50]}") + await self._process_message(room, sender, body, event.event_id) else: - logger.warning(f"加密消息无法解密: {event.event_id}") + logger.warning(f"加密消息无法解密,event_id={event.event_id}") + # 尝试手动解密 + try: + decrypted = await self.client.decrypt_event(event) + if decrypted and hasattr(decrypted, 'body'): + body = decrypted.body + sender = decrypted.sender + logger.info(f"手动解密成功: {body[:50]}") + await self._process_message(room, sender, body, event.event_id) + except Exception as de: + logger.error(f"手动解密失败: {de}") + except Exception as e: logger.error(f"处理加密消息失败: {e}") import traceback