启用私聊回复
parent
4d1225f4dc
commit
c94e55e7e2
|
|
@ -52,6 +52,7 @@ enable_temp = false
|
|||
- [ ] 引用回复(完成但是没测试)
|
||||
- [ ] 戳回去(?)
|
||||
- [ ] 发送语音(?)
|
||||
- [ ] 使用优先队列保证消息顺序(问题:对转发消息等napcat本身就是乱序的,处理速度不同如何解决)
|
||||
|
||||
# 特别鸣谢
|
||||
特别感谢[@Maple127667](https://github.com/Maple127667)对本项目代码思路的支持
|
||||
2
main.py
2
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()
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue