+
    D®{jµ  ã                   ó2  € R t ^ RIt^ RIt^ RItRt^Pt^<t]P                  ! R4      t	 ! R R]
4      tR R ltRR R	 lltR
]3R R llt]R8X  Ed   ^ RIt]! ]P$                  4      ^8  d#   ]! R4       ]! R4       ]P(                  ! ^4       ]P$                  ^,          R8X  dd   ]! ]P$                  ^,          4      w  tt]! ]'       d   RMR R]P$                  ^,           R] 24       ]P(                  ! ]'       d   ^ M^4       ]! ]P$                  4      ^8”  d   ]P$                  ^,          MRt ]! ]P$                  ^,          ]4      t]! R] R]! ]4       R24       R# R#   ] d&   t]! ]4       ]P(                  ! ^4        RtAR# RtAii ; i)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ô  zhttps?://[^\s"\'\\\)\]\},;]+c                   ó   € ] tR t^"tRtRtR# )ÚThreadsTextErroruB   Teks Threads tidak lolos validasi â€” jangan kirim, perbaiki dulu.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚE/home/mantapman/.hermes/profiles/atun/workspace/threads_text_check.pyr   r   "   s   † ÝLr   r   c                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚteksÚreturn©ÚstrÚint)Úformats   "r   Ú__annotate__r   &   s   € ÷ ñ œ#ð ¤#ñ r   c                ó   € \        V 4      # )uU   Hitung panjang teks (len python â€” termasuk emoji sebagai 1 karakter per codepoint).)Úlen)r   s   &r   Úhitung_karakterr   &   s   € äˆt‹9Ðr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚurlÚtimeoutr   )r   s   "r   r   r   +   s   € ÷ ;ñ ;”#ð ;¤ñ ;r   c                ó  € V P                  R4      p \        P                  P                  V RR/R7      p \        P                  P	                  W!R7      ;_uu_ 4       pVP                  4       p^ÈTu;8:  d   R8  d   M MRV R23uuR	R	R	4       # R
RV 23uuR	R	R	4       #   + '       g   i     R	# ; i  \        P                  P                   d*   pR
RTP                   RTP                   R23u R	p?# R	p?i\        P                  P                   d,   pR
R\        TP                  4      R,           23u R	p?# R	p?i\         d7   pR
\        T4      P                   R\        T4      R,           23u R	p?# R	p?ii ; i)zy
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: :NéP   Nú: )ÚrstripÚurllibÚrequestÚRequestÚurlopenÚgetcodeÚerrorÚ	HTTPErrorÚcodeÚreasonÚURLErrorr   Ú	ExceptionÚtyper   )r   r   ÚreqÚrr)   Úes   &&    r   Úcek_linkr1   +   sE  € ð
 �*‰*�XÓ
€CÜ
�.‰.×
 Ñ
 ØØÐJÐKð !ó €Cð;Ü�^‰^×#Ñ# CÐ#×9Ô9¸QØ—9‘9“;ˆDØ�dÖ ˜S× Ø ˜v S˜\Ð)÷ :Ò9ð ˜E $ ˜.Ð(÷	 :×9×9Ó9ûô
 �<‰<×!Ñ!ô 4Ø˜˜aŸf™f˜X R¨¯© z°Ð3Ð3Õ3ûÜ�<‰<× Ñ ô 9Ø˜¤C¨¯©£M°#Õ$6Ð#7Ð8Ð8Õ8ûÜô ;Øœ˜a›×)Ñ)Ð*¨"¬S°«V°C­[¨MÐ:Ð:Õ:ûð;úsw   ¶(B7 Á)B#Â
