diff --git a/README.md b/README.md index a9b1937..bdb945c 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ enable_temp = false - [ ] 引用回复(完成但是没测试) - [ ] 戳回去(?) - [ ] 发送语音(?) +- [ ] 使用优先队列保证消息顺序(问题:对转发消息等napcat本身就是乱序的,处理速度不同如何解决) # 特别鸣谢 特别感谢[@Maple127667](https://github.com/Maple127667)对本项目代码思路的支持 \ No newline at end of file diff --git a/main.py b/main.py index d9d13fa..7178abe 100644 --- a/main.py +++ b/main.py @@ -36,7 +36,7 @@ async def message_process(): elif post_type == "meta_event": await recv_handler.handle_meta_event(message) elif post_type == "notice": - pass + await recv_handler.handle_notify(message) else: logger.warning(f"未知的post_type: {post_type}") message_queue.task_done() diff --git a/src/recv_handler.py b/src/recv_handler.py index 5467604..ba3a5c6 100644 --- a/src/recv_handler.py +++ b/src/recv_handler.py @@ -6,7 +6,7 @@ import json import websockets.asyncio.server as Server from typing import List, Tuple -from . import MetaEventType, RealMessageType, MessageType +from . import MetaEventType, RealMessageType, MessageType, NoticeType from maim_message import ( UserInfo, GroupInfo, @@ -245,9 +245,6 @@ class RecvHandler: # 预计等价于戳一戳 logger.warning("暂时不支持窗口抖动解析") pass - case RealMessageType.poke: - logger.warning("暂时不支持戳一戳解析") - pass case RealMessageType.share: logger.warning("链接分享?啊?你搞我啊?") pass @@ -357,7 +354,23 @@ class RecvHandler: else: return None - async def handle_poke_message(self) -> None: + async def handle_notify(self, raw_message: dict) -> None: + notice_type = raw_message.get("notice_type") + match notice_type: + case NoticeType.friend_recall: + logger.info("用户撤回一条消息") + pass + case NoticeType.group_recall: + logger.info("群内用户撤回一条消息") + pass + case NoticeType.Notify: + sub_type = raw_message.get("sub_type") + match sub_type: + case NoticeType.Notify.poke: + logger.info("用户戳了一戳") + pass + + async def handle_poke_notify(self) -> None: pass async def handle_forward_message(self, message_list: list) -> Seg: diff --git a/src/send_handler.py b/src/send_handler.py index d17dcda..7392568 100644 --- a/src/send_handler.py +++ b/src/send_handler.py @@ -27,35 +27,44 @@ class SendHandler: message_segment: Seg = raw_message_base.message_segment group_info: GroupInfo = message_info.group_info user_info: UserInfo = message_info.user_info + target_id: int = None + action: str = None + id_name: str = None - if group_info and user_info: - # 处理群聊消息 - # return + try: processed_message: list = await self.handle_seg_recursive(message_segment) - if processed_message: - response = await self.send_message_to_napcat( - "send_group_msg", - { - "group_id": group_info.group_id, - "message": processed_message, - }, - ) - if response.get("status") == "ok": - logger.info("消息发送成功") - else: - logger.warning(f"消息发送失败,napcat返回:{str(response)}") - else: - logger.critical("现在暂时不支持解析此回复!") - return None - elif user_info: - # 处理私聊消息 - logger.critical("私聊消息暂时无效") - return None - # processed_message = await self.handle_seg_recursive(message_segment) - else: - logger.error("无法识别的消息类型") + except Exception as e: + logger.error(f"处理消息时发生错误: {e}") return + if processed_message: + if group_info and user_info: + target_id = group_info.group_id + action = "send_group_msg" + id_name = "group_id" + elif user_info: + target_id = user_info.user_id + action = "send_private_msg" + id_name = "user_id" + else: + logger.error("无法识别的消息类型") + return + + response = await self.send_message_to_napcat( + action, + { + id_name: target_id, + "message": processed_message, + }, + ) + if response.get("status") == "ok": + logger.info("消息发送成功") + else: + logger.warning(f"消息发送失败,napcat返回:{str(response)}") + else: + logger.critical("现在暂时不支持解析此回复!") + return None + def get_level(self, seg_data: Seg) -> int: if seg_data.type == "seglist": return 1 + max(self.get_level(seg) for seg in seg_data.data)