melobot.adapter.content 源代码
from __future__ import annotations
import mimetypes
from typing_extensions import Hashable, Sequence, TypeVar
[文档]
class Content:
"""通用内容基类"""
ContentT = TypeVar("ContentT", bound=Content)
[文档]
class TextContent(Content):
"""文本内容"""
[文档]
def __init__(self, text: str) -> None:
"""初始化文本内容
:param text: 文本
"""
super().__init__()
self.text = text
[文档]
class MediaContent(Content):
"""多媒体内容"""
[文档]
def __init__(
self,
*,
name: str,
url: str | None = None,
raw: bytes | None = None,
mimetype: str | None = None,
) -> None:
"""初始化多媒体内容
:param name: 多媒体内容的名称
:param raw: 多媒体内容的二进制内容
:param url: 多媒体内容的网络地址(和 `raw` 参数二选一)
:param mimetype: 多媒体内容的 mimetype,为空则根据 `name` 自动检测
"""
super().__init__()
self.name = name
self.url = url
self.val = raw if raw is not None else None
if mimetype is None:
self.mimetype, _ = mimetypes.guess_type(self.name)
[文档]
class ImageContent(MediaContent):
"""图像内容,初始化方法参考基类"""
[文档]
class AudioContent(MediaContent):
"""音频内容,初始化方法参考基类"""
[文档]
class VoiceContent(AudioContent):
"""语音内容,初始化方法参考基类"""
[文档]
class VideoContent(MediaContent):
"""视频内容,初始化方法参考基类"""
[文档]
class FileContent(Content):
"""文件内容"""
[文档]
def __init__(self, name: str, flag: Hashable) -> None:
"""初始化文件内容
:param name: 文件名
:param flag: 文件的唯一标记
"""
super().__init__()
self.flag = flag
self.name = name
def __repr__(self) -> str:
return f"[melobot File: {self.name} at {self.flag}]"
[文档]
class ReferContent(Content):
"""引用内容"""
[文档]
def __init__(self, prompt: str, flag: Hashable, contents: Sequence[Content]) -> None:
"""初始化引用内容
:param prompt: 引用的文本提示
:param flag: 引用的唯一标记
:param contents: 附加的通用内容序列
"""
super().__init__()
self.flag = flag
self.prompt = prompt
self.sub_contents = contents
def __repr__(self) -> str:
return f"[melobot Refer: {self.prompt} at {self.flag}]"
[文档]
class ResourceContent(Content):
"""资源内容"""
[文档]
def __init__(self, name: str, url: str) -> None:
"""初始化资源内容
:param name: 名称
:param url: 网络地址
"""
super().__init__()
self.url = url
self.name = name
def __repr__(self) -> str:
return f"[melobot Resource: {self.name} at {self.url}]"