
ä¾T;  ã               @   so   d  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 a	 Gd d	 „  d	 ƒ Z
 d S)
z
The Command handler
é   )Úcommand)Úget_nameé    )Úreload)Úimport_moduleNc               @   sj   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d d	 „  Z d
 d „  Z d d „  Z	 d d „  Z
 d S)ÚCommandHandlerz: The command handler object - handles triggering commands c             C   së   | a  g  |  _ |  _ d d „  | Dƒ |  _ t j | ƒ |  _ x |  j D] } | | ƒ qH Wt j | ƒ |  _ d d „  |  j Dƒ |  _ |  j |  j ƒ |  _	 d d „  |  j Dƒ |  _
 |  j g  k rÐ t d ƒ ‚ t d t |  j ƒ ƒ d  S)Nc             S   s   g  |  ] } | j  ‘ q S© )Ú__name__)Ú.0Úpr   r   ú./home/sam/code/Infobot/utils/commandhandler.pyú
<listcomp>   s   	 z+CommandHandler.__init__.<locals>.<listcomp>c             S   s   g  |  ] } | j  ‘ q Sr   )Ú	main_hook)r
   Úcmdr   r   r   r      s   	 c             S   s   g  |  ] } | j  r | ‘ q Sr   )Úregex)r
   Úir   r   r   r      s   	 zNo commands found!z%d commands initialized.)ÚBOTÚinitializersÚcommandsÚloaded_pluginsr   Úplugins_to_initializersÚplugins_to_commandsZcommand_namesÚorganize_commandsÚcommand_helpZcommands_with_reÚRuntimeErrorÚprintÚlen)ÚselfÚbotÚpluginsÚfunctionr   r   r   Ú__init__   s    zCommandHandler.__init__c             C   sí   | t  j j ƒ  k r$ t | ƒ } n t t  j | ƒ } | |  j k rV |  j j | ƒ x9 |  j D]. } t | j	 ƒ j
 | ƒ r` |  j j | ƒ q` W|  j t j | ƒ 7_ t j | ƒ } x | D] } | t ƒ qÀ W|  j |  j ƒ |  _ | S)N)ÚsysÚmodulesÚkeysÚimpr   r   Úremover   r   r    Ú
startswithr   r   r   r   r   r   )r   ÚpluginZreloaded_pluginr   r   r   r   r   r   Úreload_plugin#   s    zCommandHandler.reload_pluginc             C   s“   | t  j j ƒ  k r d  St | ƒ } |  j j | j ƒ |  j t j	 | ƒ 7_ t j
 | ƒ } x | D] } | t ƒ qf W|  j |  j ƒ |  _ | S)N)r"   r#   r$   r%   r   Úappendr	   r   r   r   r   r   r   r   )r   Únamer(   r   r   r   r   r   Úload_plugin4   s    zCommandHandler.load_pluginc             C   ss   | t  j j ƒ  k r d  Sx9 |  j D]. } t | j ƒ j | ƒ r# |  j j | ƒ q# Wt  j | =|  j j | ƒ d S)NT)	r"   r#   r$   r   r   r    r'   r&   r   )r   r+   r   r   r   r   Úunload_pluginA   s    
zCommandHandler.unload_pluginc             C   sÔ   t  ƒ  } i  } | j d ƒ x3 | D]+ } t | j d ƒ r# | j | j j ƒ q# Wx$ | D] } | j | t  ƒ  i ƒ qY WxQ | D]I } t | j d ƒ rµ | | j j j | j ƒ q€ | d j | j ƒ q€ W~ | S)NÚunknownÚ	_category)ÚsetÚaddÚhasattrr    r/   Úupdater   )r   r   Z
categoriesr   r   Zcategoryr   r   r   r   M   s    	z CommandHandler.organize_commandsc             C   s+   x$ |  j  D] } | j | ƒ r
 | Sq
 Wd S)z. Try to trigger a command with hook <trigger> N)r   Úis_triggered_by)r   ÚtriggerÚcommand_r   r   r   r5   _   s    zCommandHandler.triggerc             C   s1   x* |  j  D] } | j | d d ƒr
 | Sq
 Wd S)z3 Try to trigger a command with shorthook <trigger> ÚshortTN)r   r4   )r   r5   r6   r   r   r   Útrigger_shortg   s    zCommandHandler.trigger_shortN)r	   Ú
__module__Ú__qualname__Ú__doc__r!   r)   r,   r-   r   r5   r8   r   r   r   r   r      s   r   )r;   Ú r   r   r%   r   Z	importlibr   r"   r   r   r   r   r   r   Ú<module>   s   