mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-04 02:26:11 +08:00
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from dataclasses import dataclass
|
|
from abc import ABC, abstractmethod
|
|
|
|
from nonebot_plugin_saa import Text, MessageFactory, MessageSegmentFactory
|
|
|
|
from ..utils import text_to_image
|
|
from ..plugin_config import plugin_config
|
|
|
|
|
|
@dataclass(kw_only=True)
|
|
class AbstractPost(ABC):
|
|
compress: bool = False
|
|
extra_msg: list[MessageFactory] | None = None
|
|
|
|
@abstractmethod
|
|
async def generate(self) -> list[MessageSegmentFactory]:
|
|
"Generate MessageSegmentFactory list from this instance"
|
|
...
|
|
|
|
async def generate_messages(self) -> list[MessageFactory]:
|
|
"really call to generate messages"
|
|
msg_segments = await self.generate()
|
|
msg_segments = await self.message_segments_process(msg_segments)
|
|
msgs = await self.message_process(msg_segments)
|
|
return msgs
|
|
|
|
async def message_segments_process(self, msg_segments: list[MessageSegmentFactory]) -> list[MessageSegmentFactory]:
|
|
"generate message segments and process them"
|
|
|
|
async def convert(msg: MessageSegmentFactory) -> MessageSegmentFactory:
|
|
if isinstance(msg, Text):
|
|
return await text_to_image(msg)
|
|
else:
|
|
return msg
|
|
|
|
if plugin_config.bison_use_pic:
|
|
return [await convert(msg) for msg in msg_segments]
|
|
|
|
return msg_segments
|
|
|
|
async def message_process(self, msg_segments: list[MessageSegmentFactory]) -> list[MessageFactory]:
|
|
"generate messages and process them"
|
|
if self.compress:
|
|
msgs = [MessageFactory(msg_segments)]
|
|
else:
|
|
msgs = [MessageFactory(msg_segment) for msg_segment in msg_segments]
|
|
|
|
if self.extra_msg:
|
|
msgs.extend(self.extra_msg)
|
|
|
|
return msgs
|