
    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    B/home/ubuntu/.hermes/hermes-agent/gateway/platforms/qqbot/utils.py_get_hermes_versionr      sK    ......w~&&&   uus    
!!c            	         t           j        j         dt           j        j         dt           j        j         } t          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     $*^^S-=-C^^cFVF\^^Jo%%''G(**Nd=dd:ddddSa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 )zCoerce 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TZZ\\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Ids4yy7H7H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IeIIII#&u::#3#3#5#5=CJJ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"   