a
    :\                     @   s\   d Z ddlZddlZe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   |  drd|  d d}n~| dd}d| v }|rl|d dd}t|dkrxg |d  |d }n|d  }|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   $/home/sam/code/Infobot/core/parse.pyparse
   s    

r   c                 C   s   zJt |t t }|durH|| _t| jtkrBt| j| _t|}|W S W n ttfy   zt	|t  W n\   zt	|t  W n>   zt	|t t  W n   t	|t t  Y n0 Y n0 Y n0 Y n0 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}t ||D ]\}}t| || qd S )N)targetqual
to_replacereplacementflags)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 |D ]F}|dkrB|tjO }|dkrT|tjO }|dkrf|tjO }|dkr,d}q,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   s<   | j  D ],\}}|dr&|ds
td||f  q
d S )N_z%s: %s)__dict__itemsr   endswithprint)r+   r-   r.   r   r   r   debugT   s    r@   c              	   C   s   || j jvrdS | j j| D ]}|j| j j| ks4q|j}zV|rnt||rt||rt|s|W   S n t||rt|s|W   S W q ty   Y q0 q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|sdS t| }t|| t||j | jrNt| |j	rZ|j	}|
 }|jrt| |j|||jd|_nt| |j|||_|jsdS zht|j|j|j|j|j}d|v r|ddd dd }| |d||f W S | |d	||f W S  ty"   t  Y n0 dS )
z Perform the sedding Z	SedObjectN)r%   r   r   r   z* %s %sz<%s> %s)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   s.    


rP   )N)__doc__rO   r5   compilerF   r   r#   r/   r:   r@   rJ   rP   r   r   r   r   <module>   s   

