o
    oh                     @   s   d dl Z d dlZd dlmZ d dlZddlmZ d dlmZ e dd	 Z
eje
dd	 ed
ZdZdedB fddZdedB fddZdefddZd dedee fddZdededefddZdee dedefddZdedefddZdS )!    N)Iterable   )
get_client)datetime	LOG_LEVELINFOz[%(levelname)s] %(message)s)levelformattelegram_sendersubscribersreturnc                  C   s   t dpd } | pdS )z@Fetch BOT_TOKEN on demand. If missing, returns None (skip send).	BOT_TOKEN N)osgetenvstrip)t r   1/var/www/html/bot/app/services/telegram_sender.py_get_bot_token   s   r   c                  C   s   t  } | sd S d|  dS )Nzhttps://api.telegram.org/botz/sendMessage)r   )tokr   r   r   _api_url   s   r   c                  C   s   t dpd } | rd| vrdS z<dd | ddD \}}t|}t|}t j}||kr3W dS ||k rE||  koA|k W S   W S ||kpL||k W S  tyW   Y dS w )zReturn True if current local time is within quiet hours.
    Format: QUIET_HOURS="22-07" (start-end, 24h). If unset/invalid -> False.
    QUIET_HOURSr   -Fc                 S   s   g | ]}|  qS r   )r   ).0pr   r   r   
<listcomp>!       z#_in_quiet_hours.<locals>.<listcomp>r   )	r   r   r   splitintr   nowhour	Exception)rawstart_send_sshehnow_hr   r   r   _in_quiet_hours   s    
r)   '  limitc                 C   s4   t  }|td|  }dd |jpg D S )Nchat_idc                 S   s   g | ]}|d  qS )r,   r   )r   rowr   r   r   r   2   r   z'get_all_subscribers.<locals>.<listcomp>)r   tableSUBSCRIBERS_TABLEselectr+   executedata)r+   sbresr   r   r   get_all_subscribers/   s   r5   r,   htmlc              
   C   s   t  }|std|  dS z.| |ddd}t rd|d< tj||dd}|jo.| d	d}|s9t	d
| |j
 |W S  tyU } zt	d| | W Y d }~dS d }~ww )Nz2BOT_TOKEN not set; skip Telegram send (chat_id=%s)FHTMLT)r,   text
parse_modedisable_web_page_previewdisable_notification   )jsontimeoutokzsend fail %s: %szsend exception %s: %s)r   loggerinfor)   requestspostr?   r=   getwarningr8   r"   )r,   r6   apipayloadrr?   er   r   r   	_send_one4   s4   rJ   chat_idsc                 C   s$   d}| D ]}t ||r|d7 }q|S )Nr   r   )rJ   )rK   r6   sentcidr   r   r   send_html_toP   s   
rN   c                 C   s"   t  }|std dS t|| S )Nzno subscribersr   )r5   r@   rA   rN   )r6   subsr   r   r   broadcast_htmlW   s
   

rP   )r*   )r   loggingtypingr   rB   supabase_servicer   r   r   upperr   basicConfig	getLoggerr@   r/   strr   r   boolr)   r   listr5   rJ   rN   rP   r   r   r   r   <module>   s"    
