
    .j                    Z   S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  \ " S S5      5       rSS	 jr\ " S
 S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\\\\4   rSS jr\ " S S5      5       rSS jrSS jrSS jrSS jrS S jrg)!    )annotationsN)	dataclass)datetime)Union)load_dotenvc                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S	'   S
rg)Settings   str	bot_tokenintadmin_iddb_path
event_jsonwelcome_jsonarchive_json N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       #/home/rasp/conference-bot/config.pyr	   r	      s"    NMLOr   r	   c                    [        5         [        R                  R                  S5      =(       d(    [        R                  R                  S5      =(       d    Sn [	        [        R                  S   [        [        R                  S   5      [        R                  R                  SS5      U [        R                  R                  SS	5      [        R                  R                  S
S5      S9$ )N
EVENT_JSONCONFERENCES_JSONz
event.json	BOT_TOKENADMIN_IDDB_PATHzconference_bot.dbWELCOME_JSONzwelcome.jsonARCHIVE_JSONzarchive.json)r   r   r   r   r   r   )r   osenvirongetr	   r   )r   s    r   load_settingsr(      s    M-c@R1ScWcJ**[)RZZ
+,

y*=>ZZ^^NNCZZ^^NNC r   c                  *    \ rS rSr% S\S'   S\S'   Srg)Speaker"   r   namechannelr   Nr   r   r   r   r*   r*   "   s    
ILr   r*   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)
ConferenceEvent(   r   event_idtypetitlezlist[Speaker]speakersr   Nr   r   r   r   r/   r/   (   s    M
IJr   r/   c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S	'   S
rg)WebinarEvent0   r   r1   r2   r3   descriptionr   r   duration_minutesr   Nr   r   r   r   r6   r6   0   s#    M
IJr   r6   c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)	IdleEvent:   r   r1   r2   r3   r   Nr   r   r   r   r;   r;   :   s    M
IJr   r;   c                    [        U S5       nUR                  5       nS S S 5        [        W5      $ ! , (       d  f       N= f)Nrb)openreadvalidate_event_json)pathfraws      r   
load_eventrE   D   s2    	dD	Qffh 
s## 
	s   1
?c                  .    \ rS rSr% S\S'   SrS\S'   Srg)WelcomeConfigJ   r   textNz
str | Nonephoto_file_idr   )r   r   r   r   r   rJ   r   r   r   r   rG   rG   J   s    
I $M:$r   rG   c                     [        U SS9 n[        R                  " U5      nSSS5        [        WR	                  SS5      UR	                  S5      =(       d    SS9$ ! , (       d  f       N@= f! [
         a     gf = f)zBLoad welcome config from file. Returns None if file doesn't exist.zutf-8)encodingNrI    rJ   )rI   rJ   )r?   jsonloadrG   r'   FileNotFoundError)rB   rC   datas      r   load_welcomerR   P   sm    $)Q99Q<D *&"%((?3;t
 	
 *)  s'   
A. A9A. 
A+'A. .
A;:A;c                    [         R                  " U 5      n[	        U[
        5      (       d  [        S5      eSU;   a  SU;  a  SU;  a  0 UEUS   SS.EnUR                  S5      nUS:X  a  [        U5      $ US	:X  a  [        U5      $ US
:X  a  [        U5      $ [        SU< S35      e! [         R                   a  n[        SU 35      UeSnAff = f)zParse and validate event JSON. Supports new schema (event_id+type) and
legacy conference schema (conference_id, no type). Raises ValueError on
invalid input.u   Невалидный JSON: NuY   JSON должен быть объектом, а не списком или строкойconference_idr2   r1   
conference)r1   r2   webinaridleu   Неизвестный type: u5   . Допустимы 'conference', 'webinar', 'idle'.)
rN   loadsJSONDecodeError
ValueError
isinstancedictr'   _parse_conference_parse_webinar_parse_idle)rD   rQ   e
event_types       r   rA   rA   ]   s    Czz# dD!!tuu $6#5*D:PP$PD$9<P&!J\! &&Yd##V4  
4ZNBwx
yy!  C6qc:;BCs   B* *C>CCc                `   1 SknXR                  5       -
  nU(       a  [        SU 35      e[        U S   [        5      (       d  [        S5      e[        U S   [        5      (       d  [        S5      e[        U S   [        5      (       a  [        U S   5      S:X  a  [        S	5      eU S    HG  nS
U;  d  SU;  a  [        SU 35      eUS   R                  S5      (       a  M8  [        SUS    35      e   [        U S   SU S   U S    Vs/ s H  n[        US
   US   S9PM     snS9$ s  snf )N>   r2   r3   r1   r4   !   Отсутствуют поля: r1   -   event_id должен быть строкойr3   *   title должен быть строкойr4   r   u>   speakers должен быть непустым спискомr,   r-   u)   Спикер без name или channel: @u0   channel должен начинаться с @: rU   )r,   r-   )r1   r2   r3   r4   )	keysrZ   r[   r   listlen
startswithr/   r*   )rQ   requiredmissingss       r   r]   r]   v   sC   8H$G<WIFGGd:&,,HIId7mS))EFFd:&--T*5E1F!1KYZZ*?iq0HLMM|&&s++OPQR[P\~^__	 
 j!7mIMjIYZIYA'qy!I,?IYZ	  [s   D+c           	     h   1 SknXR                  5       -
  nU(       a  [        SU 35      e[        U S   [        5      (       d  [        S5      e[        U S   [        5      (       d  [        S5      e[        U S   [        5      (       d  [        S5      e [        R
                  " U S	   5      nUR                  c  [        S5      e[        U S   [        5      (       a	  U S   S::  a  [        S5      e[        U S   SU S   U S   UU S   S9$ ! [        [        4 a  n[        S
U 35      UeS nAff = f)N>   r2   r3   r   r1   r8   r9   rc   r1   rd   r3   re   r8   u0   description должен быть строкойr   u8   datetime должен быть строкой ISO 8601: uN   datetime должен содержать timezone (например, '+03:00')r9   r   uL   duration_minutes должен быть положительным целымrV   )r1   r2   r3   r8   r   r9   )
rg   rZ   r[   r   r   fromisoformat	TypeErrortzinfor   r6   )rQ   rk   rl   dtr`   s        r   r^   r^      sH   [H$G<WIFGGd:&,,HIId7mS))EFFd=)3//KLL`##D$45 
yyijjd-.44=O8PTU8Ughhj!7m'01  z" `STUSVWX^__`s   D D1D,,D1c                   1 SknXR                  5       -
  nU(       a  [        SU 35      e[        U S   [        5      (       d  [        S5      e[        U S   [        5      (       d  [        S5      e[	        U S   SU S   S9$ )	N>   r2   r3   r1   rc   r1   rd   r3   re   rW   )r1   r2   r3   )rg   rZ   r[   r   r;   )rQ   rk   rl   s      r   r_   r_      s    ,H$G<WIFGGd:&,,HIId7mS))EFFj!7m r   )returnr	   )rB   r   rt   Event)rB   r   rt   zWelcomeConfig | None)rD   bytesrt   ru   )rQ   r\   rt   r/   )rQ   r\   rt   r6   )rQ   r\   rt   r;   )
__future__r   rN   r%   dataclassesr   r   typingr   dotenvr   r	   r(   r*   r/   r6   r;   ru   rE   rG   rR   rA   r]   r^   r_   r   r   r   <module>r{      s    "  	 !   
  
   
          	o|Y67$ % % %

z20:r   