§
    D®{jµ  ã            	       ó   — d Z ddlZddlZddlZdZdZdZ ej        d¦  «        Z	 G d„ de
¦  «        Zd	ed
efd„Zd!dedefd„Zdefd	ededed
efd„Zedk    �r$ddlZ eej        ¦  «        dk     r& ed¦  «          ed¦  «          ej        d¦  «         ej        d         dk    rO eej        d         ¦  «        \  ZZ eerdnd› dej        d         › de› �¦  «          ej        erdnd¦  «          eej        ¦  «        dk    rej        d         ndZ	  eej        d         e¦  «        Z ede› d ee¦  «        › d �¦  «         dS # e$ r&Z ee¦  «          ej        d¦  «         Y dZ[dS dZ[ww xY wdS )"u^  
Threads Text Check â€” WAJIB dipakai sebelum kirim teks ke Threads.

Aturan (FIXED 5 Agustus 2026):
- Semua teks Threads wajib DIHITUNG dulu: maksimal 500 karakter.
- Kalau lebih dari 500 â†’ JANGAN dikirim & JANGAN dipotong.
  Teks harus diperbaiki/diringkas dulu, baru dikirim utuh.
- Tidak boleh ada teks yang terpotong (truncate) di Threads.
- Kalau teks ada LINK â†’ link WAJIB dicek: harus nyala (HTTP 200),
  bukan 404. Link mati = teks tidak boleh dikirim.
- Caption Threads WAJIB minimal 1 paragraf (teks non-link minimal
  MIN_PARAGRAPH_CHARS karakter) â€” JANGAN kirim caption yang cuma
  link doang atau satu baris tanpa pembahasan.
- Kalau teks ada LINK â†’ WAJIB ada pembahasan SEBELUM link
  (minimal MIN_PREAMBLE_CHARS karakter teks dulu sebelum URL pertama).
  Link di awal caption tanpa pembahasan = TOLAK.

Pemakaian:
    from threads_text_check import cek_teks_threads, cek_link
    teks = cek_teks_threads(teks, label="Caption Threads")  # raise ThreadsTextError kalau > 500 atau link mati
    ok, info = cek_link("https://studiosoft.id/...")        # (True, "200 OK") / (False, "404 Not Found")
é    Niô  éP   é<   zhttps?://[^\s"\'\\\)\]\},;]+c                   ó   — e Zd ZdZdS )ÚThreadsTextErroruB   Teks Threads tidak lolos validasi â€” jangan kirim, perbaiki dulu.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úE/home/mantapman/.hermes/profiles/atun/workspace/threads_text_check.pyr   r   "   s   € € € € € ØLÐLÐLÐLr   r   ÚteksÚreturnc                 ó    — t          | ¦  «        S )uU   Hitung panjang teks (len python â€” termasuk emoji sebagai 1 karakter per codepoint).)Úlen)r   s    r   Úhitung_karakterr   &   s   € åˆt‰9Œ9Ðr   é   ÚurlÚtimeoutc                 óÐ  — |                       d¦  «        } t          j                             | ddi¬¦  «        }	 t          j                             ||¬¦  «        5 }|                     ¦   «         }d|cxk    rdk     rn nd|› d	�fcd
d
d
¦  «         S dd|› �fcd
d
d
¦  «         S # 1 swxY w Y   d
S # t          j        j        $ r}dd|j        › d|j	        › d�fcY d
}~S d
}~wt          j        j
        $ r+}ddt          |j	        ¦  «        d
d…         › �fcY d
}~S d
}~wt          $ r:}dt          |¦  «        j        › dt          |¦  «        d
d…         › �fcY d
}~S d
}~ww xY w)z…
    Cek apakah link nyala. Follow redirect otomatis.
    Return (True, "200 OK") kalau nyala; (False, alasan) kalau mati/error.
    z.,;!?)z
User-Agentz)Mozilla/5.0 (Windows NT 10.0; Win64; x64))Úheaders)r   éÈ   i�  Tz OKNFzHTTP z (ú)zURL error: r   ú: )ÚrstripÚurllibÚrequestÚRequestÚurlopenÚgetcodeÚerrorÚ	HTTPErrorÚcodeÚreasonÚURLErrorÚstrÚ	ExceptionÚtyper   )r   r   ÚreqÚrr#   Úes         r   Úcek_linkr,   +   s/  € ð
 �*Š*�XÑ
