回退上报消息处理器
parent
b6cabc593b
commit
6d3745ff0a
5
main.py
5
main.py
|
|
@ -6,7 +6,6 @@ from src.logger import logger
|
||||||
from src.recv_handler.message_handler import message_handler
|
from src.recv_handler.message_handler import message_handler
|
||||||
from src.recv_handler.meta_event_handler import meta_event_handler
|
from src.recv_handler.meta_event_handler import meta_event_handler
|
||||||
from src.recv_handler.notice_handler import notice_handler
|
from src.recv_handler.notice_handler import notice_handler
|
||||||
from src.recv_handler.message_sent_handler import message_sent_handler
|
|
||||||
from src.recv_handler.message_sending import message_send_instance
|
from src.recv_handler.message_sending import message_send_instance
|
||||||
from src.send_handler import send_handler
|
from src.send_handler import send_handler
|
||||||
from src.config import global_config
|
from src.config import global_config
|
||||||
|
|
@ -28,7 +27,7 @@ async def message_recv(server_connection: Server.ServerConnection):
|
||||||
)
|
)
|
||||||
decoded_raw_message: dict = json.loads(raw_message)
|
decoded_raw_message: dict = json.loads(raw_message)
|
||||||
post_type = decoded_raw_message.get("post_type")
|
post_type = decoded_raw_message.get("post_type")
|
||||||
if post_type in ["meta_event", "message", "notice","message_sent"]:
|
if post_type in ["meta_event", "message", "notice"]:
|
||||||
await message_queue.put(decoded_raw_message)
|
await message_queue.put(decoded_raw_message)
|
||||||
elif post_type is None:
|
elif post_type is None:
|
||||||
await put_response(decoded_raw_message)
|
await put_response(decoded_raw_message)
|
||||||
|
|
@ -44,8 +43,6 @@ async def message_process():
|
||||||
await meta_event_handler.handle_meta_event(message)
|
await meta_event_handler.handle_meta_event(message)
|
||||||
elif post_type == "notice":
|
elif post_type == "notice":
|
||||||
await notice_handler.handle_notice(message)
|
await notice_handler.handle_notice(message)
|
||||||
elif post_type == "message_sent":
|
|
||||||
await message_sent_handler.handle_sent_message(message)
|
|
||||||
else:
|
else:
|
||||||
logger.warning(f"未知的post_type: {post_type}")
|
logger.warning(f"未知的post_type: {post_type}")
|
||||||
message_queue.task_done()
|
message_queue.task_done()
|
||||||
|
|
|
||||||
|
|
@ -1,172 +0,0 @@
|
||||||
from src.logger import logger
|
|
||||||
from src.config import global_config
|
|
||||||
from src.utils import (
|
|
||||||
get_group_info,
|
|
||||||
get_member_info,
|
|
||||||
)
|
|
||||||
from .message_sending import message_send_instance
|
|
||||||
from . import MessageSentType
|
|
||||||
from .message_handler import message_handler
|
|
||||||
|
|
||||||
import time
|
|
||||||
import websockets as Server
|
|
||||||
from typing import List, Dict
|
|
||||||
|
|
||||||
from maim_message import (
|
|
||||||
UserInfo,
|
|
||||||
GroupInfo,
|
|
||||||
Seg,
|
|
||||||
BaseMessageInfo,
|
|
||||||
MessageBase,
|
|
||||||
TemplateInfo,
|
|
||||||
FormatInfo,
|
|
||||||
)
|
|
||||||
|
|
||||||
class MessageSentHandler:
|
|
||||||
def __init__(self):
|
|
||||||
self.server_connection: Server.ServerConnection = None
|
|
||||||
|
|
||||||
async def set_server_connection(self, server_connection: Server.ServerConnection) -> None:
|
|
||||||
"""设置Napcat连接"""
|
|
||||||
self.server_connection = server_connection
|
|
||||||
|
|
||||||
async def handle_sent_message(self, raw_message: dict) -> None:
|
|
||||||
"""
|
|
||||||
从Napcat接受的原始发送消息处理
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
raw_message: dict: 原始消息
|
|
||||||
"""
|
|
||||||
message_type: str = raw_message.get("message_type")
|
|
||||||
message_id: int = raw_message.get("message_id")
|
|
||||||
message_time: float = time.time()
|
|
||||||
|
|
||||||
template_info: TemplateInfo = None # 模板信息,暂时为空,等待启用
|
|
||||||
format_info: FormatInfo = FormatInfo(
|
|
||||||
content_format=["text", "image", "emoji"],
|
|
||||||
accept_format=["text", "image", "emoji", "reply"],
|
|
||||||
) # 上报信息暂时只支持这四种解析
|
|
||||||
if message_type == MessageSentType.private:
|
|
||||||
sub_type = raw_message.get("sub_type")
|
|
||||||
if sub_type == MessageSentType.Private.friend:
|
|
||||||
sender_info: dict = raw_message.get("sender")
|
|
||||||
|
|
||||||
# 发送者用户信息
|
|
||||||
user_info: UserInfo = UserInfo(
|
|
||||||
platform=global_config.maibot_server.platform_name,
|
|
||||||
user_id=sender_info.get("user_id"),
|
|
||||||
user_nickname=sender_info.get("nickname"),
|
|
||||||
user_cardname=sender_info.get("card"),
|
|
||||||
)
|
|
||||||
|
|
||||||
# 不存在群信息
|
|
||||||
group_info: GroupInfo = None
|
|
||||||
elif sub_type == MessageSentType.Private.group:
|
|
||||||
"""
|
|
||||||
本部分暂时不做支持,先放着
|
|
||||||
"""
|
|
||||||
logger.warning("群临时消息类型不支持")
|
|
||||||
return None
|
|
||||||
|
|
||||||
sender_info: dict = raw_message.get("sender")
|
|
||||||
|
|
||||||
# 由于临时会话中,Napcat默认不发送成员昵称,所以需要单独获取
|
|
||||||
fetched_member_info: dict = await get_member_info(
|
|
||||||
self.server_connection,
|
|
||||||
raw_message.get("group_id"),
|
|
||||||
sender_info.get("user_id"),
|
|
||||||
)
|
|
||||||
nickname = fetched_member_info.get("nickname") if fetched_member_info else None
|
|
||||||
# 发送者用户信息
|
|
||||||
user_info: UserInfo = UserInfo(
|
|
||||||
platform=global_config.maibot_server.platform_name,
|
|
||||||
user_id=sender_info.get("user_id"),
|
|
||||||
user_nickname=nickname,
|
|
||||||
user_cardname=None,
|
|
||||||
)
|
|
||||||
|
|
||||||
# -------------------这里需要群信息吗?-------------------
|
|
||||||
|
|
||||||
# 获取群聊相关信息,在此单独处理group_name,因为默认发送的消息中没有
|
|
||||||
fetched_group_info: dict = await get_group_info(self.server_connection, raw_message.get("group_id"))
|
|
||||||
group_name = ""
|
|
||||||
if fetched_group_info.get("group_name"):
|
|
||||||
group_name = fetched_group_info.get("group_name")
|
|
||||||
|
|
||||||
group_info: GroupInfo = GroupInfo(
|
|
||||||
platform=global_config.maibot_server.platform_name,
|
|
||||||
group_id=raw_message.get("group_id"),
|
|
||||||
group_name=group_name,
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
logger.warning(f"私聊消息类型 {sub_type} 不支持")
|
|
||||||
return None
|
|
||||||
elif message_type == MessageSentType.group:
|
|
||||||
sub_type = raw_message.get("sub_type")
|
|
||||||
if sub_type == MessageSentType.Group.normal:
|
|
||||||
sender_info: dict = raw_message.get("sender")
|
|
||||||
|
|
||||||
# 发送者用户信息
|
|
||||||
user_info: UserInfo = UserInfo(
|
|
||||||
platform=global_config.maibot_server.platform_name,
|
|
||||||
user_id=sender_info.get("user_id"),
|
|
||||||
user_nickname=sender_info.get("nickname"),
|
|
||||||
user_cardname=sender_info.get("card"),
|
|
||||||
)
|
|
||||||
|
|
||||||
# 获取群聊相关信息,在此单独处理group_name,因为默认发送的消息中没有
|
|
||||||
fetched_group_info = await get_group_info(self.server_connection, raw_message.get("group_id"))
|
|
||||||
group_name: str = None
|
|
||||||
if fetched_group_info:
|
|
||||||
group_name = fetched_group_info.get("group_name")
|
|
||||||
|
|
||||||
group_info: GroupInfo = GroupInfo(
|
|
||||||
platform=global_config.maibot_server.platform_name,
|
|
||||||
group_id=raw_message.get("group_id"),
|
|
||||||
group_name=group_name,
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
logger.warning(f"群聊消息类型 {sub_type} 不支持")
|
|
||||||
return None
|
|
||||||
|
|
||||||
additional_config: dict = {"sent_message":True}
|
|
||||||
|
|
||||||
# 消息信息
|
|
||||||
message_info: BaseMessageInfo = BaseMessageInfo(
|
|
||||||
platform=global_config.maibot_server.platform_name,
|
|
||||||
message_id=message_id,
|
|
||||||
time=message_time,
|
|
||||||
user_info=user_info,
|
|
||||||
group_info=group_info,
|
|
||||||
template_info=template_info,
|
|
||||||
format_info=format_info,
|
|
||||||
additional_config=additional_config,
|
|
||||||
)
|
|
||||||
|
|
||||||
# 处理实际信息
|
|
||||||
if not raw_message.get("message"):
|
|
||||||
logger.warning("原始消息内容为空")
|
|
||||||
return None
|
|
||||||
|
|
||||||
# 获取Seg列表
|
|
||||||
seg_message: List[Seg] = await message_handler.handle_real_message(raw_message)
|
|
||||||
if not seg_message:
|
|
||||||
logger.warning("处理后消息内容为空")
|
|
||||||
return None
|
|
||||||
submit_seg: Seg = Seg(
|
|
||||||
type="seglist",
|
|
||||||
data=seg_message,
|
|
||||||
)
|
|
||||||
# MessageBase创建
|
|
||||||
message_base: MessageBase = MessageBase(
|
|
||||||
message_info=message_info,
|
|
||||||
message_segment=submit_seg,
|
|
||||||
raw_message=raw_message.get("raw_message"),
|
|
||||||
)
|
|
||||||
|
|
||||||
logger.info("发送到Maibot处理以更新数据库")
|
|
||||||
await message_send_instance.message_send(message_base)
|
|
||||||
|
|
||||||
message_sent_handler = MessageSentHandler()
|
|
||||||
Loading…
Reference in New Issue