U
    :\                     @   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| k}|rj|d dd}t|dkrv|d  |d f}n|d  }|d |d dd	 |d || d
}|S )z Parse an IRC protocol message PING)methodarg    z :   r   N)r   Z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k	rH|| _t| jtkrBt| j| _t|}|W S W n ttfk
r   zt	|t  W n\   zt	|t  W n>   z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}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'   r0   r/   itemr   r   r   	set_flags>   s"    


r9   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k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k
r   Y qX qdS )N )	stateZmessagesZchannelZchannelsr   r4   search	SED_REGEXBaseException)botZsedregexr   r    r$   messager   r   r   r   get_messageY   s    "rG   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|kr|ddd dd }| |d||f W S | |d	||f W S  tk
r$   t  Y nX dS )
z Perform the sedding Z	SedObjectN)r$   r   r   r   z* %s %sz<%s> %s)r   r   rC   matchr+   r.   r9   r'   r?   r#   lowerr$   rG   r%   r   r4   subr&   r/   r   rD   	traceback	print_exc)rE   r   r    r   r2   r+   Znew_msgr   r   r   sedk   s0    

 rN   )N)__doc__rL   r4   compilerC   r   r"   r.   r9   r?   rG   rN   r   r   r   r   <module>   s   

