Files
Mofox-Core/src/plugin_system/base/base_chatter.py

75 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from abc import ABC, abstractmethod
from typing import TYPE_CHECKING, ClassVar
from src.common.data_models.message_manager_data_model import StreamContext
from src.plugin_system.base.component_types import ChatterInfo, ComponentType
from .component_types import ChatType
if TYPE_CHECKING:
from src.chat.planner_actions.action_manager import ChatterActionManager
class BaseChatter(ABC):
chatter_name: str = ""
"""Chatter组件名称"""
chatter_description: str = ""
"""Chatter组件描述"""
chat_types: ClassVar[list[ChatType]] = [ChatType.PRIVATE, ChatType.GROUP]
def __init__(self, stream_id: str, action_manager: "ChatterActionManager", plugin_config: dict | None = None):
"""
初始化聊天处理器
Args:
stream_id: 聊天流ID
action_manager: 动作管理器
plugin_config: 插件配置字典
"""
self.stream_id = stream_id
self.action_manager = action_manager
if plugin_config is None:
plugin_config = getattr(self.__class__, "plugin_config", {})
self.plugin_config = plugin_config or {}
@abstractmethod
async def execute(self, context: StreamContext) -> dict:
"""
执行聊天处理逻辑
Args:
context: StreamContext对象包含聊天上下文信息
Returns:
处理结果字典
"""
pass
@classmethod
def get_chatter_info(cls) -> "ChatterInfo":
"""构造并返回ChatterInfo
Returns:
ChatterInfo实例
"""
return ChatterInfo(
name=cls.chatter_name,
description=cls.chatter_description or "No description provided.",
chat_type_allow=cls.chat_types[0],
component_type=ComponentType.CHATTER,
)
def get_config(self, key: str, default=None):
"""获取插件配置,支持嵌套键"""
if not self.plugin_config:
return default
current = self.plugin_config
for part in key.split("."):
if isinstance(current, dict) and part in current:
current = current[part]
else:
return default
return current