mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-07 12:23:00 +08:00
feat:基本完善了custom-post
This commit is contained in:
parent
6a04e9345d
commit
6da77e2404
@ -1,4 +1,4 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass, field
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from nonebot.adapters.onebot.v11.message import Message, MessageSegment
|
from nonebot.adapters.onebot.v11.message import Message, MessageSegment
|
||||||
@ -11,8 +11,8 @@ from .abstract_post import AbstractPost, BasePost
|
|||||||
@dataclass
|
@dataclass
|
||||||
class _CustomPost(BasePost):
|
class _CustomPost(BasePost):
|
||||||
|
|
||||||
message_segments: list[MessageSegment]
|
message_segments: list[MessageSegment] = field(default_factory=list)
|
||||||
css_path: str = "" # 模板文件所用css路径
|
css_path: str = None # 模板文件所用css路径
|
||||||
|
|
||||||
async def generate_text_messages(self) -> list[MessageSegment]:
|
async def generate_text_messages(self) -> list[MessageSegment]:
|
||||||
return self.message_segments
|
return self.message_segments
|
||||||
@ -21,9 +21,7 @@ class _CustomPost(BasePost):
|
|||||||
require("nonebot_plugin_htmlrender")
|
require("nonebot_plugin_htmlrender")
|
||||||
from nonebot_plugin_htmlrender import md_to_pic
|
from nonebot_plugin_htmlrender import md_to_pic
|
||||||
|
|
||||||
pic_bytes = await md_to_pic(
|
pic_bytes = await md_to_pic(md=self._generate_md(), css_path=self.css_path)
|
||||||
md=self._generate_md(), css_path=self._get_css_path()
|
|
||||||
)
|
|
||||||
return [MessageSegment.image(pic_bytes)]
|
return [MessageSegment.image(pic_bytes)]
|
||||||
|
|
||||||
def _generate_md(self) -> str:
|
def _generate_md(self) -> str:
|
||||||
@ -31,7 +29,7 @@ class _CustomPost(BasePost):
|
|||||||
|
|
||||||
for message_segment in self.message_segments:
|
for message_segment in self.message_segments:
|
||||||
if message_segment.type == "text":
|
if message_segment.type == "text":
|
||||||
md += "{}\n".format(message_segment.data.get("text", ""))
|
md += "{}<br>".format(message_segment.data.get("text", ""))
|
||||||
elif message_segment.type == "image":
|
elif message_segment.type == "image":
|
||||||
try:
|
try:
|
||||||
# 先尝试获取file的值,没有在尝试获取url的值,都没有则为空
|
# 先尝试获取file的值,没有在尝试获取url的值,都没有则为空
|
||||||
@ -49,15 +47,6 @@ class _CustomPost(BasePost):
|
|||||||
|
|
||||||
return md
|
return md
|
||||||
|
|
||||||
def _get_css_path(self):
|
|
||||||
"""返回css路径"""
|
|
||||||
css_path = (
|
|
||||||
str(Path(__file__).parent / "templates" / "custom_post.css")
|
|
||||||
if not self.css_path
|
|
||||||
else self.css_path
|
|
||||||
)
|
|
||||||
return css_path
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class CustomPost(_CustomPost, AbstractPost):
|
class CustomPost(_CustomPost, AbstractPost):
|
||||||
@ -68,6 +57,8 @@ class CustomPost(_CustomPost, AbstractPost):
|
|||||||
|
|
||||||
理论上text部分可以直接使用markdown语法, 例如 ###123
|
理论上text部分可以直接使用markdown语法, 例如 ###123
|
||||||
|
|
||||||
|
注意:list中的每一个text都会被解释为独立的一行文字
|
||||||
|
|
||||||
最后使用htmlrender渲染为图片
|
最后使用htmlrender渲染为图片
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -1,16 +1,14 @@
|
|||||||
|
import base64
|
||||||
|
import hashlib
|
||||||
|
import logging
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from nonebot.adapters.onebot.v11.message import MessageSegment
|
from nonebot.adapters.onebot.v11.message import MessageSegment
|
||||||
from nonebot_bison.post import custom_post
|
|
||||||
from nonebug.app import App
|
from nonebug.app import App
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def expect_md():
|
def ms_list():
|
||||||
return "【Zc】每早合约日替攻略!\n\n来源: Bilibili直播 魔法Zc目录\n\n详情: https://live.bilibili.com/3044248\n"
|
|
||||||
|
|
||||||
|
|
||||||
def test_gene_md(app: App):
|
|
||||||
|
|
||||||
msg_segments: list[MessageSegment] = []
|
msg_segments: list[MessageSegment] = []
|
||||||
msg_segments.append(MessageSegment.text("【Zc】每早合约日替攻略!"))
|
msg_segments.append(MessageSegment.text("【Zc】每早合约日替攻略!"))
|
||||||
msg_segments.append(
|
msg_segments.append(
|
||||||
@ -19,10 +17,41 @@ def test_gene_md(app: App):
|
|||||||
cache=0,
|
cache=0,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
msg_segments.append(MessageSegment.text("来源: Bilibili直播 魔法Zc目录\n "))
|
msg_segments.append(MessageSegment.text("来源: Bilibili直播 魔法Zc目录"))
|
||||||
msg_segments.append(MessageSegment.text("详情: https://live.bilibili.com/3044248"))
|
msg_segments.append(MessageSegment.text("详情: https://live.bilibili.com/3044248"))
|
||||||
|
|
||||||
cp = custom_post.CustomPost(message_segments=msg_segments)
|
return msg_segments
|
||||||
cp_md = cp._generate_md()
|
|
||||||
|
|
||||||
assert cp_md == expect_md()
|
|
||||||
|
@pytest.fixture
|
||||||
|
def pic_hash():
|
||||||
|
return "58723fdc24b473b6dbd8ec8cbc3b7e46160c83df"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def expect_md():
|
||||||
|
return "【Zc】每早合约日替攻略!<br>\n来源: Bilibili直播 魔法Zc目录\n\n详情: https://live.bilibili.com/3044248\n"
|
||||||
|
|
||||||
|
|
||||||
|
def test_gene_md(app: App, expect_md, ms_list):
|
||||||
|
from nonebot_bison.post.custom_post import CustomPost
|
||||||
|
|
||||||
|
cp = CustomPost(message_segments=ms_list)
|
||||||
|
cp_md = cp._generate_md()
|
||||||
|
assert cp_md == expect_md
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_gene_pic(app: App, ms_list, pic_hash):
|
||||||
|
from nonebot_bison.post.custom_post import CustomPost
|
||||||
|
|
||||||
|
cp = CustomPost(message_segments=ms_list)
|
||||||
|
cp_pic_bytes: list[MessageSegment] = await cp.generate_pic_messages()
|
||||||
|
|
||||||
|
pure_b64 = base64.b64decode(
|
||||||
|
cp_pic_bytes[0].data.get("file").replace("base64://", "")
|
||||||
|
)
|
||||||
|
sha1obj = hashlib.sha1()
|
||||||
|
sha1obj.update(pure_b64)
|
||||||
|
sha1hash = sha1obj.hexdigest()
|
||||||
|
assert sha1hash == pic_hash
|
||||||
|
Loading…
x
Reference in New Issue
Block a user