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

81 lines
3.4 KiB
Python

from config import settings
from services.device_config import DeviceConfig, device_config_manager
from services.role_manager import role_manager
from utils.logger import session_logger
async def update_device_config(device_id: str, new_role_key: str, language: str = None):
current_config = await device_config_manager.get_config(device_id, force_refresh=True)
preserved_language = language
if language is None and current_config and hasattr(current_config, 'preferred_language') and current_config.preferred_language:
preserved_language = current_config.preferred_language
session_logger.info(
device_id,
"config",
f"保留当前首选语言: {preserved_language}"
)
device_config = DeviceConfig(selected_role_key=new_role_key, preferred_language=preserved_language)
await device_config_manager.set_config(device_id, device_config)
session_logger.info(
device_id,
"config",
f"设备的角色已更新为 {new_role_key}" +
(f",首选语言: {preserved_language}" if preserved_language else "")
)
async def get_device_role(device_id: str, language: str = None) -> dict:
device_config = await device_config_manager.get_config(device_id, force_refresh=True)
preferred_language = None
if device_config and hasattr(device_config, 'preferred_language') and device_config.preferred_language:
preferred_language = device_config.preferred_language
session_logger.info(
device_id,
"config",
f"检测到设备首选语言配置: {preferred_language}"
)
effective_language = language or preferred_language
if device_config:
selected_role_key = device_config.selected_role_key
session_logger.info(
device_id,
"config",
f"使用配置的角色: {selected_role_key}" +
(f", 使用语言: {effective_language}" if effective_language else "")
)
else:
selected_role_key = settings.selected_role_key
session_logger.info(
device_id,
"config",
f"使用默认角色: {selected_role_key}" +
(f", 使用语言: {effective_language}" if effective_language else "")
)
selected_role = await role_manager.get_role_config_for_language(selected_role_key, effective_language)
if not selected_role:
all_roles = await role_manager.get_all_roles()
if all_roles:
first_role_key = next(iter(all_roles.keys()))
selected_role = await role_manager.get_role_config_for_language(first_role_key, effective_language)
session_logger.warning(
device_id,
"config",
f"未找到角色 {selected_role_key},使用默认角色: {first_role_key}"
)
else:
selected_role = {
"role_key": "default",
"name": "默认助手",
"content": "你是一个智能助手,请简洁回答问题。"
}
session_logger.warning(
device_id,
"config",
"未找到任何可用的角色配置,使用内置默认角色"
)
lang_info = effective_language or "默认"
session_logger.info(
device_id,
"config",
f"已选择角色配置: {selected_role.get('name', '未命名')}, 语言: {lang_info}"
)
return selected_role