3
z|[                 @   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G dd dej	Z
edd Zed	d
dddd Z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/core.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 )Nz4%s: %s)r   searchgroups)r   	tracebackmatchexc_nameZexc_argsoutr   r   r   guru_meditate   s    zIRCterpreter.guru_meditatec             C   sh   dj | jj }| j|r0| j|jddd }t|dkr^x t|D ]}| jj	| j
| qFW g | _d S )Nr   
r   r   )joinr   stripr   r    rsplitlenr   r	   msgr   )r   r   liner   r   r   flushbuf    s    
zIRCterpreter.flushbufc             C   sj   d| j j kr| | j d< || j d< || j d< || _|| _|  t_t_| j| tjt_tj	t_| j
  d S )Nr   channick)localskeysr
   r   sysstdoutstderrpush
__stdout__
__stderr__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>?   s    z*init.<locals>.<lambda>.<locals>.<listcomp>)dir)xr   r   r   <lambda>?   s    zinit.<locals>.<lambda>Z_dir)r+   r   updateglobals
__import__)r	   r   r   r   r   9   s
    r   Zsayz
^&$name .+T)authc             C   s2   d|kr"|j dr"|jdd\}}| j|| d S )N #r   )r:   split_msg)r	   r*   r)   argr   r   r   cmd_sayA   s    rJ   rawc             C   s   | j | d S )N)_send)r	   r*   r)   rI   r   r   r   cmd_rawG   s    rM   r"   z^&$name #.+c             C   s   | j d|  d S )NzJOIN :%s)rL   )r	   r*   r)   rI   r   r   r   cmd_joinK   s    rN   partz^&$name$c             C   s   | j d|  d S )NzPART :%s)rL   )r	   r*   r)   rI   r   r   r   cmd_partO   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   rI   r   r   r   cmd_quitS   s    
rS   plugins&)cmdcharrD   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   rG   )r;   Zplugr   r   r   	<genexpr>^   s    zcmd_plugins.<locals>.<genexpr>)r&   r"   rT   )r	   r*   r)   rI   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.NZinterpr7   )r   r   KeyErrorr   r3   )r	   r*   r)   rI   ipZlclsr   r   r   cmd_eval`   s    
r]   )Zutil.decoratorsr   r   Z	util.datar   r   r   r-   r   r   r   rJ   rM   rN   rP   rS   rY   r]   r   r   r   r   <module>   s   1