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