Ô
€CÝ
Œ.×
 Ò
 ØØÐJÐKð !ñ ô €Cð;ÝŒ^×#Ò# C°Ð#Ñ9Ô9ð 	)¸QØ—9’9‘;”;ˆDØ�dÐ Ð Ò Ð ˜SÒ Ð Ð Ð Ð Ø ˜\˜\˜\Ð)ð	)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð ˜. $˜.˜.Ð(ð		)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øõ
 Œ<Ô!ð 4ð 4ð 4ØÐ3˜aœfÐ3Ð3¨¬Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3øøøøÝŒ<Ô ð 9ð 9ð 9ØÐ8¥C¨¬¡M¤M°#°2°#Ô$6Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8øøøøÝð ;ð ;ð ;Ø�˜a™œÔ)Ð:Ð:­S°©V¬V°C°R°C¬[Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:øøøøð;øøøsq   º!B3 Á+B&ÂB3 ÂB&ÂB3 Â&B*Â*B3 Â-B*Â.B3 Â3E%ÃC!ÃE%Ã!E%Ã8 DÄE%ÄE%Ä+/E ÅE%Å E%zTeks ThreadsÚlabelÚmaxlenc                 ó*  — | pd                      ¦   «         } t          | ¦  «        }|dk    rt          d|› d�¦  «        ‚||k    r't          d|› d|› d|› d|› d| d	d
…         › d�¦  «        ‚t                               | ¦  «        }g }|D ]-}t          |¦  «        \  }}|s|                     ||f¦  «         Œ.|rMd                     d„ |d	d…         D ¦   «         ¦  «        }	t          d|› dt          |¦  «        › d|	› d�¦  «        ‚t           	                    d| ¦  «        }
t          j	        dd|
¦  «                              ¦   «         }
t          |
¦  «        t          k     r+t          d|› dt          |
¦  «        › dt          › d�¦  «        ‚|r„|d         }|                      |¦  «        }|dk    r| d	|…                               ¦   «         nd}t          |¦  «        t          k     r+t          d|› dt          |¦  «        › dt          › d�¦  «        ‚| S )u	  
    Validasi lengkap teks Threads sebelum dikirim:
    1. Panjang harus â‰¤ maxlen (default 500) â€” kalau lebih, TOLAK (jangan potong).
    2. Semua link di dalam teks harus nyala (200 OK) â€” kalau ada yang mati, TOLAK.
    3. Caption minimal 1 paragraf â€” teks non-link minimal MIN_PARAGRAPH_CHARS karakter.
    4. Kalau ada link, WAJIB ada pembahasan sebelum link (minimal
       MIN_PREAMBLE_CHARS karakter teks sebelum URL pertama).
    Return teks apa adanya kalau lolos; raise ThreadsTextError kalau tidak.
    Ú r   u   â›” u     kosong â€” tidak boleh dikirim.z TIDAK BOLEH dikirim: z karakter (maks u   ). Ringkas dulu sampai â‰¤ z", JANGAN dipotong otomatis. Teks: Néx   z...z; c              3   ó:   K  — | ]\  }}|d d…         › d|› �V — Œd S )NéF   ú -> r   )Ú.0ÚuÚinfos      r   ú	<genexpr>z#cek_teks_threads.<locals>.<genexpr>a   s<   è è € ÐIÐI±W°Q¸˜a   œfÐ0Ð0¨$Ð0Ð0ÐIÐIÐIÐIÐIÐIr   é   z punya LINK MATI (z): u?   . Perbaiki link dulu sebelum dikirim â€” jangan kirim link 404.ú z\s+z BELUM 1 PARAGRAF (z karakter non-link < uX   ). Tambah pembahasan dulu â€” jangan kirim caption yang cuma link atau satu baris doang.z  LINK DI AWAL TANPA PEMBAHASAN (z karakter sebelum link < zR). Tulis dulu minimal 1 kalimat pembahasan tentang link-nya, baru tempel link-nya.)Ústripr   r   ÚURL_REÚfindallr,   ÚappendÚjoinr   ÚsubÚreÚMIN_PARAGRAPH_CHARSÚfindÚMIN_PREAMBLE_CHARS)r   r-   r.   ÚnÚurlsÚmatir6   Úokr7   ÚdetailÚteks_tanpa_urlÚ	first_urlÚposÚpres                 r   Úcek_teks_threadsrN   C   sÂ  € ð ˆJ�B×ÒÑÔ€DÝ˜ÑÔ€AØˆA‚v€vÝÐM eÐMÐMÐMÑNÔNÐNàˆ6‚z€zÝð%�5ð %ð %°ð %ð %À6ð %ð %Ø'-ð%ð %à˜$˜3˜$”Zð%ð %ð %ñ
