mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-02 09:26:12 +08:00
parent
1cbf53363b
commit
5fc5e292c4
@ -1,7 +1,8 @@
|
||||
import reprlib
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import fields, dataclass
|
||||
|
||||
from nonebot.log import logger
|
||||
from nonebot_plugin_saa import MessageSegmentFactory
|
||||
@ -82,3 +83,27 @@ class Post(AbstractPost):
|
||||
continue
|
||||
else:
|
||||
raise ThemeRenderError(f"No theme can render Post of {self.platform.__class__.__name__}")
|
||||
|
||||
def __str__(self) -> str:
|
||||
aRepr = reprlib.Repr()
|
||||
aRepr.maxstring = 100
|
||||
|
||||
post_format = f"""## Post: {id(self):X} ##
|
||||
|
||||
{self.content if len(self.content) < 200 else self.content[:200] + '...'}
|
||||
|
||||
来源: <Platform {self.platform.platform_name}>
|
||||
"""
|
||||
post_format += "附加信息:\n"
|
||||
for field in fields(self):
|
||||
if field.name in ("content", "platform", "repost"):
|
||||
continue
|
||||
value = getattr(self, field.name)
|
||||
if value is not None:
|
||||
post_format += f"- {field.name}: {aRepr.repr(value)}\n"
|
||||
|
||||
if self.repost:
|
||||
post_format += "\n转发:\n"
|
||||
post_format += str(self.repost)
|
||||
|
||||
return post_format
|
||||
|
@ -24,8 +24,8 @@ def mock_platform(app: App):
|
||||
from nonebot_bison.platform.platform import NewMessage
|
||||
|
||||
class MockPlatform(NewMessage):
|
||||
platform_name = "mock_platform"
|
||||
name = "Mock Platform"
|
||||
platform_name = "mock-platform"
|
||||
name = "Mock-Platform"
|
||||
enabled = True
|
||||
is_common = True
|
||||
schedule_interval = 10
|
||||
@ -37,7 +37,7 @@ def mock_platform(app: App):
|
||||
|
||||
@classmethod
|
||||
async def get_target_name(cls, client, _: "Target"):
|
||||
return "MockPlatform"
|
||||
return "MockPlatformTarget"
|
||||
|
||||
def get_id(self, post: "RawPost") -> Any:
|
||||
return post["id"]
|
||||
@ -50,7 +50,7 @@ def mock_platform(app: App):
|
||||
self,
|
||||
raw_post["text"],
|
||||
url="http://t.tt/" + str(self.get_id(raw_post)),
|
||||
nickname="Mock",
|
||||
nickname="MockNick",
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@ -64,6 +64,102 @@ def mock_platform(app: App):
|
||||
return MockPlatform
|
||||
|
||||
|
||||
async def test_display(mock_platform):
|
||||
from nonebot_bison.post import Post
|
||||
|
||||
post = Post(
|
||||
mock_platform,
|
||||
"Rebum delenit iusto augue in rebum sanctus diam stet clita voluptua amet tempor sea in.\n"
|
||||
"Vel ullamcorper dolore clita eos amet tempor velit amet in.\n"
|
||||
"Vero hendrerit vero diam et lorem blandit ex diam ex amet.\n"
|
||||
"Voluptua et sed diam erat et diam lorem lorem no euismod sadipscing rebum feugiat est elitr autem.\n",
|
||||
title="Ipsum consectetuer voluptua eirmod aliquyam dolore eu volutpat ipsum ipsum eirmod nulla.",
|
||||
images=[
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89",
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89",
|
||||
],
|
||||
timestamp=1612345678,
|
||||
url="http://t.tt/diam-duo-autem-sed-sadipscing-invidunt",
|
||||
avatar=(
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89"
|
||||
),
|
||||
nickname="Mock",
|
||||
description="Labore amet ut invidunt dolor consectetuer ipsum sadipscing sed minim diam rebum justo tincidunt.",
|
||||
)
|
||||
assert str(post) == rf"""## Post: {id(post):X} ##
|
||||
|
||||
Rebum delenit iusto augue in rebum sanctus diam stet clita voluptua amet tempor sea in.
|
||||
Vel ullamcorper dolore clita eos amet tempor velit amet in.
|
||||
Vero hendrerit vero diam et lorem blandit ex diam ex...
|
||||
|
||||
来源: <Platform mock-platform>
|
||||
附加信息:
|
||||
- compress: False
|
||||
- title: 'Ipsum consectetuer voluptua eirmod aliquyam dolore eu volutpat ipsum ipsum eirmod nulla.'
|
||||
- images: [b'\x89PNG\r\n...f\x15\xc4\x89', b'\x89PNG\r\n...f\x15\xc4\x89']
|
||||
- timestamp: 1612345678
|
||||
- url: 'http://t.tt/diam-duo-autem-sed-sadipscing-invidunt'
|
||||
- avatar: b'\x89PNG\r\n...f\x15\xc4\x89'
|
||||
- nickname: 'Mock'
|
||||
- description: 'Labore amet ut invidunt dolor consectetuer ipsum sadipscing sed minim diam rebum justo tincidunt.'
|
||||
""" # noqa: E501
|
||||
post2 = Post(
|
||||
mock_platform,
|
||||
"Rebum delenit iusto augue in rebum sanctus diam stet clita voluptua amet tempor sea in.\n"
|
||||
"Vel ullamcorper dolore clita eos amet tempor velit amet in.\n"
|
||||
"Vero hendrerit vero diam et lorem blandit ex diam ex amet.\n"
|
||||
"Voluptua et sed diam erat et diam lorem lorem no euismod sadipscing rebum feugiat est elitr autem.\n",
|
||||
title="Ipsum consectetuer voluptua eirmod aliquyam dolore eu volutpat ipsum ipsum eirmod nulla.",
|
||||
images=[
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89",
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89",
|
||||
],
|
||||
timestamp=1612345678,
|
||||
url="http://t.tt/diam-duo-autem-sed-sadipscing-invidunt",
|
||||
avatar=(
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89"
|
||||
),
|
||||
nickname="Mock2",
|
||||
description="Labore amet ut invidunt dolor consectetuer ipsum sadipscing sed minim diam rebum justo tincidunt.",
|
||||
repost=post,
|
||||
)
|
||||
assert str(post2) == rf"""## Post: {id(post2):X} ##
|
||||
|
||||
Rebum delenit iusto augue in rebum sanctus diam stet clita voluptua amet tempor sea in.
|
||||
Vel ullamcorper dolore clita eos amet tempor velit amet in.
|
||||
Vero hendrerit vero diam et lorem blandit ex diam ex...
|
||||
|
||||
来源: <Platform mock-platform>
|
||||
附加信息:
|
||||
- compress: False
|
||||
- title: 'Ipsum consectetuer voluptua eirmod aliquyam dolore eu volutpat ipsum ipsum eirmod nulla.'
|
||||
- images: [b'\x89PNG\r\n...f\x15\xc4\x89', b'\x89PNG\r\n...f\x15\xc4\x89']
|
||||
- timestamp: 1612345678
|
||||
- url: 'http://t.tt/diam-duo-autem-sed-sadipscing-invidunt'
|
||||
- avatar: b'\x89PNG\r\n...f\x15\xc4\x89'
|
||||
- nickname: 'Mock2'
|
||||
- description: 'Labore amet ut invidunt dolor consectetuer ipsum sadipscing sed minim diam rebum justo tincidunt.'
|
||||
|
||||
转发:
|
||||
## Post: {id(post):X} ##
|
||||
|
||||
Rebum delenit iusto augue in rebum sanctus diam stet clita voluptua amet tempor sea in.
|
||||
Vel ullamcorper dolore clita eos amet tempor velit amet in.
|
||||
Vero hendrerit vero diam et lorem blandit ex diam ex...
|
||||
|
||||
来源: <Platform mock-platform>
|
||||
附加信息:
|
||||
- compress: False
|
||||
- title: 'Ipsum consectetuer voluptua eirmod aliquyam dolore eu volutpat ipsum ipsum eirmod nulla.'
|
||||
- images: [b'\x89PNG\r\n...f\x15\xc4\x89', b'\x89PNG\r\n...f\x15\xc4\x89']
|
||||
- timestamp: 1612345678
|
||||
- url: 'http://t.tt/diam-duo-autem-sed-sadipscing-invidunt'
|
||||
- avatar: b'\x89PNG\r\n...f\x15\xc4\x89'
|
||||
- nickname: 'Mock'
|
||||
- description: 'Labore amet ut invidunt dolor consectetuer ipsum sadipscing sed minim diam rebum justo tincidunt.'
|
||||
"""
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_generate_msg(mock_platform):
|
||||
from nonebot_plugin_saa import Text, Image
|
||||
@ -77,7 +173,7 @@ async def test_generate_msg(mock_platform):
|
||||
res = await post.generate()
|
||||
assert len(res) == 1
|
||||
assert isinstance(res[0], Text)
|
||||
assert str(res[0]) == "p1\n来源: Mock Platform Mock\n详情: http://t.tt/1"
|
||||
assert str(res[0]) == "p1\n来源: Mock-Platform MockNick\n详情: http://t.tt/1"
|
||||
|
||||
post.platform.default_theme = "ht2i"
|
||||
assert post.get_config_theme() is None
|
||||
|
Loading…
x
Reference in New Issue
Block a user