修复潜在问题,拆分部分内容,增强logger输出

pull/31/head
UnCLAS-Prommer 2025-05-24 17:23:29 +08:00
parent 53dbbbd7a7
commit c2525f4c55
7 changed files with 127 additions and 114 deletions

View File

@ -14,7 +14,7 @@ async def message_recv(server_connection: Server.ServerConnection):
recv_handler.server_connection = server_connection recv_handler.server_connection = server_connection
send_handler.server_connection = server_connection send_handler.server_connection = server_connection
async for raw_message in server_connection: async for raw_message in server_connection:
logger.debug(f"{raw_message[:80]}..." if len(raw_message) > 80 else raw_message) logger.debug(f"{raw_message[:100]}..." if len(raw_message) > 100 else raw_message)
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"]: if post_type in ["meta_event", "message", "notice"]:

View File

@ -42,6 +42,7 @@ class Config:
for key in include_configs: for key in include_configs:
if key not in raw_config: if key not in raw_config:
logger.error(f"配置文件中缺少必需的字段: '{key}'") logger.error(f"配置文件中缺少必需的字段: '{key}'")
logger.error("你的配置文件可能过时,请尝试手动更新配置文件。")
sys.exit(1) sys.exit(1)
self.server_host = raw_config["Napcat_Server"].get("host", "localhost") self.server_host = raw_config["Napcat_Server"].get("host", "localhost")
@ -71,6 +72,21 @@ class Config:
self.use_tts = raw_config["Voice"].get("use_tts", False) self.use_tts = raw_config["Voice"].get("use_tts", False)
self.debug_level = raw_config["Debug"].get("level", "INFO") self.debug_level = raw_config["Debug"].get("level", "INFO")
if self.debug_level == "DEBUG":
logger.debug("原始配置文件内容:")
logger.debug(raw_config)
logger.debug("读取到的配置内容:")
logger.debug(f"平台: {self.platform}")
logger.debug(f"MaiBot服务器地址: {self.mai_host}:{self.mai_port}")
logger.debug(f"Napcat服务器地址: {self.server_host}:{self.server_port}")
logger.debug(f"心跳间隔: {self.napcat_heartbeat_interval}")
logger.debug(f"群聊列表类型: {self.group_list_type}")
logger.debug(f"群聊列表: {self.group_list}")
logger.debug(f"私聊列表类型: {self.private_list_type}")
logger.debug(f"私聊列表: {self.private_list}")
logger.debug(f"禁用用户ID列表: {self.ban_user_id}")
logger.debug(f"是否启用TTS: {self.use_tts}")
logger.debug(f"调试级别: {self.debug_level}")
global_config = Config() global_config = Config()

View File

