59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
"""WebSocket 事件类型定义"""
|
|
|
|
from enum import Enum
|
|
from pydantic import BaseModel
|
|
from datetime import datetime
|
|
|
|
|
|
class EventType(str, Enum):
|
|
# 客户端 -> 服务端
|
|
CHAT_SEND = "chat.send"
|
|
CHAT_TYPING = "chat.typing"
|
|
CHAT_READ = "chat.read"
|
|
PRESENCE_UPDATE = "presence.update"
|
|
|
|
# 服务端 -> 客户端
|
|
CHAT_MESSAGE = "chat.message"
|
|
CHAT_TYPING_INDICATOR = "chat.typing"
|
|
CHAT_READ_RECEIPT = "chat.read"
|
|
CHAT_MESSAGE_DELETED = "chat.message_deleted"
|
|
CONVERSATION_UPDATED = "conversation.updated"
|
|
CONVERSATION_MEMBER_ADDED = "conversation.member_added"
|
|
CONVERSATION_MEMBER_REMOVED = "conversation.member_removed"
|
|
FRIEND_REQUEST = "friend.request"
|
|
FRIEND_ACCEPTED = "friend.accepted"
|
|
PRESENCE_ONLINE = "presence.online"
|
|
PRESENCE_OFFLINE = "presence.offline"
|
|
ERROR = "error"
|
|
|
|
|
|
class WSEvent(BaseModel):
|
|
"""WebSocket 事件信封"""
|
|
type: str
|
|
data: dict
|
|
timestamp: str | None = None
|
|
|
|
|
|
class ChatSendData(BaseModel):
|
|
"""发送消息数据"""
|
|
conversation_id: str
|
|
content: str
|
|
type: str = "text"
|
|
reply_to_id: str | None = None
|
|
|
|
|
|
class ChatTypingData(BaseModel):
|
|
"""输入中数据"""
|
|
conversation_id: str
|
|
|
|
|
|
class ChatReadData(BaseModel):
|
|
"""已读数据"""
|
|
conversation_id: str
|
|
message_id: str
|
|
|
|
|
|
class PresenceUpdateData(BaseModel):
|
|
"""在线状态更新"""
|
|
status: str # online / offline / away
|