ô 
ð 	
õ �>Š>˜$ÑÔ€DØ€DØð #ð #ˆÝ˜A‘;”;‰ˆˆDØð 	#Ø�KŠK˜˜D˜	Ñ"Ô"Ð"øØð 
Ø—’ÐIÐIÀÀRÀaÀRÄÐIÑIÔIÑIÔIˆÝðM�5ð Mð M­C°©I¬Ið Mð M¸&ð Mð Mð Mñ
ô 
ð 	
õ —Z’Z  TÑ*Ô*€NÝ”V˜F C¨Ñ8Ô8×>Ò>Ñ@Ô@€NÝ
ˆ>ÑÔÕ0Ò0Ð0Ýð5�5ð 5ð 5­S°Ñ-@Ô-@ð 5ð 5Ý$ð5ð 5ð 5ñ
ô 
ð 	
ð ð 	Ø˜”Gˆ	Ø�iŠi˜	Ñ"Ô"ˆØ$'¨1¢H Hˆd�4�C�4Œj×ÒÑ Ô Ð °"ˆÝˆs‰8Œ8Õ(Ò(Ð(Ý"ð;�uð ;ð ;½cÀ#¹h¼hð ;ð ;Ý,ð;ð ;ð ;ñô ð ð €Kr   Ú__main__é   z7Gunakan: python3 threads_text_check.py '<teks>' [label]z5         python3 threads_text_check.py --link '<url>'é   z--linku   âœ… LINK NYALAu   â�Œ LINK MATIr   r4   ÚTeksu   âœ… u    karakter â€” AMAN dikirim.)r   )r
   rA   Úurllib.errorr   Úurllib.requestÚMAX_THREADS_CHARSrB   rD   Úcompiler<   Ú
ValueErrorr   r&   Úintr   r,   rN   r   Úsysr   ÚargvÚprintÚexitrH   r7   r-   Úhasilr+   r   r   r   ú<module>r^      s©  ððð ð, 
€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð àÐ ØÐ ØÐ Ø	ˆŒÐ3Ñ	4Ô	4€ðMð Mð Mð Mð M�zñ Mô Mð Mð˜#ð  #ð ð ð ð ð
;ð ;�#ð ; ð ;ð ;ð ;ð ;ð0 .<ÐK\ð :ð :˜3ð : sð :ÀSð :Ðadð :ð :ð :ð :ðz ˆzÒÑØ€J€J€JØ
€sˆ3Œ8�}„}�qÒÐØˆÐGÑHÔHÐHØˆÐEÑFÔFÐFØˆŒ�‰ŒˆØ
„x�„{�hÒÐØ�8˜CœH QœKÑ(Ô(‰ˆˆDØˆ RÐ<Ð!Ð!¨_ÐWÐWÀÄÈÄÐWÐWÐQUÐWÐWÑXÔXÐXØˆŒ�b���˜aÑ Ô Ð Ø˜3˜sœx™=œ=¨1Ò,Ð,ˆCŒH�QŒKˆK°&€EðØ Ð  ¤¨!¤¨eÑ4Ô4ˆØˆÐE�UÐEÐE˜c˜c %™jœjÐEÐEÐEÑFÔFÐFÐFÐFøØð ð ð Øˆˆa‰ŒˆØˆŒ�‰Œˆˆˆˆˆˆˆøøøøðøøøð Ðs   Ä2E ÅE;ÅE6Å6E;