î
_ó¤Wæ  ã               @   sˆ   d  Z  d d l Z d d l Z e j d ƒ Z d d „  Z d d „  Z d d	 „  Z d
 d „  Z d d „  Z	 d d d „ Z
 d d „  Z d S)z
IRC Parser - parse.py
é    Nz=^(?:(\S+)[:,])?(?:(.+?)/)?s/(.+?)/([^/]+)/?(?:([gixs]{0,4}))?c             C   sw   |  j  d ƒ r0 i d d 6|  j ƒ  d
 d 6} nC |  j d d ƒ } i | d d 6| d d d … d	 6| d d 6} | S)z Parse an IRC protocol message ÚPINGÚmethodé   Úargú é   r   NÚhostéÿÿÿÿ)Ú
startswithÚsplit)ÚmsgÚinfoZsplitmsg© r   ú/opt/Infobot/utils/parse.pyÚparse
   s    !#r   c             C   s  yk t  | t ƒ  t ƒ  ƒ } | d k	 rj | |  _ t |  j ƒ t k rf t |  j ƒ |  _ t | ƒ } n  | SWn‘ t t f k
 rþ y t	 | t ƒ  ƒ Wnb y t	 | t ƒ  ƒ WnC y t	 | t ƒ  t ƒ  ƒ Wn t	 | t ƒ  t ƒ  ƒ Yn XYn XYn XYn Xd S)z Evaluate python code. N)
ÚevalÚglobalsÚlocalsZleoÚtypeÚtupleÚlistÚ	NameErrorÚSyntaxErrorÚexec)ÚselfÚnickÚchanr   Úoutputr   r   r   Úevaluate   s&    	r   c             C   s:   d } x- t  | | ƒ D] \ } } t |  | | ƒ q Wd  S)NÚtargetÚqualÚ
to_replaceÚreplacementÚflags)ztargetzqualz
to_replacezreplacementzflags)ÚzipÚsetattr)Ú	sedobjectÚgroupsZgroup_typesÚkÚvr   r   r   Úpopulate0   s    r*   c             C   sÔ   d } d } | s6 t  |  d | ƒ t  |  d | ƒ d  Sxw | D]o } | d k r_ | t j O} n  | d k r{ | t j O} n  | d k r— | t j O} n  | d k r= d } q= q= Wt  |  d | ƒ t  |  d | ƒ d  S)	Nr   r   r#   ÚcountÚiÚxÚsÚg)r%   ÚreÚ
IGNORECASEÚXÚS)r&   r#   r,   r+   Úitemr   r   r   Ú	set_flags5   s"    r5   c             C   s[   xT |  j  j ƒ  D]C \ } } | j d ƒ s< | j d ƒ r t d | | f ƒ q q Wd  S)NÚ_z%s: %s)Ú__dict__Úitemsr
   ÚendswithÚprint)r&   r(   r)   r   r   r   ÚdebugK   s     r;   c             C   sÝ   | |  j  j k r d SxÀ |  j  j | D]® } | j |  j  j | k sL q' n  | j } yk | r™ t j | | ƒ r¿ t j | | ƒ r¿ t j | ƒ r¿ | Sn& t j | | ƒ r¿ t j | ƒ r¿ | SWq' t k
 rÔ Yq' Xq' Wd S)NÚ )	ÚstateZmessagesÚchannelZchannelsr   r0   ÚsearchÚ	SED_REGEXÚBaseException)ÚbotZsedregexr   r   r    Úmessager   r   r   r   Úget_messageP   s    	4"	rD   c             C   sš  t  d t ƒ  i  ƒ } t j | ƒ s( d St j | ƒ j ƒ  } t | | ƒ t | | j ƒ |  j rp t | ƒ n  | j	 r… | j	 } n  | j
 ƒ  } | j rÁ t |  | j | | d | j ƒ| _ n t |  | j | | ƒ | _ | j sé d SyŽ t j | j | j | j | j | j ƒ } d | k r\| j d d ƒ d d d	 … } |  j | d | | f ƒ S|  j | d | | f ƒ SWn t k
 r•t j ƒ  Yn Xd S)
z Perform the sedding Z	SedObjectNr    úr   r   z* %s %sz<%s> %sr	   )r   r   r@   Úmatchr'   r*   r5   r#   r;   r   Úlowerr    rD   r!   r   r0   Úsubr"   r+   r   rA   Ú	tracebackZ	print_exc)rB   r   r   r   r.   r'   Znew_msgr   r   r   Úsedb   s0    			'	 * rJ   )Ú__doc__rI   r0   Úcompiler@   r   r   r*   r5   r;   rD   rJ   r   r   r   r   Ú<module>   s   
