Files
banban/talkingq-url/services/device_service.py
2026-03-24 15:04:36 +08:00

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()