nonebot.adapters.matrix.api.model 源代码

from __future__ import annotations

from typing import Any

from pydantic import BaseModel, ConfigDict, Field

from .types import DeviceId, EventId, MxcUri, RoomId, UserId


[文档] class MatrixBaseModel(BaseModel): model_config = ConfigDict( extra="allow", populate_by_name=True, arbitrary_types_allowed=True )
[文档] class MatrixError(MatrixBaseModel): errcode: str | None = None error: str | None = None retry_after_ms: int | None = None
[文档] class File(MatrixBaseModel): filename: str content: bytes content_type: str | None = None
[文档] class LoginIdentifier(MatrixBaseModel): type: str = "m.id.user" user: str | None = None medium: str | None = None address: str | None = None country: str | None = None phone: str | None = None
[文档] class PasswordLoginRequest(MatrixBaseModel): type: str = "m.login.password" identifier: LoginIdentifier | None = None user: str | None = None password: str device_id: DeviceId | None = None initial_device_display_name: str | None = None refresh_token: bool | None = None
[文档] class LoginResponse(MatrixBaseModel): user_id: UserId access_token: str | None = None device_id: DeviceId | None = None well_known: dict[str, Any] | None = Field(default=None, alias="well_known") expires_in_ms: int | None = None refresh_token: str | None = None
[文档] class RefreshTokenRequest(MatrixBaseModel): refresh_token: str
[文档] class RefreshTokenResponse(MatrixBaseModel): access_token: str | None = None refresh_token: str | None = None expires_in_ms: int | None = None
[文档] class LoginFlow(MatrixBaseModel): type: str
[文档] class LoginFlowsResponse(MatrixBaseModel): flows: list[LoginFlow] = Field(default_factory=list)
[文档] class WhoamiResponse(MatrixBaseModel): user_id: UserId device_id: DeviceId | None = None is_guest: bool | None = None
[文档] class EventIdResponse(MatrixBaseModel): event_id: EventId
[文档] class UploadResponse(MatrixBaseModel): content_uri: MxcUri
[文档] class MediaConfigResponse(MatrixBaseModel): upload_size: int | None = Field(default=None, alias="m.upload.size")
[文档] class UnsignedData(MatrixBaseModel): age: int | None = None membership: str | None = None prev_content: dict[str, Any] | None = None redacted_because: dict[str, Any] | None = None transaction_id: str | None = None relations: dict[str, Any] | None = Field(default=None, alias="m.relations")
[文档] class RawMatrixEvent(MatrixBaseModel): type: str content: dict[str, Any] = Field(default_factory=dict) event_id: EventId | None = None sender: UserId | None = None room_id: RoomId | None = None origin_server_ts: int | None = None state_key: str | None = None redacts: EventId | None = None unsigned: UnsignedData | dict[str, Any] | None = None
[文档] class Timeline(MatrixBaseModel): events: list[RawMatrixEvent] = Field(default_factory=list) limited: bool | None = None prev_batch: str | None = None
[文档] class State(MatrixBaseModel): events: list[RawMatrixEvent] = Field(default_factory=list)
class Ephemeral(MatrixBaseModel): events: list[RawMatrixEvent] = Field(default_factory=list)
[文档] class AccountData(MatrixBaseModel): events: list[RawMatrixEvent] = Field(default_factory=list)
[文档] class JoinedRoomSync(MatrixBaseModel): timeline: Timeline = Field(default_factory=Timeline) state: State = Field(default_factory=State) ephemeral: Ephemeral = Field(default_factory=Ephemeral) account_data: AccountData = Field(default_factory=AccountData) summary: dict[str, Any] | None = None unread_notifications: dict[str, Any] | None = None
[文档] class InvitedRoomSync(MatrixBaseModel): invite_state: State = Field(default_factory=State)
[文档] class LeftRoomSync(MatrixBaseModel): timeline: Timeline = Field(default_factory=Timeline) state: State = Field(default_factory=State) account_data: AccountData = Field(default_factory=AccountData)
[文档] class RoomsSync(MatrixBaseModel): join: dict[RoomId, JoinedRoomSync] = Field(default_factory=dict) invite: dict[RoomId, InvitedRoomSync] = Field(default_factory=dict) leave: dict[RoomId, LeftRoomSync] = Field(default_factory=dict)
[文档] class PresenceSync(MatrixBaseModel): events: list[RawMatrixEvent] = Field(default_factory=list)
[文档] class DeviceLists(MatrixBaseModel): changed: list[UserId] = Field(default_factory=list) left: list[UserId] = Field(default_factory=list)
[文档] class SyncResponse(MatrixBaseModel): next_batch: str rooms: RoomsSync = Field(default_factory=RoomsSync) presence: PresenceSync = Field(default_factory=PresenceSync) account_data: AccountData = Field(default_factory=AccountData) device_lists: DeviceLists | None = None to_device: AccountData | None = None device_one_time_keys_count: dict[str, int] = Field(default_factory=dict) device_unused_fallback_key_types: list[str] | None = None
[文档] class RoomMessageContent(MatrixBaseModel): msgtype: str body: str format: str | None = None formatted_body: str | None = None url: MxcUri | str | None = None info: dict[str, Any] | None = None relates_to: dict[str, Any] | None = Field(default=None, alias="m.relates_to") mentions: dict[str, Any] | None = Field(default=None, alias="m.mentions")
[文档] class RoomMemberContent(MatrixBaseModel): membership: str displayname: str | None = None avatar_url: MxcUri | str | None = None reason: str | None = None is_direct: bool | None = None
[文档] class ReactionRelation(MatrixBaseModel): rel_type: str = "m.annotation" event_id: EventId key: str
[文档] class ReactionContent(MatrixBaseModel): relates_to: ReactionRelation = Field(alias="m.relates_to")
[文档] class RedactionContent(MatrixBaseModel): reason: str | None = None
[文档] class TypingContent(MatrixBaseModel): user_ids: list[UserId] = Field(default_factory=list) typing: bool | None = None timeout: int | None = None
[文档] class ReceiptThread(MatrixBaseModel): ts: int | None = None thread_id: str | None = None
ReceiptContent = dict[str, dict[str, dict[UserId, ReceiptThread | dict[str, Any]]]]
[文档] class MembersChunkResponse(MatrixBaseModel): chunk: list[RawMatrixEvent] = Field(default_factory=list)
[文档] class MessagesResponse(MatrixBaseModel): chunk: list[RawMatrixEvent] = Field(default_factory=list) start: str | None = None end: str | None = None state: list[RawMatrixEvent] = Field(default_factory=list)
[文档] class RelationsResponse(MatrixBaseModel): chunk: list[RawMatrixEvent] = Field(default_factory=list) next_batch: str | None = None prev_batch: str | None = None
[文档] class JoinRoomResponse(MatrixBaseModel): room_id: RoomId
[文档] class LeaveRoomResponse(MatrixBaseModel): room_id: RoomId | None = None
[文档] class RoomStateResponse(MatrixBaseModel): events: list[RawMatrixEvent] = Field(default_factory=list)
[文档] class CreateRoomResponse(MatrixBaseModel): room_id: RoomId
# ------------------------------------------------------------------ # E2EE 模型: m.room.encrypted 事件和 to-device 密钥消息 # ------------------------------------------------------------------
[文档] class MegolmEncryptedEventContent(MatrixBaseModel): """Room ``m.megolm.v1.aes-sha2`` event content.""" algorithm: str ciphertext: str sender_key: str session_id: str device_id: str | None = None
[文档] class OlmEncryptedEventContent(MatrixBaseModel): """To-device ``m.olm.v1.curve25519-aes-sha2`` event content.""" algorithm: str sender_key: str ciphertext: dict[str, dict[str, Any]]
# Kept as a convenient import for callers that only need a generic encrypted # event type. Validation uses the more precise models above at protocol edges. EncryptedEventContent = MegolmEncryptedEventContent
[文档] class RoomKeyContent(MatrixBaseModel): """m.room_key to-device 消息的内容。 用于在设备间共享 Megolm 会话密钥。 """ algorithm: str room_id: str session_id: str session_key: str sender_key: str | None = None sender_claimed_ed25519_key: str | None = None forwarding_curve25519_key_chain: list[str] = Field(default_factory=list)
[文档] class ForwardedRoomKeyContent(MatrixBaseModel): """m.forwarded_room_key to-device 消息的内容。 包含额外的转发链信息。 """ algorithm: str room_id: str session_id: str session_key: str sender_key: str sender_claimed_ed25519_key: str forwarding_curve25519_chain: list[str] = Field(default_factory=list)
__all__ = ( "AccountData", "CreateRoomResponse", "DeviceLists", "EncryptedEventContent", "EventIdResponse", "File", "ForwardedRoomKeyContent", "InvitedRoomSync", "JoinRoomResponse", "JoinedRoomSync", "LeaveRoomResponse", "LeftRoomSync", "LoginFlow", "LoginFlowsResponse", "LoginIdentifier", "LoginResponse", "MatrixBaseModel", "MatrixError", "MediaConfigResponse", "MegolmEncryptedEventContent", "MembersChunkResponse", "MessagesResponse", "OlmEncryptedEventContent", "PasswordLoginRequest", "PresenceSync", "RawMatrixEvent", "ReactionContent", "ReactionRelation", "ReceiptContent", "ReceiptThread", "RedactionContent", "RefreshTokenRequest", "RefreshTokenResponse", "RelationsResponse", "RoomKeyContent", "RoomMemberContent", "RoomMessageContent", "RoomStateResponse", "RoomsSync", "State", "SyncResponse", "Timeline", "TypingContent", "UnsignedData", "UploadResponse", "WhoamiResponse", )