52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
"""AI 运行时状态 — 支持企微菜单动态开关"""
|
|
|
|
import logging
|
|
|
|
from app.config import settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# 运行时覆盖值,None 表示使用 settings.ai_enabled
|
|
_runtime_override: bool | None = None
|
|
|
|
|
|
def is_ai_enabled() -> bool:
|
|
"""获取 AI 分析当前是否启用(考虑运行时覆盖)"""
|
|
if _runtime_override is not None:
|
|
return _runtime_override
|
|
return settings.ai_enabled
|
|
|
|
|
|
def set_ai_enabled(enabled: bool) -> bool:
|
|
"""设置 AI 分析运行时开关,返回是否真的发生了变化"""
|
|
global _runtime_override
|
|
current = is_ai_enabled()
|
|
if enabled == current:
|
|
return False
|
|
_runtime_override = enabled
|
|
status = "启用" if enabled else "禁用"
|
|
logger.info("AI 分析已通过企微菜单%s", status)
|
|
return True
|
|
|
|
|
|
def get_ai_status_text() -> str:
|
|
"""获取 AI 状态文本"""
|
|
return "已启用" if is_ai_enabled() else "已禁用"
|
|
|
|
|
|
def get_whitelist() -> list[str]:
|
|
"""获取 AI 白名单用户列表"""
|
|
raw = settings.ai_whitelist
|
|
if not raw:
|
|
return []
|
|
return [u.strip() for u in raw.split(",") if u.strip()]
|
|
|
|
|
|
def is_whitelisted(user_id: str) -> bool:
|
|
"""检查用户是否在 AI 白名单中(不区分大小写)"""
|
|
whitelist = get_whitelist()
|
|
if not whitelist:
|
|
# 白名单为空则所有人都可以操作
|
|
return True
|
|
return user_id.lower() in [u.lower() for u in whitelist]
|