mirror of https://github.com/Mai-with-u/MaiBot.git
先推上去
parent
9a3e8887af
commit
b80b5afe2a
|
|
@ -0,0 +1,27 @@
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from src.common.database.database_model import ChatSession
|
||||||
|
|
||||||
|
|
||||||
|
class MaiChatSession:
|
||||||
|
def __init__(self, session_id: str, platform: str, user_id: Optional[str] = None, group_id: Optional[str] = None):
|
||||||
|
self.session_id = session_id
|
||||||
|
self.platform = platform
|
||||||
|
self.user_id = user_id
|
||||||
|
self.group_id = group_id
|
||||||
|
|
||||||
|
# 验证字段
|
||||||
|
assert self.platform, "Platform must be provided"
|
||||||
|
assert self.user_id or self.group_id, "UserID 或 GroupID 必须提供其一"
|
||||||
|
|
||||||
|
# 其他字段初始化
|
||||||
|
self.is_group_session = bool(self.group_id)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_db_instance(cls, session: ChatSession):
|
||||||
|
return cls(
|
||||||
|
session_id=session.session_id,
|
||||||
|
platform=session.platform,
|
||||||
|
user_id=session.user_id,
|
||||||
|
group_id=session.group_id,
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,133 @@
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from maim_message import MessageBase
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import json
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from src.common.database.database_model import Messages
|
||||||
|
from src.common.data_models.message_component_model import MessageSequence
|
||||||
|
from src.common.utils.utils_message import MessageUtils
|
||||||
|
|
||||||
|
|
||||||
|
class BaseMAIMessageModel(ABC):
|
||||||
|
@classmethod
|
||||||
|
@abstractmethod
|
||||||
|
def from_db_instance(cls, message: "Messages"):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def to_db_instance(self) -> "Messages":
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def from_maim_message(cls, message: MessageBase):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def to_maim_message(self) -> MessageBase:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def parse_message_segments(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class UserInfo:
|
||||||
|
user_id: str
|
||||||
|
user_nickname: str
|
||||||
|
user_cardname: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class GroupInfo:
|
||||||
|
group_id: str
|
||||||
|
group_name: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MessageInfo:
|
||||||
|
user_info: UserInfo
|
||||||
|
group_info: Optional[GroupInfo] = None
|
||||||
|
additional_config: dict = field(default_factory=dict)
|
||||||
|
|
||||||
|
|
||||||
|
class MaiMessage(BaseMAIMessageModel):
|
||||||
|
def __init__(self, message_id: str, timestamp: datetime):
|
||||||
|
self.message_id: str = message_id
|
||||||
|
self.timestamp: datetime = timestamp # 时间戳
|
||||||
|
self.initialized = False # 用于标记是否已初始化其他属性
|
||||||
|
self.platform: str # 初始化后赋值
|
||||||
|
|
||||||
|
# 定义其他属性
|
||||||
|
self.message_info: MessageInfo # 初始化后赋值
|
||||||
|
self.is_mentioned: bool = False
|
||||||
|
self.is_at: bool = False
|
||||||
|
self.is_emoji: bool = False
|
||||||
|
self.is_picture: bool = False
|
||||||
|
self.is_command: bool = False
|
||||||
|
self.is_notify: bool = False
|
||||||
|
|
||||||
|
self.session_id: str
|
||||||
|
self.reply_to: Optional[str] = None
|
||||||
|
|
||||||
|
self.processed_plain_text: Optional[str] = None
|
||||||
|
self.display_message: Optional[str] = None
|
||||||
|
self.raw_message: MessageSequence
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_db_instance(cls, message: "Messages") -> "MaiMessage":
|
||||||
|
obj = cls(message_id=message.message_id, timestamp=message.timestamp)
|
||||||
|
|
||||||
|
user_info = UserInfo(message.user_id, message.user_nickname, message.user_cardname)
|
||||||
|
if message.group_id and message.group_name:
|
||||||
|
group_info = GroupInfo(message.group_id, message.group_name)
|
||||||
|
else:
|
||||||
|
group_info = None
|
||||||
|
obj.message_info = MessageInfo(
|
||||||
|
user_info=user_info,
|
||||||
|
group_info=group_info,
|
||||||
|
additional_config=json.loads(message.additional_config) if message.additional_config else {},
|
||||||
|
)
|
||||||
|
|
||||||
|
obj.is_mentioned = message.is_mentioned
|
||||||
|
obj.is_at = message.is_at
|
||||||
|
obj.is_emoji = message.is_emoji
|
||||||
|
obj.is_picture = message.is_picture
|
||||||
|
obj.is_command = message.is_command
|
||||||
|
obj.is_notify = message.is_notify
|
||||||
|
obj.reply_to = message.reply_to
|
||||||
|
obj.session_id = message.session_id
|
||||||
|
obj.processed_plain_text = message.processed_plain_text
|
||||||
|
obj.display_message = message.display_message
|
||||||
|
obj.raw_message = MessageUtils.from_db_record_msg_to_MaiSeq(message.raw_content)
|
||||||
|
return obj
|
||||||
|
|
||||||
|
def to_db_instance(self) -> Messages:
|
||||||
|
additional_config = (
|
||||||
|
json.dumps(self.message_info.additional_config) if self.message_info.additional_config else None
|
||||||
|
)
|
||||||
|
return Messages(
|
||||||
|
message_id=self.message_id,
|
||||||
|
timestamp=self.timestamp,
|
||||||
|
platform=self.platform,
|
||||||
|
user_id=self.message_info.user_info.user_id,
|
||||||
|
user_nickname=self.message_info.user_info.user_nickname,
|
||||||
|
user_cardname=self.message_info.user_info.user_cardname,
|
||||||
|
group_id=self.message_info.group_info.group_id if self.message_info.group_info else None,
|
||||||
|
group_name=self.message_info.group_info.group_name if self.message_info.group_info else None,
|
||||||
|
is_mentioned=self.is_mentioned,
|
||||||
|
is_at=self.is_at,
|
||||||
|
session_id=self.session_id,
|
||||||
|
reply_to=self.reply_to,
|
||||||
|
is_emoji=self.is_emoji,
|
||||||
|
is_picture=self.is_picture,
|
||||||
|
is_command=self.is_command,
|
||||||
|
is_notify=self.is_notify,
|
||||||
|
raw_content=MessageUtils.from_MaiSeq_to_db_record_msg(self.raw_message),
|
||||||
|
processed_plain_text=self.processed_plain_text,
|
||||||
|
display_message=self.display_message,
|
||||||
|
additional_config=additional_config,
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue