3
$r[                 @   s   d dl mZmZ d dlmZmZ ddlZddlZddlZddl	Z	G dd dej
Zedd Zed	d
dd Zde_edd
dddd Zedddd Zedddd Zedddddd Zedddd d!d" Zed#d$ddd%d& ZdS )'   )initcommand)sugarlineify    Nc               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )IRCterpreterc             C   s6   || _ d| _d| _g | _tjd| _tjj	| | d S )N z6([A-Z][a-z]+Error|[A-Z][a-z]+Exception):?(?:\s+)?(.+)?)
botcurnickcurchancacherecompileTRACE_REGEXcodeInteractiveConsole__init__)selfZ	localVarsZbotinstance r    /opt/Infobot/plugins/standard.pyr   
   s    zIRCterpreter.__init__c             C   s   | j j| d S )N)r   append)r   datar   r   r   write   s    zIRCterpreter.writec             C   s   d|krdS dS )NzFile "<console>", line TFr   )r   r   r   r   r   is_exception   s    zIRCterpreter.is_exceptionc             C   s0   | j j|}|s|S |j \}}d||f }|S )Nu   ⌜ such 4%s so 4%s ⌟)r   searchgroups)r   	tracebackmatchexc_nameZexc_argsoutr   r   r   guru_meditate   s    
zIRCterpreter.guru_meditatec             C   sp   dj | jj }| j|r8t| | j|jddd }t|dkrfx t|D ]}| j	j
| j| qNW g | _d S )Nr   
r   r   )joinr   stripr   printr    rsplitlenr   r	   msgr   )r   r   liner   r   r   flushbuf"   s    
zIRCterpreter.flushbufc             C   sb   d| j j kr| | j d< || j d< || j d< || _|| _|  t_t_| j| tjt_| j	  d S )Nr   channick)
localskeysr
   r   sysstdoutinterppush
__stdout__r)   )r   r+   r*   r   r   r   r   run/   s    



zIRCterpreter.runN)	__name__
__module____qualname__r   r   r   r    r)   r3   r   r   r   r   r   	   s   
r   c             C   sR   t  | jd< | jd jt  | jd jtdtdd dd | jd d< d S )Ninterp_localsr   os)r   r8   c             S   s   dd t | D S )Nc             S   s   g | ]}|j d s|qS )__)
startswith).0ir   r   r   
<listcomp>A   s    z*init.<locals>.<lambda>.<locals>.<listcomp>)dir)xr   r   r   <lambda>A   s    zinit.<locals>.<lambda>Z_dir)r,   r   updateglobals
__import__)r	   r   r   r   r   ;   s
    r   Zsayz
^&$name .+c             C   s$   | j rttjj  | j|| d S )N)verboser$   datetimeutcnow_msg)r	   r+   r*   argr   r   r   cmd_sayC   s    rI   Traw)adminc             C   s   | j | d S )N)_send)r	   r+   r*   rH   r   r   r   cmd_rawK   s    rM   r"   z^&$name #.+c             C   s   | j d|  d S )NzJOIN :%s)rL   )r	   r+   r*   rH   r   r   r   cmd_joinO   s    rN   partz^&$name$c             C   s   | j d|  d S )NzPART :%s)rL   )r	   r+   r*   rH   r   r   r   cmd_partS   s    rP   quitz^&$name\s?(.+)?c             C   s6   |d d k	r | j d|d   n
| j d | j  d S )Nr   zQUIT :%sz	QUIT :bye)rL   gracefully_terminate)r	   r+   r*   r   rH   r   r   r   cmd_quitW   s    
rS   plugins&)ZcmdcharrK   c             C   s&   | j |ddjdd | jD   d S )NzLoaded plugins: z, c             s   s   | ]}|j jd d V  qdS ).r   N)r4   split)r;   Zplugr   r   r   	<genexpr>b   s    zcmd_plugins.<locals>.<genexpr>)r'   r"   rT   )r	   r+   r*   rH   r   r   r   cmd_plugins_   s    rY   evalz^>> c             C   s`   t |}d}y| jd }W n2 tk
rL   | jd }t||  }| jd< Y nX |j||| dS )z- eval *args -> Evaluate *args as python code.Nr0   r7   )r   r   KeyErrorr   r3   )r	   r+   r*   rH   ipZlclsr   r   r   cmd_evald   s    
r]   )Zutil.decoratorsr   r   Z	util.datar   r   r   rE   r.   r   r   r   rI   __core__rM   rN   rP   rS   rY   r]   r   r   r   r   <module>   s   2