o
    eh'                     @   s
  d dl Z d dlZd dlZd dlmZ d dlmZ ee j	d Z
ee
d  d dlmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d d	lmZmZmZ d d
lm Z! d dl"m#Z# d dl$m%Z% e &dZ'dZ(dZ)dZ*dZ+de,de,fddZ-de,de.e,e,f fddZ/d4ddZ0dedej1fddZ2dedej1fdd Z3dedej1fd!d"Z4dedej1fd#d$Z5dedej1fd%d&Z6dedej1fd'd(Z7dedej1fd)d*Z8dedej1fd+d,Z9dedej1fd-d.Z:dedej1fd/d0Z;d1d2 Z<e=d3kre<  dS dS )5    N)Path)load_dotenv   z.env)UpdateInlineKeyboardMarkupInlineKeyboardButtonReplyKeyboardMarkupReplyKeyboardRemove)	ParseMode)ApplicationCommandHandlerCallbackQueryHandlerContextTypesConversationHandlerMessageHandlerfilters)get_subscriberadd_subscriberdelete_subscriber)run)
search_org)search_moef_orgTELEGRAM_BOT_TOKENunsub_confirmunsub_cancel   sreturnc                 C   s$   | pd} |  dd dd ddS )N &z&amp;<z&lt;>z&gt;)replace)r    r#   0/var/www/html/govbot/app/workers/telegram_bot.py_esc#   s   r%   rawc                 C   s4   | pd  }tdd|}|s|dfS |d| fS )Nr   z[^\d+]ztel:)stripresub)r&   disphrefr#   r#   r$   	_tel_href'   s
   r,     c                 C   s\  g g d}}}| pg D ]}t |dpd}t |dpd}t |dp'd}|dp/d}	t |dp7d}
t|	\}}t |}g }|d	| d
 || d|  |rg|d| d| d n|rn|| |
ru||
 d|d }|t| |kr|r|d| g d}}|| |t|7 }q|r|d| |pdgS )Nr   
department-positionnamephoner   task[] z	<a href="z">z</a>
z

u   결과가 없습니다.)r%   getr,   appendjoinlen)rowsmax_chunk_lenchunksblockcurrdeptposr1   	phone_rawr3   
disp_phoneteldisp_phone_esclinesentryr#   r#   r$   _format_rows_chunks.   s2   


