
    fi&                         d Z ddlZddlmZ ddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ  e              G d d	e          Zdd
edz  deeef         fdZdd
edz  defdZ e            ZdS )u   配置管理模块。    N)Path)Any)load_dotenv)Field)BaseSettingsc                      e Zd ZU dZ edd          Zeed<    edd          Zeed<    ed	d
          Z	eed<    edd          Z
eed<    edd          Zeed<    edd          Zeed<    eed          Zee         ed<    edd          Zeed<    edd          Zeed<    edd          Zeed<    eed           Zee         ed!<    ed" d#          Zee         ed$<    edd%          Zeed&<    edd'          Zeed(<    ed)d*          Zeed+<    edd,          Zeed-<    edd.          Zeed/<    ed0d1          Zeed2<   d3d4d5d6Zd7ed8efd9Zd:S );Settingsu   应用配置。  u   会话空闲超时(秒))defaultdescriptionsession_idle_timeout   u   每用户最大会话数session_max_per_userd   u   全局最大会话数session_max_totalbutler_u   会话名前缀session_prefixTu   是否启用命令审批guardrail_enabled,  u   审批超时(秒)guardrail_approval_timeoutu   允许的用户ID列表)default_factoryr   allowed_usersws://localhost:3001zNapCat WebSocket URLnapcat_ws_url u   NapCat 访问令牌napcat_tokenzTelegram Bot Tokentelegram_bot_tokenu   允许的 Telegram 聊天 IDtelegram_allowed_chatsc                      dgS )Ntelegram r!       ,/root/projects/qq-shell/src/butler/config.py<lambda>zSettings.<lambda>)   s     r"   u   启用的通道列表enabled_channelszInngest Event Keyinngest_event_keyzInngest Signing Keyinngest_signing_keyINFOu   日志级别	log_levelzAnthropic API Keyanthropic_api_keyzAnthropic API Base URLanthropic_base_urlzclaude-sonnet-4-20250514u   Claude 模型名称anthropic_modelBUTLER_z.envignore)
env_prefixenv_fileextrauser_idreturnc                 &    | j         sdS || j         v S )u$   检查用户是否在白名单中。T)r   )selfr2   s     r#   is_user_allowedzSettings.is_user_allowed9   s     ! 	4$,,,r"   N)__name__
__module____qualname____doc__r   r   int__annotations__r   r   r   strr   boolr   listr   r   r   r   r   r%   r&   r'   r)   r*   r+   r,   model_configr6   r!   r"   r#   r	   r	      s         !&d@Y Z Z Z#ZZZ %a=W X X X#XXX"U3<STTTsTTT%	?PQQQNCQQQ $eD>XYYYtYYY&+eCEX&Y&Y&YYYY  %uTG`aaaM49aaa '<J`aaaM3aaab6KLLLL#LLL $eB<PQQQQQQ(-dPn(o(o(oDIooo #(%8L8LZq"r"r"rd3irrr #U2;NOOOsOOO$uR=RSSSSSS U6~FFFIsFFF #U2;NOOOsOOO#eB<TUUUUUU 5)CQfgggOSggg"+(SSL-s -t - - - - - -r"   r	   config_pathr3   c                     | t          d          } |                                 si S t          |           5 }t          j        |          pi cddd           S # 1 swxY w Y   dS )u   从 YAML 文件加载配置。Nzconfig.yaml)r   existsopenyaml	safe_load)rA   fs     r#   load_configrH   @   s    =)) 		k		 'a~a  &B' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AA!Ac                    t          |           }|                    di           }i }|                    di           }|                    dd          |d<   |                    dd          |d<   |                    d	d
          |d<   |                    dd          |d<   |                    di           }|                    dd          |d<   |                    dd          |d<   |                    di           }|                    dg           }|r|ng |d<   |                    di           }|                    dd          |d<   |                    dd          |d<   |                    di           }	|	                    d d          pt          j                            d!d          |d"<   |	                    d#g           |d$<   |                    d%i           }
|
                    ddg          |d&<   |                    d'i           }|                    d(d)          |d*<   |                    d+d          p?t          j                            d,d          pt          j                            d-d          |d+<   |                    d.d          p?t          j                            d/d          pt          j                            d0d          |d.<   |                    d1d          p?t          j                            d2d          pt          j                            d3d          |d1<   t	          d4i |S )5u3   创建配置实例，合并 YAML 和环境变量。butlersessionidle_timeoutr
   r   max_per_userr   r   	max_totalr   r   prefixr   r   	guardrailenabledTr   approval_timeoutr   r   securityr   napcatws_urlr   r   tokenr   r   r    	bot_tokenTELEGRAM_BOT_TOKENr   allowed_chatsr   channelsr%   logginglevelr(   r)   r*   ANTHROPIC_API_KEYBUTLER_ANTHROPIC_API_KEYr+   ANTHROPIC_BASE_URLBUTLER_ANTHROPIC_BASE_URLr,   ANTHROPIC_MODELBUTLER_ANTHROPIC_MODELr!   )rH   getosenvironr	   )rA   configbutler_configflat_configsession_cfgguardrail_cfgsecurity_cfgallowed
napcat_cfgtelegram_cfgchannels_cfglogging_cfgs               r#   create_settingsrq   L   sG   %%FJJx,,M"$K##Ir22K*5//.$*O*OK&'*5//.!*L*LK&''2{C'H'HK#$$/OOHi$H$HK !!%%k266M'4'8'8D'I'IK#$0=0A0ABTVY0Z0ZK,- $$Z44L33G.5#=772K ""8R00J#->>(<Q#R#RK ",..""="=K $$Z44Lb)) 	1

+R00 $% -9,<,<_b,Q,QK() $$Z44L&2&6&6y:,&O&OK"###Ir22K*w??K 	-r22 	7

*B//	7

1266 #$ 	.33 	8

+R00	8

2B77 $% 	+R00 	5

("--	5

/44 !" ""k"""r"   )N)r:   rd   pathlibr   typingr   rE   dotenvr   pydanticr   pydantic_settingsr   r	   dictr=   rH   rq   settingsr!   r"   r#   <module>ry      s!     				                          * * * * * * -- -- -- -- --| -- -- --`	' 	'TD[ 	'DcN 	' 	' 	' 	'7# 7# 7# 7# 7# 7# 7#t ?r"   