
    `gj	                    d    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y)uE   QQBot shared utilities — User-Agent, HTTP helpers, config coercion.    )annotationsN)AnyDictList   )QQBOT_VERSIONc                 >    	 ddl m}   | d      S # t        $ r Y yw xY w)zAReturn the hermes-agent package version, or 'dev' if unavailable.r   versionzhermes-agentdev)importlib.metadatar   	Exceptionr
   s    P/root/.hermes/venv/lib/python3.12/site-packages/gateway/platforms/qqbot/utils.py_get_hermes_versionr      s'    .~&& s    	c            	     $   t         j                  j                   dt         j                  j                   dt         j                  j                   } t        j                         j                         }t               }dt         d|  d| d| d	S )zBuild 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     $$**+1S-=-=-C-C,DAcFVFVF\F\E]^Joo%%'G(*N=/:,b	SaRbbcdd    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    c                   | g S t        | t              r>| j                  d      D cg c]#  }|j                         s|j                         % c}S t        | t        t
        t        f      rA| D cg c]5  }t        |      j                         st        |      j                         7 c}S t        |       j                         rt        |       j                         gS g S c c}w c c}w )zCoerce config values into a trimmed string list.

    Accepts comma-separated strings, lists, tuples, sets, or single values.
    ,)
isinstancestrsplitstriplisttupleset)valueitems     r   coerce_listr0   <   s    
 }	%).S)9JTZZ\

JJ%$s+,.3Ids4y7HD	!II#&u:#3#3#5CJ=2= KIs   C$C$2C)C))returnr(   )r1   zDict[str, str])r.   r   r1   z	List[str])__doc__
__future__r   r   r   typingr   r   r   	constantsr   r   r   r$   r0   r#   r    r   <module>r6      s/    K "  
 " " $e"$>r    