mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-12 06:55:49 +08:00
🎨 优化消息转换判断
This commit is contained in:
parent
a05c86bc43
commit
38050c74d6
@ -36,6 +36,9 @@ class _Bot:
|
|||||||
):
|
):
|
||||||
_message = await convert_message(message)
|
_message = await convert_message(message)
|
||||||
|
|
||||||
|
if bot_id in ['qqgroup']:
|
||||||
|
_message = await to_markdown(_message)
|
||||||
|
|
||||||
if at_sender and sender_id:
|
if at_sender and sender_id:
|
||||||
_message.append(MessageSegment.at(sender_id))
|
_message.append(MessageSegment.at(sender_id))
|
||||||
|
|
||||||
@ -160,7 +163,6 @@ class Bot:
|
|||||||
_reply = await convert_message(reply)
|
_reply = await convert_message(reply)
|
||||||
|
|
||||||
if self.ev.real_bot_id in ['qqgroup']:
|
if self.ev.real_bot_id in ['qqgroup']:
|
||||||
_reply_str = await to_markdown(_reply)
|
|
||||||
_buttons = []
|
_buttons = []
|
||||||
for option in option_list:
|
for option in option_list:
|
||||||
if isinstance(option, List):
|
if isinstance(option, List):
|
||||||
@ -176,7 +178,7 @@ class Bot:
|
|||||||
else:
|
else:
|
||||||
_buttons.append(Button(option, option, option))
|
_buttons.append(Button(option, option, option))
|
||||||
|
|
||||||
await self.send(MessageSegment.markdown(_reply_str, _buttons))
|
await self.send(await to_markdown(_reply, _buttons))
|
||||||
else:
|
else:
|
||||||
if unsuported_platform:
|
if unsuported_platform:
|
||||||
_options: List[str] = []
|
_options: List[str] = []
|
||||||
|
@ -163,11 +163,21 @@ class MessageSegment:
|
|||||||
return Message(type=f'log_{type}', data=content)
|
return Message(type=f'log_{type}', data=content)
|
||||||
|
|
||||||
|
|
||||||
async def convert_message(
|
async def _convert_message(
|
||||||
message: Union[Message, List[Message], List[str], str, bytes]
|
message: Union[Message, str, bytes]
|
||||||
) -> List[Message]:
|
) -> List[Message]:
|
||||||
if isinstance(message, Message):
|
if isinstance(message, Message):
|
||||||
message = [message]
|
if message.type == 'image' and pclient is not None:
|
||||||
|
img_text: str = message.data # type: ignore
|
||||||
|
bio = BytesIO(b64decode(img_text[9:]))
|
||||||
|
img = Image.open(bio)
|
||||||
|
img_url = await pclient.upload(f'{uuid.uuid4()}.jpg', bio)
|
||||||
|
_message = [
|
||||||
|
MessageSegment.image(img_url if img_url else img_text),
|
||||||
|
MessageSegment.image_size(img.size),
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
_message = [message]
|
||||||
elif isinstance(message, str):
|
elif isinstance(message, str):
|
||||||
if message.startswith('base64://'):
|
if message.startswith('base64://'):
|
||||||
bio = BytesIO(b64decode(message[9:]))
|
bio = BytesIO(b64decode(message[9:]))
|
||||||
@ -177,12 +187,12 @@ async def convert_message(
|
|||||||
if pclient is not None:
|
if pclient is not None:
|
||||||
img_url = await pclient.upload(f'{uuid.uuid4()}.jpg', bio)
|
img_url = await pclient.upload(f'{uuid.uuid4()}.jpg', bio)
|
||||||
|
|
||||||
message = [
|
_message = [
|
||||||
MessageSegment.image(img_url if img_url else message),
|
MessageSegment.image(img_url if img_url else message),
|
||||||
MessageSegment.image_size(img.size),
|
MessageSegment.image_size(img.size),
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
message = [MessageSegment.text(message)]
|
_message = [MessageSegment.text(message)]
|
||||||
elif isinstance(message, bytes):
|
elif isinstance(message, bytes):
|
||||||
bio = BytesIO(message)
|
bio = BytesIO(message)
|
||||||
img = Image.open(bio)
|
img = Image.open(bio)
|
||||||
@ -191,17 +201,27 @@ async def convert_message(
|
|||||||
if pclient is not None:
|
if pclient is not None:
|
||||||
img_url = await pclient.upload(f'{uuid.uuid4()}.jpg', bio)
|
img_url = await pclient.upload(f'{uuid.uuid4()}.jpg', bio)
|
||||||
|
|
||||||
message = [
|
_message = [
|
||||||
MessageSegment.image(img_url if img_url else message),
|
MessageSegment.image(img_url if img_url else message),
|
||||||
MessageSegment.image_size(img.size),
|
MessageSegment.image_size(img.size),
|
||||||
]
|
]
|
||||||
elif isinstance(message, List):
|
|
||||||
if all(isinstance(x, str) for x in message):
|
|
||||||
message = [MessageSegment.node(message)]
|
|
||||||
else:
|
else:
|
||||||
message = [message]
|
_message = [message]
|
||||||
|
return _message
|
||||||
|
|
||||||
_message: List[Message] = message # type: ignore
|
|
||||||
|
async def convert_message(
|
||||||
|
message: Union[Message, List[Message], List[str], str, bytes]
|
||||||
|
) -> List[Message]:
|
||||||
|
_message: List[Message] = []
|
||||||
|
if isinstance(message, List):
|
||||||
|
if all(isinstance(x, str) for x in message):
|
||||||
|
_message.extend([MessageSegment.node(message)])
|
||||||
|
else:
|
||||||
|
for i in message:
|
||||||
|
_message.extend(await _convert_message(i))
|
||||||
|
else:
|
||||||
|
_message = await _convert_message(message)
|
||||||
|
|
||||||
if R_enabled:
|
if R_enabled:
|
||||||
result = ''.join(
|
result = ''.join(
|
||||||
@ -223,8 +243,12 @@ async def convert_message(
|
|||||||
return _message
|
return _message
|
||||||
|
|
||||||
|
|
||||||
async def to_markdown(message: List[Message]) -> str:
|
async def to_markdown(
|
||||||
|
message: List[Message],
|
||||||
|
buttons: Optional[Union[List[Button], List[List[Button]]]] = None,
|
||||||
|
) -> List[Message]:
|
||||||
_markdown_list = []
|
_markdown_list = []
|
||||||
|
_message = []
|
||||||
url = None
|
url = None
|
||||||
size = None
|
size = None
|
||||||
for m in message:
|
for m in message:
|
||||||
@ -235,9 +259,12 @@ async def to_markdown(message: List[Message]) -> str:
|
|||||||
elif m.type == 'text':
|
elif m.type == 'text':
|
||||||
assert isinstance(m.data, str)
|
assert isinstance(m.data, str)
|
||||||
_markdown_list.append(m.data.replace('\n', '\n\n'))
|
_markdown_list.append(m.data.replace('\n', '\n\n'))
|
||||||
|
else:
|
||||||
|
_message.append(m)
|
||||||
|
|
||||||
if url is not None and size is not None:
|
if url is not None and size is not None:
|
||||||
_markdown_list.append(f'![test #{size[0]}px #{size[1]}px]({url})')
|
_markdown_list.append(f'![test #{size[0]}px #{size[1]}px]({url})')
|
||||||
|
|
||||||
_markdown = '\n'.join(_markdown_list)
|
_markdown = '\n'.join(_markdown_list)
|
||||||
return _markdown
|
_message.extend(MessageSegment.markdown(_markdown, buttons))
|
||||||
|
return _message
|
||||||
|
Loading…
x
Reference in New Issue
Block a user