@ -1,7 +1,6 @@
from loguru import logger from loguru import logger
from .config import global_config from .config import global_config
import sys import sys
# import builtins
logger.remove() logger.remove()
logger.add( logger.add(
@ -9,17 +8,3 @@ logger.add(
level=global_config.debug_level, level=global_config.debug_level,
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>", format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
) )
# def handle_output(message: str):
# if "连接失败" in message:
# logger.error(message)
# elif "收到无效的" in message:
# logger.warning(message)
# elif "检测到平台" in message:
# logger.warning(message)
# else:
# logger.info(message)
# builtins.print = handle_output

View File

@ -19,6 +19,7 @@ async def get_response(request_id: str) -> dict:
await asyncio.sleep(0.2) await asyncio.sleep(0.2)
response = response_dict.pop(request_id) response = response_dict.pop(request_id)
_ = response_time_dict.pop(request_id) _ = response_time_dict.pop(request_id)
logger.trace(f"响应信息id: {request_id} 已从响应字典中取出")
return response return response
@ -27,6 +28,7 @@ async def put_response(response: dict):
now_time = time.time() now_time = time.time()
response_dict[echo_id] = response response_dict[echo_id] = response
response_time_dict[echo_id] = now_time response_time_dict[echo_id] = now_time
logger.trace(f"响应信息id: {echo_id} 已存入响应字典")
async def check_timeout_response() -> None: async def check_timeout_response() -> None:

View File

@ -5,7 +5,7 @@ import time
import asyncio import asyncio
import json import json
import websockets as Server import websockets as Server
from typing import List, Tuple, Optional from typing import List, Tuple, Optional, Dict, Any
import uuid import uuid
from . import MetaEventType, RealMessageType, MessageType, NoticeType from . import MetaEventType, RealMessageType, MessageType, NoticeType
@ -75,6 +75,7 @@ class RecvHandler:
Returns: Returns:
bool: 是否允许聊天 bool: 是否允许聊天
""" """
logger.debug(f"群聊id: {group_id}, 用户id: {user_id}")
if group_id: if group_id:
if global_config.group_list_type == "whitelist" and group_id not in global_config.group_list: if global_config.group_list_type == "whitelist" and group_id not in global_config.group_list:
logger.warning("群聊不在聊天白名单中,消息被丢弃") logger.warning("群聊不在聊天白名单中,消息被丢弃")
@ -84,10 +85,10 @@ class RecvHandler:
return False return False
else: else:
if global_config.private_list_type == "whitelist" and user_id not in global_config.private_list: if global_config.private_list_type == "whitelist" and user_id not in global_config.private_list:
logger.warning("用户不在聊天白名单中,消息被丢弃") logger.warning("私聊不在聊天白名单中,消息被丢弃")
return False return False
elif global_config.private_list_type == "blacklist" and user_id in global_config.private_list: elif global_config.private_list_type == "blacklist" and user_id in global_config.private_list:
logger.warning("用户在聊天黑名单中,消息被丢弃") logger.warning("私聊在聊天黑名单中,消息被丢弃")
return False return False
if user_id in global_config.ban_user_id: if user_id in global_config.ban_user_id:
logger.warning("用户在全局黑名单中,消息被丢弃") logger.warning("用户在全局黑名单中,消息被丢弃")
@ -110,7 +111,7 @@ class RecvHandler:
template_info: TemplateInfo = None # 模板信息,暂时为空,等待启用 template_info: TemplateInfo = None # 模板信息,暂时为空,等待启用
format_info: FormatInfo = FormatInfo( format_info: FormatInfo = FormatInfo(
content_format=["text", "image", "emoji"], content_format=["text", "image", "emoji"],
accept_format=["text", "image", "emoji", "reply"], accept_format=["text", "image", "emoji", "reply", "voice"],
) # 格式化信息 ) # 格式化信息
if message_type == MessageType.private: if message_type == MessageType.private:
sub_type = raw_message.get("sub_type") sub_type = raw_message.get("sub_type")
@ -169,7 +170,7 @@ class RecvHandler:
) )
else: else:
logger.warning("私聊消息类型不支持") logger.warning(f"私聊消息类型 {sub_type} 不支持")
return None return None
elif message_type == MessageType.group: elif message_type == MessageType.group:
sub_type = raw_message.get("sub_type") sub_type = raw_message.get("sub_type")
@ -200,7 +201,7 @@ class RecvHandler:
) )
else: else:
logger.warning("群聊消息类型不支持") logger.warning(f"群聊消息类型 {sub_type} 不支持")
return None return None
additional_config: dict = {} additional_config: dict = {}
@ -221,13 +222,13 @@ class RecvHandler:
# 处理实际信息 # 处理实际信息
if not raw_message.get("message"): if not raw_message.get("message"):
logger.warning("消息内容为空") logger.warning("原始消息内容为空")
return None return None
# 获取Seg列表 # 获取Seg列表
seg_message: List[Seg] = await self.handle_real_message(raw_message) seg_message: List[Seg] = await self.handle_real_message(raw_message)
if not seg_message: if not seg_message:
logger.warning("消息内容为空") logger.warning("处理后消息内容为空")
return None return None
submit_seg: Seg = Seg( submit_seg: Seg = Seg(
type="seglist", type="seglist",
@ -309,38 +310,7 @@ class RecvHandler:
case RealMessageType.share: case RealMessageType.share:
logger.warning("暂时不支持链接解析") logger.warning("暂时不支持链接解析")
case RealMessageType.forward: case RealMessageType.forward:
forward_message_data = sub_message.get("data") messages = await self.get_forward_message(sub_message)
if not forward_message_data:
logger.warning("转发消息内容为空")
return None
forward_message_id = forward_message_data.get("id")
request_uuid = str(uuid.uuid4())
payload = json.dumps(
{
"action": "get_forward_msg",
"params": {"message_id": forward_message_id},
"echo": request_uuid,
}
)
try:
await self.server_connection.send(payload)
response: dict = await get_response(request_uuid)
except TimeoutError:
logger.error("获取转发消息超时")
return None
except Exception as e:
logger.error(f"获取转发消息失败: {str(e)}")
return None
logger.debug(
f"转发消息原始格式:{json.dumps(response)[:80]}..."
if len(json.dumps(response)) > 80
else json.dumps(response)
)
response_data: dict = response.get("data")
if not response_data:
logger.warning("转发消息内容为空或获取失败")
return None
messages = response_data.get("messages")
if not messages: if not messages:
logger.warning("转发消息内容为空或获取失败") logger.warning("转发消息内容为空或获取失败")
return None return None
@ -352,7 +322,7 @@ class RecvHandler:
case RealMessageType.node: case RealMessageType.node:
logger.warning("不支持转发消息节点解析") logger.warning("不支持转发消息节点解析")
case _: case _:
logger.warning(f"未知消息类型{sub_message_type}") logger.warning(f"未知消息类型: {sub_message_type}")
return seg_message return seg_message
async def handle_text_message(self, raw_message: dict) -> Seg: async def handle_text_message(self, raw_message: dict) -> Seg:
@ -406,7 +376,7 @@ class RecvHandler:
"""这部分认为是表情包""" """这部分认为是表情包"""
return Seg(type="emoji", data=image_base64) return Seg(type="emoji", data=image_base64)
else: else:
logger.warning(f"不支持的图片类型:{image_sub_type}") logger.warning(f"不支持的图片类型:{image_sub_type}")
return None return None
async def handle_at_message(self, raw_message: dict, self_id: int, group_id: int) -> Seg | None: async def handle_at_message(self, raw_message: dict, self_id: int, group_id: int) -> Seg | None:
@ -424,22 +394,53 @@ class RecvHandler:
if message_data: if message_data:
qq_id = message_data.get("qq") qq_id = message_data.get("qq")
if str(self_id) == str(qq_id): if str(self_id) == str(qq_id):
logger.debug("机器人被at")
self_info: dict = await get_self_info(self.server_connection) self_info: dict = await get_self_info(self.server_connection)
if self_info: if self_info:
return Seg( return Seg(type="text", data=f"@<{self_info.get('nickname')}:{self_info.get('user_id')}>")
type=RealMessageType.text, data=f"@<{self_info.get('nickname')}:{self_info.get('user_id')}>"
)
else: else:
return None return None
else: else:
member_info: dict = await get_member_info(self.server_connection, group_id=group_id, user_id=qq_id) member_info: dict = await get_member_info(self.server_connection, group_id=group_id, user_id=qq_id)
if member_info: if member_info:
return Seg( return Seg(type="text", data=f"@<{member_info.get('nickname')}:{member_info.get('user_id')}>")
type=RealMessageType.text, data=f"@<{member_info.get('nickname')}:{member_info.get('user_id')}>"
)
else: else:
return None return None
async def get_forward_message(self, raw_message: dict) -> Dict[str, Any] | None:
forward_message_data: Dict = raw_message.get("data")
if not forward_message_data:
logger.warning("转发消息内容为空")
return None
forward_message_id = forward_message_data.get("id")
request_uuid = str(uuid.uuid4())
payload = json.dumps(
{
"action": "get_forward_msg",
"params": {"message_id": forward_message_id},
"echo": request_uuid,
}
)
try:
await self.server_connection.send(payload)
response: dict = await get_response(request_uuid)
except TimeoutError:
logger.error("获取转发消息超时")
return None
except Exception as e:
logger.error(f"获取转发消息失败: {str(e)}")
return None
logger.debug(
f"转发消息原始格式:{json.dumps(response)[:80]}..."
if len(json.dumps(response)) > 80
else json.dumps(response)
)
response_data: Dict = response.get("data")
if not response_data:
logger.warning("转发消息内容为空或获取失败")
return None
return response_data.get("messages")
async def handle_reply_message(self, raw_message: dict) -> Seg | None: async def handle_reply_message(self, raw_message: dict) -> Seg | None:
# sourcery skip: move-assign-in-block, use-named-expression # sourcery skip: move-assign-in-block, use-named-expression
""" """
@ -497,11 +498,11 @@ class RecvHandler:
if global_config.enable_poke: if global_config.enable_poke:
handled_message: Seg = await self.handle_poke_notify(raw_message) handled_message: Seg = await self.handle_poke_notify(raw_message)
else: else:
logger.warning("戳一戳消息被禁用") logger.warning("戳一戳消息被禁用,取消戳一戳处理")
case _: case _:
logger.warning("不支持的notify类型") logger.warning(f"不支持的notify类型: {notice_type}.{sub_type}")
case _: case _:
logger.warning("不支持的notice类型") logger.warning(f"不支持的notice类型: {notice_type}")
return None return None
if not handled_message: if not handled_message:
logger.warning("notice处理失败或不支持") logger.warning("notice处理失败或不支持")
@ -538,6 +539,8 @@ class RecvHandler:
group_name: str = None group_name: str = None
if fetched_group_info: if fetched_group_info:
group_name = fetched_group_info.get("group_name") group_name = fetched_group_info.get("group_name")
else:
logger.warning("无法获取戳一戳消息所在群的名称")
group_info = GroupInfo( group_info = GroupInfo(
platform=global_config.platform, platform=global_config.platform,
group_id=group_id, group_id=group_id,
@ -581,7 +584,7 @@ class RecvHandler:
first_txt = raw_info[2].get("txt", "戳了戳") first_txt = raw_info[2].get("txt", "戳了戳")
second_txt = raw_info[4].get("txt", "") second_txt = raw_info[4].get("txt", "")
except Exception as e: except Exception as e:
logger.warning(f"解析戳一戳消息失败,使用默认文本:{str(e)}") logger.warning(f"解析戳一戳消息失败: {str(e)},将使用默认文本")
first_txt = "戳了戳" first_txt = "戳了戳"
second_txt = "" second_txt = ""
""" """
@ -614,12 +617,15 @@ class RecvHandler:
return None return None
if image_count < 5 and image_count > 0: if image_count < 5 and image_count > 0:
# 处理图片数量小于5的情况此时解析图片为base64 # 处理图片数量小于5的情况此时解析图片为base64
logger.trace("图片数量小于5开始解析图片为base64")
return await self._recursive_parse_image_seg(handled_message, True) return await self._recursive_parse_image_seg(handled_message, True)
elif image_count > 0: elif image_count > 0:
logger.trace("图片数量大于等于5开始解析图片为占位符")
# 处理图片数量大于等于5的情况此时解析图片为占位符 # 处理图片数量大于等于5的情况此时解析图片为占位符
return await self._recursive_parse_image_seg(handled_message, False) return await self._recursive_parse_image_seg(handled_message, False)
else: else:
# 处理没有图片的情况,此时直接返回 # 处理没有图片的情况,此时直接返回
logger.trace("没有图片,直接返回")
return handled_message return handled_message
async def _recursive_parse_image_seg(self, seg_data: Seg, to_image: bool) -> Seg: async def _recursive_parse_image_seg(self, seg_data: Seg, to_image: bool) -> Seg:
@ -648,6 +654,7 @@ class RecvHandler:
return Seg(type="text", data="[表情包]") return Seg(type="text", data="[表情包]")
return Seg(type="emoji", data=encoded_image) return Seg(type="emoji", data=encoded_image)
else: else:
logger.trace(f"不处理类型: {seg_data.type}")
return seg_data return seg_data
else: else:
if seg_data.type == "seglist": if seg_data.type == "seglist":
@ -657,12 +664,11 @@ class RecvHandler:
new_seg_list.append(parsed_seg) new_seg_list.append(parsed_seg)
return Seg(type="seglist", data=new_seg_list) return Seg(type="seglist", data=new_seg_list)
elif seg_data.type == "image": elif seg_data.type == "image":
image_url = seg_data.data
return Seg(type="text", data="[图片]") return Seg(type="text", data="[图片]")
elif seg_data.type == "emoji": elif seg_data.type == "emoji":
image_url = seg_data.data
return Seg(type="text", data="[动画表情]") return Seg(type="text", data="[动画表情]")
else: else:
logger.trace(f"不处理类型: {seg_data.type}")
return seg_data return seg_data
async def _handle_forward_message(self, message_list: list, layer: int) -> Tuple[Seg, int] | Tuple[None, int]: async def _handle_forward_message(self, message_list: list, layer: int) -> Tuple[Seg, int] | Tuple[None, int]:
@ -676,7 +682,7 @@ class RecvHandler:
seg_data: Seg: 处理后的消息段 seg_data: Seg: 处理后的消息段
image_count: int: 图片数量 image_count: int: 图片数量
""" """
seg_list = [] seg_list: List[Seg] = []
image_count = 0 image_count = 0
if message_list is None: if message_list is None:
return None, 0 return None, 0
@ -693,12 +699,9 @@ class RecvHandler:
message_of_sub_message = message_of_sub_message_list[0] message_of_sub_message = message_of_sub_message_list[0]
if message_of_sub_message.get("type") == RealMessageType.forward: if message_of_sub_message.get("type") == RealMessageType.forward:
if layer >= 3: if layer >= 3:
full_seg_data = ( full_seg_data = Seg(
Seg( type="text",
type="text", data=("--" * layer) + f"{user_nickname}】:【转发消息】\n",
data=("--" * layer) + f"{user_nickname}】:【转发消息】\n",
),
0,
) )
else: else:
sub_message_data = message_of_sub_message.get("data") sub_message_data = message_of_sub_message.get("data")
@ -719,55 +722,43 @@ class RecvHandler:
continue continue
text_message = sub_message_data.get("text") text_message = sub_message_data.get("text")
seg_data = Seg(type="text", data=text_message) seg_data = Seg(type="text", data=text_message)
data_list: List[Any] = []
if layer > 0: if layer > 0:
seg_list.append( data_list = [
Seg( Seg(type="text", data=("--" * layer) + user_nickname_str),
type="seglist", seg_data,
data=[ break_seg,
Seg(type="text", data=("--" * layer) + user_nickname_str), ]
seg_data,
break_seg,
],
)
)
else: else:
seg_list.append( data_list = [
Seg( Seg(type="text", data=user_nickname_str),
type="seglist", seg_data,
data=[ break_seg,
Seg(type="text", data=user_nickname_str), ]
seg_data, seg_list.append(Seg(type="seglist", data=data_list))
break_seg,
],
)
)
elif message_of_sub_message.get("type") == RealMessageType.image: elif message_of_sub_message.get("type") == RealMessageType.image:
image_count += 1 image_count += 1
image_data = message_of_sub_message.get("data") image_data = message_of_sub_message.get("data")
sub_type = image_data.get("sub_type") sub_type = image_data.get("sub_type")
image_url = image_data.get("url") image_url = image_data.get("url")
data_list: List[Any] = []
if sub_type == 0: if sub_type == 0:
seg_data = Seg(type="image", data=image_url) seg_data = Seg(type="image", data=image_url)
else: else:
seg_data = Seg(type="emoji", data=image_url) seg_data = Seg(type="emoji", data=image_url)
if layer > 0: if layer > 0:
full_seg_data = Seg( data_list = [
type="seglist", Seg(type="text", data=("--" * layer) + user_nickname_str),
data=[ seg_data,
Seg(type="text", data=("--" * layer) + user_nickname_str), break_seg,
seg_data, ]
break_seg,
],
)
else: else:
full_seg_data = Seg( data_list = [
type="seglist", Seg(type="text", data=user_nickname_str),
data=[ seg_data,
Seg(type="text", data=user_nickname_str), break_seg,
seg_data, ]
break_seg, full_seg_data = Seg(type="seglist", data=data_list)
],
)
seg_list.append(full_seg_data) seg_list.append(full_seg_data)
return Seg(type="seglist", data=seg_list), image_count return Seg(type="seglist", data=seg_list), image_count

View File

@ -42,10 +42,12 @@ class SendHandler:
if processed_message: if processed_message:
if group_info and user_info: if group_info and user_info:
logger.debug("发送群聊消息")
target_id = group_info.group_id target_id = group_info.group_id
action = "send_group_msg" action = "send_group_msg"
id_name = "group_id" id_name = "group_id"
elif user_info: elif user_info:
logger.debug("发送私聊消息")
target_id = user_info.user_id target_id = user_info.user_id
action = "send_private_msg" action = "send_private_msg"
id_name = "user_id" id_name = "user_id"
@ -81,7 +83,7 @@ class SendHandler:
if not seg_data.data: if not seg_data.data:
return [] return []
for seg in seg_data.data: for seg in seg_data.data:
payload = self.process_message_by_type(seg, payload) payload.extend(self.process_message_by_type(seg, payload))
else: else:
payload = self.process_message_by_type(seg_data, payload) payload = self.process_message_by_type(seg_data, payload)
return payload return payload
@ -119,6 +121,9 @@ class SendHandler:
temp_list = [] temp_list = []
temp_list.append(addon) temp_list.append(addon)
for i in payload: for i in payload:
if i.get("type") == "reply":
logger.debug("检测到多个回复,使用最新的回复")
continue
temp_list.append(i) temp_list.append(i)
return temp_list return temp_list
else: else:

View File

@ -27,6 +27,7 @@ async def get_group_info(websocket: Server.ServerConnection, group_id: int) -> d
返回值需要处理可能为空的情况 返回值需要处理可能为空的情况
""" """
logger.debug("获取群聊信息中")
request_uuid = str(uuid.uuid4()) request_uuid = str(uuid.uuid4())
payload = json.dumps({"action": "get_group_info", "params": {"group_id": group_id}, "echo": request_uuid}) payload = json.dumps({"action": "get_group_info", "params": {"group_id": group_id}, "echo": request_uuid})
try: try:
@ -48,6 +49,7 @@ async def get_member_info(websocket: Server.ServerConnection, group_id: int, use
返回值需要处理可能为空的情况 返回值需要处理可能为空的情况
""" """
logger.debug("获取群成员信息中")
request_uuid = str(uuid.uuid4()) request_uuid = str(uuid.uuid4())
payload = json.dumps( payload = json.dumps(
{ {
@ -72,6 +74,7 @@ async def get_member_info(websocket: Server.ServerConnection, group_id: int, use
async def get_image_base64(url: str) -> str: async def get_image_base64(url: str) -> str:
# sourcery skip: raise-specific-error # sourcery skip: raise-specific-error
"""获取图片/表情包的Base64""" """获取图片/表情包的Base64"""
logger.debug(f"下载图片: {url}")
http = SSLAdapter() http = SSLAdapter()
try: try:
response = http.request("GET", url, timeout=10) response = http.request("GET", url, timeout=10)
@ -85,6 +88,14 @@ async def get_image_base64(url: str) -> str:
def convert_image_to_gif(image_base64: str) -> str: def convert_image_to_gif(image_base64: str) -> str:
"""
将Base64编码的图片转换为GIF格式
Parameters:
image_base64: str: Base64编码的图片数据
Returns:
str: Base64编码的GIF图片数据
"""
logger.debug("转换图片为GIF格式")
try: try:
image_bytes = base64.b64decode(image_base64) image_bytes = base64.b64decode(image_base64)
image = Image.open(io.BytesIO(image_bytes)) image = Image.open(io.BytesIO(image_bytes))
@ -105,6 +116,7 @@ async def get_self_info(websocket: Server.ServerConnection) -> dict:
Returns: Returns:
data: dict: 返回的自身信息 data: dict: 返回的自身信息
""" """
logger.debug("获取自身信息中")
request_uuid = str(uuid.uuid4()) request_uuid = str(uuid.uuid4())
payload = json.dumps({"action": "get_login_info", "params": {}, "echo": request_uuid}) payload = json.dumps({"action": "get_login_info", "params": {}, "echo": request_uuid})
try: try:
@ -141,6 +153,7 @@ async def get_stranger_info(websocket: Server.ServerConnection, user_id: int) ->
Returns: Returns:
dict: 返回的陌生人信息 dict: 返回的陌生人信息
""" """
logger.debug("获取陌生人信息中")
request_uuid = str(uuid.uuid4()) request_uuid = str(uuid.uuid4())
payload = json.dumps({"action": "get_stranger_info", "params": {"user_id": user_id}, "echo": request_uuid}) payload = json.dumps({"action": "get_stranger_info", "params": {"user_id": user_id}, "echo": request_uuid})
try: try:
@ -165,6 +178,7 @@ async def get_message_detail(websocket: Server.ServerConnection, message_id: str
Returns: Returns:
dict: 返回的消息详情 dict: 返回的消息详情
""" """
logger.debug("获取消息详情中")
request_uuid = str(uuid.uuid4()) request_uuid = str(uuid.uuid4())
payload = json.dumps({"action": "get_msg", "params": {"message_id": message_id}, "echo": request_uuid}) payload = json.dumps({"action": "get_msg", "params": {"message_id": message_id}, "echo": request_uuid})
try: try: