mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-12 06:55:49 +08:00
✨ 增强的MessageSegment
字段
This commit is contained in:
parent
1a6cd1dea3
commit
44b312a492
@ -1,4 +1,5 @@
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
from pathlib import Path
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
from typing import List, Union, Literal
|
from typing import List, Union, Literal
|
||||||
|
|
||||||
@ -12,7 +13,7 @@ class MessageSegment:
|
|||||||
return [self, other]
|
return [self, other]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def image(img: Union[str, Image.Image, bytes]) -> Message:
|
def image(img: Union[str, Image.Image, bytes, Path]) -> Message:
|
||||||
if isinstance(img, Image.Image):
|
if isinstance(img, Image.Image):
|
||||||
img = img.convert('RGB')
|
img = img.convert('RGB')
|
||||||
result_buffer = BytesIO()
|
result_buffer = BytesIO()
|
||||||
@ -20,6 +21,9 @@ class MessageSegment:
|
|||||||
img = result_buffer.getvalue()
|
img = result_buffer.getvalue()
|
||||||
elif isinstance(img, bytes):
|
elif isinstance(img, bytes):
|
||||||
pass
|
pass
|
||||||
|
elif isinstance(img, Path):
|
||||||
|
with open(str(img), 'rb') as fp:
|
||||||
|
img = fp.read()
|
||||||
else:
|
else:
|
||||||
if img.startswith('base64://'):
|
if img.startswith('base64://'):
|
||||||
return Message(type='image', data=img)
|
return Message(type='image', data=img)
|
||||||
@ -37,13 +41,41 @@ class MessageSegment:
|
|||||||
return Message(type='at', data=user)
|
return Message(type='at', data=user)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def node(content_list: List[Message]) -> Message:
|
def node(
|
||||||
return Message(type='node', data=content_list)
|
content_list: Union[List[Message], List[str], List[bytes]]
|
||||||
|
) -> Message:
|
||||||
|
msg_list: List[Message] = []
|
||||||
|
for msg in content_list:
|
||||||
|
if isinstance(msg, Message):
|
||||||
|
msg_list.append(msg)
|
||||||
|
elif isinstance(msg, bytes):
|
||||||
|
msg_list.append(MessageSegment.image(msg))
|
||||||
|
else:
|
||||||
|
if msg.startswith('base64://'):
|
||||||
|
msg_list.append(Message(type='image', data=msg))
|
||||||
|
else:
|
||||||
|
msg_list.append(MessageSegment.text(msg))
|
||||||
|
return Message(type='node', data=msg_list)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def record(content: str) -> Message:
|
def record(content: str) -> Message:
|
||||||
return Message(type='record', data=content)
|
return Message(type='record', data=content)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def file(content: Union[Path, str, bytes], file_name: str) -> Message:
|
||||||
|
if isinstance(content, Path):
|
||||||
|
with open(str(content), 'rb') as fp:
|
||||||
|
file = fp.read()
|
||||||
|
elif isinstance(content, bytes):
|
||||||
|
file = content
|
||||||
|
else:
|
||||||
|
with open(content, 'rb') as fp:
|
||||||
|
file = fp.read()
|
||||||
|
return Message(
|
||||||
|
type='file',
|
||||||
|
data=f'{file_name}|base64://{b64encode(file).decode()}',
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def log(
|
def log(
|
||||||
type: Literal['INFO', 'WARNING', 'ERROR', 'SUCCESS'], content: str
|
type: Literal['INFO', 'WARNING', 'ERROR', 'SUCCESS'], content: str
|
||||||
|
12
poetry.lock
generated
12
poetry.lock
generated
@ -902,14 +902,14 @@ socks = ["socksio (>=1.0.0,<2.0.0)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "identify"
|
name = "identify"
|
||||||
version = "2.5.19"
|
version = "2.5.20"
|
||||||
description = "File identification library for Python"
|
description = "File identification library for Python"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "identify-2.5.19-py2.py3-none-any.whl", hash = "sha256:3ee3533e7f6f5023157fbebbd5687bb4b698ce6f305259e0d24b2d7d9efb72bc"},
|
{file = "identify-2.5.20-py2.py3-none-any.whl", hash = "sha256:5dfef8a745ca4f2c95f27e9db74cb4c8b6d9916383988e8791f3595868f78a33"},
|
||||||
{file = "identify-2.5.19.tar.gz", hash = "sha256:4102ecd051f6884449e7359e55b38ba6cd7aafb6ef27b8e2b38495a5723ea106"},
|
{file = "identify-2.5.20.tar.gz", hash = "sha256:c8b288552bc5f05a08aff09af2f58e6976bf8ac87beb38498a0e3d98ba64eb18"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@ -1320,14 +1320,14 @@ websockets = ["websockets (>=10.0,<11.0)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openpyxl"
|
name = "openpyxl"
|
||||||
version = "3.1.1"
|
version = "3.1.2"
|
||||||
description = "A Python library to read/write Excel 2010 xlsx/xlsm files"
|
description = "A Python library to read/write Excel 2010 xlsx/xlsm files"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
{file = "openpyxl-3.1.1-py2.py3-none-any.whl", hash = "sha256:a0266e033e65f33ee697254b66116a5793c15fc92daf64711080000df4cfe0a8"},
|
{file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"},
|
||||||
{file = "openpyxl-3.1.1.tar.gz", hash = "sha256:f06d44e2c973781068bce5ecf860a09bcdb1c7f5ce1facd5e9aa82c92c93ae72"},
|
{file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -33,7 +33,7 @@ msgspec==0.13.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.
|
|||||||
multidict==6.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
multidict==6.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
nonebot-plugin-apscheduler==0.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
nonebot-plugin-apscheduler==0.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
nonebot2==2.0.0rc3 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
nonebot2==2.0.0rc3 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
openpyxl==3.1.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
openpyxl==3.1.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
passlib==1.7.4 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
passlib==1.7.4 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
pillow==9.4.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
pillow==9.4.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
pydantic==1.10.6 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
pydantic==1.10.6 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user