66
77from WechatAPI import WechatAPIClient
88from WechatAPI .Client .protect import protector
9+ from database .messsagDB import MessageDB
910from utils .event_manager import EventManager
1011
1112
@@ -26,6 +27,8 @@ def __init__(self, bot_client: WechatAPIClient):
2627 self .whitelist = main_config .get ("XYBot" , {}).get ("whitelist" , [])
2728 self .blacklist = main_config .get ("XYBot" , {}).get ("blacklist" , [])
2829
30+ self .msg_db = MessageDB ()
31+
2932
3033 def update_profile (self , wxid : str , nickname : str , alias : str , phone : str ):
3134 """更新机器人信息"""
@@ -117,6 +120,16 @@ async def process_text_message(self, message: Dict[str, Any]):
117120 ats = []
118121 message ["Ats" ] = ats if ats and ats [0 ] != "" else []
119122
123+ # 保存消息到数据库
124+ await self .msg_db .save_message (
125+ msg_id = int (message ["MsgId" ]),
126+ sender_wxid = message ["SenderWxid" ],
127+ from_wxid = message ["FromWxid" ],
128+ msg_type = int (message ["MsgType" ]),
129+ content = message ["Content" ],
130+ is_group = message ["IsGroup" ]
131+ )
132+
120133 if self .wxid in ats :
121134 logger .info ("收到被@消息: 消息ID:{} 来自:{} 发送人:{} @:{} 内容:{}" ,
122135 message ["MsgId" ],
@@ -171,6 +184,15 @@ async def process_image_message(self, message: Dict[str, Any]):
171184 message ["SenderWxid" ],
172185 message ["Content" ])
173186
187+ await self .msg_db .save_message (
188+ msg_id = int (message ["MsgId" ]),
189+ sender_wxid = message ["SenderWxid" ],
190+ from_wxid = message ["FromWxid" ],
191+ msg_type = int (message ["MsgType" ]),
192+ content = message ["MsgSource" ],
193+ is_group = message ["IsGroup" ]
194+ )
195+
174196 # 解析图片消息
175197 aeskey , cdnmidimgurl = None , None
176198 try :
@@ -219,6 +241,15 @@ async def process_voice_message(self, message: Dict[str, Any]):
219241 message ["SenderWxid" ],
220242 message ["Content" ])
221243
244+ await self .msg_db .save_message (
245+ msg_id = int (message ["MsgId" ]),
246+ sender_wxid = message ["SenderWxid" ],
247+ from_wxid = message ["FromWxid" ],
248+ msg_type = int (message ["MsgType" ]),
249+ content = message ["Content" ],
250+ is_group = message ["IsGroup" ]
251+ )
252+
222253 if message ["IsGroup" ] or not message .get ("ImgBuf" , {}).get ("buffer" , "" ):
223254 # 解析语音消息
224255 voiceurl , length = None , None
@@ -265,6 +296,15 @@ async def process_xml_message(self, message: Dict[str, Any]):
265296 message ["FromWxid" ] = message ["ToWxid" ]
266297 message ["IsGroup" ] = False
267298
299+ await self .msg_db .save_message (
300+ msg_id = int (message ["MsgId" ]),
301+ sender_wxid = message ["SenderWxid" ],
302+ from_wxid = message ["FromWxid" ],
303+ msg_type = int (message ["MsgType" ]),
304+ content = message ["Content" ],
305+ is_group = message ["IsGroup" ]
306+ )
307+
268308 try :
269309 root = ET .fromstring (message ["Content" ])
270310 type = int (root .find ("appmsg" ).find ("type" ).text )
@@ -413,6 +453,15 @@ async def process_video_message(self, message):
413453 message ["SenderWxid" ],
414454 str (message ["Content" ]).replace ("\n " , "" ))
415455
456+ await self .msg_db .save_message (
457+ msg_id = int (message ["MsgId" ]),
458+ sender_wxid = message ["SenderWxid" ],
459+ from_wxid = message ["FromWxid" ],
460+ msg_type = int (message ["MsgType" ]),
461+ content = message ["Content" ],
462+ is_group = message ["IsGroup" ]
463+ )
464+
416465 message ["Video" ] = await self .bot .download_video (message ["MsgId" ])
417466
418467 if self .ignore_check (message ["FromWxid" ], message ["SenderWxid" ]):
@@ -441,6 +490,15 @@ async def process_file_message(self, message: Dict[str, Any]):
441490 message ["SenderWxid" ],
442491 message ["Content" ])
443492
493+ await self .msg_db .save_message (
494+ msg_id = int (message ["MsgId" ]),
495+ sender_wxid = message ["SenderWxid" ],
496+ from_wxid = message ["FromWxid" ],
497+ msg_type = int (message ["MsgType" ]),
498+ content = message ["Content" ],
499+ is_group = message ["IsGroup" ]
500+ )
501+
444502 message ["File" ] = await self .bot .download_attach (attach_id )
445503
446504 if self .ignore_check (message ["FromWxid" ], message ["SenderWxid" ]):
@@ -507,6 +565,15 @@ async def process_pat_message(self, message: Dict[str, Any]):
507565 message ["Patted" ],
508566 message ["PatSuffix" ])
509567
568+ await self .msg_db .save_message (
569+ msg_id = int (message ["MsgId" ]),
570+ sender_wxid = message ["SenderWxid" ],
571+ from_wxid = message ["FromWxid" ],
572+ msg_type = int (message ["MsgType" ]),
573+ content = f"{ message ['Patter' ]} 拍了拍 { message ['Patted' ]} { message ['PatSuffix' ]} " ,
574+ is_group = message ["IsGroup" ]
575+ )
576+
510577 if self .ignore_check (message ["FromWxid" ], message ["SenderWxid" ]):
511578 if self .ignore_protection or not protector .check (14400 ):
512579 await EventManager .emit ("pat_message" , self .bot , message )
0 commit comments