B7 ÂB#Â
B7 Â#B4	Â.B7 Â4B7 Â7FÃC:Ã4FÃ: FÄFÄ EÄ<FÅFÅFÅ+FÅ;FÆFzTeks Threadsc                óH   € V ^8„  d   QhR\         R\         R\        R\         /# )r   r   ÚlabelÚmaxlenr   r   )r   s   "r   r   r   C   s)   € ÷ :ñ :œ3ð :¤sð :ÄSð :Ôadñ :r   c                ó´  € T ;'       g    RP                  4       p \        V 4      pV^ 8:  d   \        RV R24      hW28”  d#   \        RV RV RV RV RV R,           R	24      h\        P	                  V 4      p. pV F,  p\        V4      w  rxV'       d   K  VP                  Wh34       K.  	  V'       d>   R
P                  R VR,           4       4      p	\        RV R\        V4       RV	 R24      h\        P                  RV 4      p
\        P                  ! RRV
4      P                  4       p
\        V
4      \        8  d#   \        RV R\        V
4       R\         R24      hV'       dm   V^ ,          pV P                  V4      pV^ 8¼  d   V RV P                  4       MRp\        V4      \        8  d#   \        RV R\        V4       R\         R24      hV # )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.
Ú u   â›” u     kosong â€” tidak boleh dikirim.z TIDAK BOLEH dikirim: z karakter (maks u   ). Ringkas dulu sampai â‰¤ z", JANGAN dipotong otomatis. Teks: :Néx   Nz...z; c              3   óB   "  € T F  w  rVR ,           RV 2x € K  	  R# 5i):NéF   Nú -> Nr   )Ú.0ÚuÚinfos   &  r   Ú	<genexpr>Ú#cek_teks_threads.<locals>.<genexpr>a   s!   é € ÐIÁ±W°Q˜a �f˜X T¨$¨Õ0Ãùs   ‚:Né   Nz 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.Nz  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Úfindallr1   ÚappendÚjoinr   ÚsubÚreÚMIN_PARAGRAPH_CHARSÚfindÚMIN_PREAMBLE_CHARS)r   r3   r4   ÚnÚurlsÚmatir<   Úokr=   ÚdetailÚteks_tanpa_urlÚ	first_urlÚposÚpres   &&&           r   Úcek_teks_threadsrU   C   s  € ð �JˆJ�B×ÑÓ€DÜ˜Ó€AØˆA„vÜ  e WÐ,LÐMÓNÐNà„zÜØ�5�'Ð/°¨sÐ2BÀ6À(ð K'Ø'- hð /Ø˜$•Z�L ð%ó
ð 	
ô �>‰>˜$Ó€DØ€DÛˆÜ˜A“;‰ˆß‰rØ�K‰K˜˜	Ö"ñ ÷ Ø—‘ÑIÀÀRÆÓIÓIˆÜØ�5�'Ð+¬C°«I¨;°c¸&¸ð BLð Mó
ð 	
ô —Z‘Z  TÓ*€NÜ—V’V˜F C¨Ó8×>Ñ>Ó@€NÜ
ˆ>ÓÔ0Ô0ÜØ�5�'Ð,¬S°Ó-@Ð,Að BÜ$Ð%ð &4ð5ó
ð 	
÷ Ø˜•Gˆ	Ø�i‰i˜	Ó"ˆØ$'¨1¤Hˆd�4�Cˆj×ÑÔ °"ˆÜˆs‹8Ô(Ô(Ü"Ø�u�gÐ=¼cÀ#»h¸Zð 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    r:   ÚTeksu   âœ… u    karakter â€” AMAN dikirim.)é   )r	   rH   Úurllib.errorr"   Úurllib.requestÚMAX_THREADS_CHARSrI   rK   ÚcompilerC   Ú
ValueErrorr   r   r1   rU   r   Úsysr   ÚargvÚprintÚexitrO   r=   r3   Úhasilr0   r   r   r   Ú<module>rc      ss  ðñó, 
Û Û àÐ ØÐ ØÐ Ø	�ŠÐ3Ó	4€ôM�zô Mõ÷
;ð0 .<ÐK\÷ :ðz ˆzÕÛÙ
ˆ3�8‰8ƒ}�qÔÙÐGÔHÙÐEÔFØ�Š�ŒØ
‡x�x�…{�hÔÙ˜CŸH™H Q�KÓ(‰ˆˆDÙ§RÑ!¨_Ð=¸RÀÇÁÈÅ¸}ÈDÐQUÐPVÐWÔXØ�Š—b‘˜aÔ Ù˜sŸx™x›=¨1Ô,ˆC�H‰H�QŽK°&€EðÙ  §¡¨!¥¨eÓ4ˆÙ��U�G˜2™c %›j˜\Ð)DÐEÖFñ øð ô ÙˆaŒØ�Š��Šûðús   Ä7/E* Å*FÅ1FÆF