3
8ي[                 @   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   s   | j drd| j d
 d}n|| jdd}d| k}|rj|d jdd}t|dkrv|d j |d f}n|d j }|d |d dd |d || d	}|S )z Parse an IRC protocol message PING   )methodarg    z :r   N)r   hostr   argsraw)
startswithsplitrsplitlen)msginfopartsZhas_trailingr	    r   /opt/Infobot/core/parse.pyparse
   s    
r   c             C   s   yHt |t t }|dk	rF|| _t| jtkrBt| j| _t|}|S W n ttfk
r   yt	|t  W n\   yt	|t  W n>   yt	|t t  W n   t	|t t  Y nX Y nX Y nX Y nX d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W d S )Ntargetqual
to_replacereplacementflags)r$   r%   r&   r'   r(   )zipsetattr)	sedobjectgroupsZgroup_typeskvr   r   r   populate9   s    r/   c             C   s   d}d}|s(t | d| t | d| d S xN|D ]F}|dkrD|tjO }|dkrV|tjO }|dkrh|tjO }|dkr.d}q.W t | d| t | d| d S )	Nr   r   r(   countixsg)r*   re
IGNORECASEXS)r+   r(   r1   r0   itemr   r   r   	set_flags>   s"    



r:   c             C   sD   x>| j j D ]0\}}|jd s,|jd rtd||f  qW d S )N_z%s: %s)__dict__itemsr   endswithprint)r+   r-   r.   r   r   r   debugT   s    r@   c             C   s   || j jkrdS x| j j| D ]}|j| j j| ks6q|j}yN|rltj||rtj||rtj| r|S ntj||rtj| r|S W q tk
r   Y qX qW dS )N )	stateZmessageschannelchannelsr   r5   search	SED_REGEXBaseException)botZsedregexr    r!   r%   messager   r   r   r   get_messageY   s    $
rJ   c             C   s&  t dt i }tj|sdS tj|j }t|| t||j | jrNt| |j	rZ|j	}|j
 }|jrt| |j|||jd|_nt| |j|||_|jsdS ydtj|j|j|j|j|j}d|kr|jddd dd	 }| j|d||f S | j|d||f S  tk
r    tj  Y nX dS )
z Perform the sedding Z	SedObjectN)r%   r   r   z* %s %sz<%s> %sr   )r   r   rF   matchr,   r/   r:   r(   r@   r$   lowerr%   rJ   r&   r   r5   subr'   r0   r   rG   	tracebackZ	print_exc)rH   r    r!   r   r3   r,   Znew_msgr   r   r   sedk   s0    

 rP   )N)__doc__rO   r5   compilerF   r   r#   r/   r:   r@   rJ   rP   r   r   r   r   <module>   s   

