启用私聊回复

pull/3/head
UnCLAS-Prommer 2025-04-10 22:31:44 +08:00
parent 4d1225f4dc
commit c94e55e7e2
4 changed files with 54 additions and 31 deletions

View File

@ -52,6 +52,7 @@ enable_temp = false
- [ ] 引用回复(完成但是没测试)
- [ ] 戳回去(?)
- [ ] 发送语音(?)
- [ ] 使用优先队列保证消息顺序问题对转发消息等napcat本身就是乱序的处理速度不同如何解决
# 特别鸣谢
特别感谢[@Maple127667](https://github.com/Maple127667)对本项目代码思路的支持

View File

@ -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()

View File

@ -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:

View File

@ -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)