diff --git a/GenshinUID/__init__.py b/GenshinUID/__init__.py index deb755c1..e41662b4 100644 --- a/GenshinUID/__init__.py +++ b/GenshinUID/__init__.py @@ -29,16 +29,22 @@ async def send_char_adv(ev: Event): raw_data = ev.__dict__ group_id = sessions[-2] if len(sessions) >= 2 else None message: List[Message] = [] + msg_id = '' - # ntchat + # qqguild if '_message' in raw_data: messages = raw_data['_message'] - group_id = str(raw_data['channel_id']) - # qqguild + if 'direct_message' in raw_data and raw_data['direct_message']: + group_id = None + user_id = str(raw_data['guild_id']) + else: + group_id = str(raw_data['channel_id']) + msg_id = raw_data['id'] + # ntchat elif not messages and 'message' in raw_data: messages = raw_data['message'] # ntchat - elif 'data' in raw_data: + if 'data' in raw_data: if 'chatroom' in raw_data['data']['to_wxid']: group_id = raw_data['data']['to_wxid'] if 'image' in raw_data['data']: @@ -75,6 +81,7 @@ async def send_char_adv(ev: Event): group_id=group_id, user_id=user_id, content=message, + msg_id=msg_id, ) logger.info(f'【发送】[gsuid-core]: {msg.bot_id}') await gsclient._input(msg) @@ -95,7 +102,8 @@ async def send_start_msg(matcher: Matcher): @driver.on_bot_connect async def start_client(): - await start() + if gsclient is None: + await start() await connect() diff --git a/GenshinUID/client.py b/GenshinUID/client.py index cd324b6d..22cc4f98 100644 --- a/GenshinUID/client.py +++ b/GenshinUID/client.py @@ -1,6 +1,6 @@ import base64 import asyncio -from typing import Dict, List, Union, Optional +from typing import Any, Dict, List, Union, Optional import websockets.client from nonebot.log import logger @@ -103,6 +103,7 @@ class GsClient: node, msg.target_id, msg.target_type, + msg.msg_id, ) except Exception as e: logger.error(e) @@ -199,9 +200,10 @@ async def guild_send( node: Optional[List[Dict]], target_id: Optional[str], target_type: Optional[str], + msg_id: Optional[str], ): async def _send(content: Optional[str], image: Optional[str]): - result = {} + result: Dict[str, Any] = {'msg_id': msg_id} if image: img_bytes = base64.b64decode(image.replace('base64://', '')) result['file_image'] = img_bytes @@ -213,6 +215,12 @@ async def guild_send( channel_id=int(target_id) if target_id else 0, **result, ) + else: + await bot.call_api( + 'post_dms_messages', + guild_id=int(target_id) if target_id else 0, + **result, + ) if node: for _msg in node: diff --git a/GenshinUID/models.py b/GenshinUID/models.py index 7bc4efac..dc312814 100644 --- a/GenshinUID/models.py +++ b/GenshinUID/models.py @@ -1,4 +1,4 @@ -from typing import Any, List, Optional +from typing import Any, List, Literal, Optional from msgspec import Struct @@ -10,7 +10,8 @@ class Message(Struct): class MessageReceive(Struct): bot_id: str = 'Bot' - user_type: Optional[str] = None + msg_id: str = '' + user_type: Literal['group', 'direct', 'channel', 'sub_channel'] = 'group' group_id: Optional[str] = None user_id: Optional[str] = None user_pm: int = 3 @@ -30,6 +31,7 @@ class MessageContent(Struct): class MessageSend(Struct): bot_id: str = 'Bot' + msg_id: str = '' target_type: Optional[str] = None target_id: Optional[str] = None content: Optional[List[Message]] = None