51 lines
2.6 KiB
Python
51 lines
2.6 KiB
Python
from typing import Optional, Dict
|
|
from services.device_config import device_config_manager, DeviceConfig
|
|
from services.role_manager import role_manager
|
|
from services.conversation_history import conversation_history_manager, DeviceConversationHistory
|
|
from handlers.prompt_sound_handler import send_welcome_sound
|
|
from utils.logger import session_logger
|
|
|
|
class DeviceService:
|
|
async def get_device_role(self, device_id: str) -> Dict:
|
|
"""获取设备当前使用的角色"""
|
|
from handlers.command_handler import get_device_role as handler_get_device_role
|
|
device_config = await device_config_manager.get_config(device_id, force_refresh=True)
|
|
selected_role = await handler_get_device_role(device_id)
|
|
result = {
|
|
"role_key": selected_role.get("role_key", ""),
|
|
"name": selected_role.get("name", "未命名角色"),
|
|
"description": selected_role.get("description", ""),
|
|
"preferred_language": device_config.preferred_language if device_config else None
|
|
}
|
|
if "multilingual" in selected_role:
|
|
result["languages"] = list(selected_role["multilingual"].keys())
|
|
return result
|
|
|
|
async def update_device_role(self, device_id: str, role_key: str, language: Optional[str] = None) -> Dict:
|
|
"""更新设备角色配置"""
|
|
role = await role_manager.get_role(role_key)
|
|
if not role:
|
|
raise ValueError(f"角色 {role_key} 不存在")
|
|
|
|
try:
|
|
current_config = await device_config_manager.get_config(device_id, force_refresh=True)
|
|
preserved_language = language or (current_config.preferred_language if current_config else None)
|
|
device_config = DeviceConfig(selected_role_key=role_key, preferred_language=preserved_language)
|
|
await device_config_manager.set_config(device_id, device_config)
|
|
|
|
await conversation_history_manager.set_history(device_id, DeviceConversationHistory())
|
|
await send_welcome_sound(device_id, role_key, preserved_language)
|
|
|
|
session_logger.info(device_id, "config", f"设备的角色已通过API更新为 {role_key}, 语言: {preserved_language or '默认'}")
|
|
return {
|
|
"status": "success",
|
|
"device_id": device_id,
|
|
"role_key": role_key,
|
|
"language": preserved_language
|
|
}
|
|
except Exception as e:
|
|
session_logger.error(device_id, "config", f"通过API更新角色时出错: {str(e)}")
|
|
raise
|
|
|
|
device_service = DeviceService()
|