rJ   updatecontextc                    s   | j dI d H  d S )Nu  정부 인사 추적 봇입니다.
/subscribe : 구독 시작/해지
/crawl : 즉시 수집 실행(모티/기재부)
/sync_org : 조직도 갱신(MOTIE + MOEF)
/motie_search : MOTIE 직원/부서 검색 (대화형)
/moef_search : MOEF 직원/부서 검색 (대화형))message
reply_textrK   rL   r#   r#   r$   startN   s   rP   c                    s|   | j j}| jj}t|}|d u r!t|| | jdI d H  d S tt	dt
dgt	dtdgg}| jjd|dI d H  d S )NuO   ✅ 구독이 시작되었습니다. 이제부터 알림을 보내드립니다.u   🔕 해지)callback_datau   유지u5   이미 구독 중입니다. 해지하시겠습니까?reply_markup)effective_chatideffective_user
first_namer   r   rM   rN   r   r   CB_UNSUB_CONFIRMCB_UNSUB_CANCEL)rK   rL   chat_idrW   
subscriberkeyboardr#   r#   r$   	subscribeX   s   
r]   c                    s   | j }|jjj}|j}|tkr&t| |dI d H  |dI d H  d S |t	kr<|dI d H  |dI d H  d S | I d H  d S )Nu   구독 해지 완료uY   🔕 구독이 해지되었습니다. 다시 원하시면 /subscribe 를 입력하세요.u   구독 유지uE   유지로 선택하셨습니다. 계속 알림을 보내드릴게요.)
callback_queryrM   chatrU   datarX   r   answeredit_message_textrY   )rK   rL   queryrZ   r`   r#   r#   r$   on_callbackh   s   
rd   c              
      s   | j dI d H  zddlm} t|I d H  | j dI d H  W d S  tyC } z| j d| I d H  W Y d }~d S d }~ww )Nu   ⏳ 크롤 실행 중...r   )run_onceu+   ✅ 크롤 실행 완료(신규만 알림).u   ❌ 크롤 실패: )rM   rN   app.workers.crawl_runnerre   asyncio	to_thread	Exception)rK   rL   re   er#   r#   r$   crawlz   s   &rk   c              
      s|   | j dI d H  zttI d H  | j dI d H  W d S  ty= } z| j d| I d H  W Y d }~d S d }~ww )Nu)   ⏳ 조직도 갱신 중...(MOTIE + MOEF)u   ✅ 조직도 갱신 완료u   ❌ 조직도 갱신 실패: )rM   rN   rg   rh   sync_all_org_runri   )rK   rL   rj   r#   r#   r$   sync_org   s   &rm   c                       | j jdt dI d H  tS )NuL   검색할 키워드를 입력해 주세요.
예) 홍길동 / 산업정책국rR   )rM   rN   r	   AWAIT_QUERYrO   r#   r#   r$   motie_search_entry      rp   c              
        | j jpd }|s| j dI d H  tS | j d| I d H  z6tt|dI d H }t|}|D ]}| j j|t	j
ddI d H  q3| j jdtdggddd	d
I d H  tjW S  ty } z'| j d| I d H  | j jdtdggddd	d
I d H  tjW  Y d }~S d }~ww )Nr   (   키워드를 다시 입력해 주세요.   🔎 검색 중: P   T
parse_modedisable_web_page_previewW   검색을 종료합니다. 추가 검색이 필요하면 아래 버튼을 누르세요./motie_searchresize_keyboardone_time_keyboardrR      ❌ 검색 중 오류: )rM   textr'   rN   ro   rg   rh   r   rJ   r
   HTMLr   r   ENDri   rK   rL   rc   r<   r>   crj   r#   r#   r$   motie_search_query   2   r   c                    rn   )NuQ   MOEF 검색할 키워드를 입력해 주세요.
예) 홍길동 / 경제정책국rR   )rM   rN   r	   AWAIT_MOEF_QUERYrO   r#   r#   r$   moef_search_entry   rq   r   c              
      rr   )Nr   rs   rt   ru   Trv   ry   /moef_searchr{   rR   r~   )rM   r   r'   rN   r   rg   rh   r   rJ   r
   r   r   r   r   ri   r   r#   r#   r$   moef_search_query   r   r   c                    s0   | j jdtdgdggddddI d H  tjS )Nry   rz   r   Tr{   rR   )rM   rN   r   r   r   rO   r#   r#   r$   cancel   s   r   c                  C   s   t stdt t  } | tdt | tdt	 | tdt
 | tdt | tt ttdtgtttjtj @ tgitdtgdd	}| | ttd
tgtttjtj @ tgitdtgdd	}| | | jtjd d S )Nu   TELEGRAM_BOT_TOKEN 미설정rP   r]   rk   rm   motie_searchr   T)entry_pointsstates	fallbacksallow_reentrymoef_search)allowed_updates)TOKENRuntimeErrorr   buildertokenbuildadd_handlerr   rP   r]   rk   rm   r   rd   r   rp   ro   r   r   TEXTCOMMANDr   r   r   r   r   run_pollingr   	ALL_TYPES)app
conv_motie	conv_moefr#   r#   r$   main   s.   





r   __main__)r-   )>osr(   rg   pathlibr   dotenvr   __file__resolveparentsBASE_DIRtelegramr   r   r   r   r	   telegram.constantsr
   telegram.extr   r   r   r   r   r   r   app.services.supabase_servicer   r   r   app.workers.org_syncr   rl   app.services.motie_org_servicer   app.services.moef_org_servicer   getenvr   rX   rY   ro   r   strr%   tupler,   rJ   DEFAULT_TYPErP   r]   rd   rk   rm   rp   r   r   r   r   r   __name__r#   r#   r#   r$   <module>   sH    $

 
		
!
