§
    ‰eîi	  ã                  óf   — d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
 dd	„Zdd
„Zdd„Zdd„ZdS )uE   QQBot shared utilities â€” User-Agent, HTTP helpers, config coercion.é    )ÚannotationsN)ÚAnyÚDictÚListé   )ÚQQBOT_VERSIONÚreturnÚstrc                 óH   — 	 ddl m}   | d¦  «        S # t          $ r Y dS w xY w)zAReturn the hermes-agent package version, or 'dev' if unavailable.r   ©Úversionzhermes-agentÚdev)Úimportlib.metadatar   Ú	Exceptionr   s    ú?/home/div/.hermes/hermes-agent/gateway/platforms/qqbot/utils.pyÚ_get_hermes_versionr      sK   € ðØ.Ð.Ð.Ð.Ð.Ð.Øˆw�~Ñ&Ô&Ð&øÝð ð ð Øˆuˆuðøøøs   ‚ “
! !c            	     óþ   — t           j        j        › dt           j        j        › dt           j        j        › �} t          j        ¦   «                              ¦   «         }t          ¦   «         }dt          › d| › d|› d|› d�	S )zæBuild a descriptive User-Agent string.

    Format::

        QQBotAdapter/<qqbot_version> (Python/<py_version>; <os>; Hermes/<hermes_version>)

    Example::

        QQBotAdapter/1.0.0 (Python/3.11.15; darwin; Hermes/0.9.0)
    ú.zQQBotAdapter/z	 (Python/z; z	; Hermes/ú))
ÚsysÚversion_infoÚmajorÚminorÚmicroÚplatformÚsystemÚlowerr   r   )Ú
py_versionÚos_nameÚhermes_versions      r   Úbuild_user_agentr!      s   € õ Ô$Ô*Ð^Ð^­SÔ-=Ô-CÐ^Ð^ÅcÔFVÔF\Ð^Ð^€JÝŒoÑÔ×%Ò%Ñ'Ô'€GÝ(Ñ*Ô*€NØd�=ÐdÐd°:ÐdÐdÀÐdÐdÐSaÐdÐdÐdÐdó    úDict[str, str]c                 ó&   — ddt          ¦   «         dœS )u  Return standard HTTP headers for QQBot API requests.

    Includes ``Content-Type``, ``Accept``, and a dynamic ``User-Agent``.
    ``q.qq.com`` requires ``Accept: application/json`` â€” without it,
    the server returns a JavaScript anti-bot challenge page.
    zapplication/json)zContent-TypeÚAcceptz
User-Agent)r!   © r"   r   Úget_api_headersr'   *   s"   € ð +Ø$Ý&Ñ(Ô(ðð ð r"   Úvaluer   ú	List[str]c                óX  — | €g S t          | t          ¦  «        rd„ |                      d¦  «        D ¦   «         S t          | t          t          t
          f¦  «        rd„ | D ¦   «         S t          | ¦  «                             ¦   «         r"t          | ¦  «                             ¦   «         gng S )z‚Coerce config values into a trimmed string list.

    Accepts comma-separated strings, lists, tuples, sets, or single values.
    Nc                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r&   )Ústrip©Ú.0Úitems     r   ú
<listcomp>zcoerce_list.<locals>.<listcomp>D   s-   € ÐJÐJÐJ ¸T¿ZºZ¹\¼\ÐJ�—
’
‘”ÐJÐJÐJr"   Ú,c                ó’   — g | ]D}t          |¦  «                             ¦   «         ¯#t          |¦  «                             ¦   «         ‘ŒES r&   )r
   r,   r-   s     r   r0   zcoerce_list.<locals>.<listcomp>F   s=   € ÐIÐIÐI dµs¸4±y´y·²Ñ7HÔ7HÐI•�D‘	”	—’Ñ!Ô!ÐIÐIÐIr"   )Ú
isinstancer
   ÚsplitÚlistÚtupleÚsetr,   )r(   s    r   Úcoerce_listr8   <   s¦   € ð
 €}Øˆ	Ý�%�ÑÔð KØJÐJ¨¯ª°SÑ)9Ô)9ÐJÑJÔJÐJÝ�%�$¥¥sÐ+Ñ,Ô,ð JØIÐI¨eÐIÑIÔIÐIÝ#& u¡:¤:×#3Ò#3Ñ#5Ô#5Ð=�C�‰JŒJ×ÒÑÔÐÐ¸2Ð=r"   )r	   r
   )r	   r#   )r(   r   r	   r)   )Ú__doc__Ú
__future__r   r   r   Útypingr   r   r   Ú	constantsr   r   r!   r'   r8   r&   r"   r   ú<module>r=      s½   ðØ KÐ Kà "Ð "Ð "Ð "Ð "Ð "à €€€Ø 
€
€
€
Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $ðð ð ð ðeð eð eð eð"ð ð ð ð$>ð >ð >ð >ð >ð >r"   