3
؊[G                 @   s:  d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lZdd	lZdd	lZdd	lZd	ad
d Zdd Zedd ZdegiZe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( Zed)d*ddd+d, Zed-d. Zd	S )/z<
Info functionality

* depends: database, auth_ng, wait_for
   )	coroutine)commandinitprocess_privmsg)Substitution)wait_for_auth)get_doc    )partialNc              C   s.   t j d d j} dd tj| D }|d S )Nr   r	   c             S   s   g | ]}t j|r|qS  )inspect
isfunction).0xr   r   /opt/Infobot/plugins/infobot.py
<listcomp>   s    zcaller.<locals>.<listcomp>)r   stackf_codegcget_referrers)code_obj	referrersr   r   r   caller   s    r   c                s>   t |\}}}t| ||||\} |r:t| | fdd d S )Nc                s   t   j| fS )N)nextsend)authed)crr   r   <lambda>   s    zaddinfo.<locals>.<lambda>)r   addinfo_innerr   )botpmsgnickchanmsgretr   )r   r   addinfo   s    r%   c             c   s  t jd|}|sdV  d|kr0| j|d dV  |d jd\}}|jdd }|jddd }d	V  d V }	|	s| j|d
 d V  d|kr|j d }
tjd||
fj d }|s| j|d n| j|d||
f  n$tjd||||f | j|d|  d V  d S )Nz^!add .+F zUsage: !add <info>host@!r   Tz@You are not registered with NickServ or not properly identified.alias   zSELECT addalias(%s, %s);r	   zHError setting alias; you are creating an infinitely looping alias chain.z2The info of your current nick %s now points to %s.zSELECT addinfo(%s, %s, %s, %s);zInfo set to '%s')researchr#   splitnoticedbexecutefetchone)r   r!   r"   r#   r    muserr'   info	is_authedr*   successr   r   r   r      s.    r   PRIVMSGZinfohistz^!$name(\s|$)c             C   s   |s
d}nyt |}W n   d}Y nX tjd|fj }|sP| j|dj|S xVtt|ddd t |t |d  D ](\}}| j|d|||d |d f  q|W dS )	z$!infohist -> get your info history. r	   z'SELECT nick, info FROM infohistory(%s);zNo info found for {0}.Nr      u   #%d: %s →  %s: %s)intr0   r1   fetchallr/   formatlist	enumerate)r   r!   r"   grargr5   nitemr   r   r   getinfohistG   s    
4rD   inforestorez^!$name(?:\s|$)T)pass_privmsgc       	      C   s   yt |}W n   | j|t S |s4| j|t S |d jd\}}|jdd }tjd|fj }|s|| j|dj|S || }tjd||||d f | j|d|d   d	S )
z6!inforestore <n> -> set your info to a previous info. r'   r(   r)   r   z'SELECT nick, info FROM infohistory(%s);zNo info found for {0}.zSELECT addinfo(%s, %s, %s, %s);zInfo set to '%s'N)	r;   _msgr   r.   r0   r1   r<   r/   r=   )	r   r!   r"   rA   r    r4   r'   r5   Ztosetr   r   r   rE   Z   s    r5   z^(!|@)$name(\s|$)c             C   s   |s| j |t S tjd|fj }|d dkr>t| j |}nt| j|}|s\|dj|S |d j |j kr|d||d f S |d||d |d f  dS )	z0 !info <nick> -> get the info for a given user. z SELECT nick, info FROM info(%s);r	   r(   z:No info found for {0}. Use '!add <info>' to add your info.z%s: %sr   u   %s → %s: %sN)	rG   r   r0   r1   r2   r
   r/   r=   lower)r   r!   r"   r@   rA   r5   msgfnr   r   r   getinfos   s    rJ   zdel|rmz^!($name)(\s|$)c             C   sv   | s|d	kr| j |t S | jj|s4| j|dS |dkrXtjd|f | j|d ntjd|f | j|d dS )
z) !del <type> -> delete 'alias' or 'info' r*   r5   z@You are not registered with NickServ or not properly identified.zSELECT delalias(%s);z6Your nick now points to itself instead of to an alias.zSELECT delinfo(%s);zDeleted info.N)r*   r5   )rG   r   authr6   r/   r0   r1   )r   r!   r"   _rA   r   r   r   rmalias   s    rM   appendc       	      C   s   |s| j |t S |d jd\}}|jdd }| jj|sJ| j|dS tjd|fj \}}|d| 7 }tjd||||f | j|d	|  d
S )z/ !append <info> -> Append <info> to your info. r'   r(   r)   r   z@You are not registered with NickServ or not properly identified.zSELECT nick, info FROM info(%s)r&   zSELECT addinfo(%s, %s, %s, %s);zInfo set to '%s'N)	rG   r   r.   rK   r6   r/   r0   r1   r2   )	r   r!   r"   rA   r    r4   r'   r*   r5   r   r   r   
appendinfo   s    rO   Zsql)rK   c             C   sL   t j| y(| j|ddjdd t j D   W n   tj  Y nX d S )Nz%sz, c             S   s   g | ]}t t|qS r   )strr>   )r   ir   r   r   r      s    zexecsql.<locals>.<listcomp>)r0   r1   rG   joinr<   	traceback	print_exc)r   r!   r"   rA   r   r   r   execsql   s
    
(rU   sedz
^!$name .+c             C   s   t jd|fj }|d jd\}}|jdd }| jj|sJ| j|dS yt|}W n, tk
r }	 z| j|d|	 S d }	~	X nX |j	|d }
|d j
 |j
 kr| j|d	|
  t jd
||||
f | j|d|
  d S )Nz SELECT nick, info FROM info(%s);r'   r(   r)   r   z@You are not registered with NickServ or not properly identified.z	Error: %sr	   zgNote: because your current nick is an alias, your alias willbe removed and your info will be set to %r.zSELECT addinfo(%s, %s, %s, %s);zInfo set to '%s')r0   r1   r2   r.   rK   r6   r/   r   	TypeErrordorH   )r   r!   r"   rA   r    r5   r4   r'   subeZnewinfor   r   r   sedinfo   s    r[   c             C   s   | j d ad S )Nr0   )datar0   )r   r   r   r   r      s    r   )__doc__utilr   Zutil.decoratorsr   r   r   rV   r   wait_forr   Z	util.datar   	functoolsr
   r,   rS   r   r   r0   r   r%   r   __callbacks__rD   rE   rJ   rM   rO   rU   r[   r   r   r   r   <module>   s.   '
