from io import BytesIO from pathlib import Path from typing import Optional, Union from nonebot.adapters.onebot.v11.message import Message, MessageSegment class MessageBuilder(Message): def at(self, user_id: Union[int, str]) -> "MessageBuilder": self.append(MessageSegment.at(user_id)) return self def face(self, id_: int) -> "MessageBuilder": self.append(MessageSegment.face(id_)) return self def image( self, file: Union[str, bytes, BytesIO, Path], type_: Optional[str] = None, cache: bool = True, proxy: bool = True, timeout: Optional[int] = None, ) -> "MessageBuilder": self.append(MessageSegment.image(file, type_, cache, proxy, timeout)) return self def reply(self, id_: int) -> "MessageBuilder": self.append(MessageSegment.reply(id_)) return self def text(self, text: str) -> "MessageBuilder": if self[-1].type == "text": text = "\n" + text self.append(MessageSegment.text(text)) return self def done(self) -> str: return str().join(map(str, self))