
ä¾TJ
  ã               @   sx   d  Z  d d l m Z m Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd	 d
 „  d
 e	 ƒ Z
 d S)z2
ServerState, Channel and ChannelHandler objects.
é   )ÚChannelÚUserDictc               @   s   e  Z d  Z d d „  Z d S)ÚFancySetc             C   s   |  j  | ƒ |  j | ƒ d  S)N)ÚdiscardÚadd)ÚselfÚoÚn© r
   ú&/home/sam/code/Infobot/utils/sstate.pyÚreplace   s    zFancySet.replaceN)Ú__name__Ú
__module__Ú__qualname__r   r
   r
   r
   r   r      s   r   c                   s"   e  Z d  Z ‡  f d d †  Z ‡  S)ÚDotDictc                s6   | d k r& | |  j  ƒ  k r& |  | St ƒ  j | ƒ S)NÚkeys)r   ÚsuperÚ__getattribute__)r   Úname)Ú	__class__r
   r   r      s    zDotDict.__getattribute__)r   r   r   r   r
   r
   )r   r   r      s   r   c                   sX   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d d	 „  Z ‡  f d
 d †  Z ‡  S)ÚChannelHandlerz  A class that handles channels. c             C   sœ   t  | ƒ t k r. |  j | t | ƒ i ƒ nj t  | ƒ t k r‚ | |  j ƒ  k ri |  j |  | j | ƒ |  j | j | i ƒ n t d t |  ƒ ƒ ‚ d  S)Nz:Type of argument passed to %s.add should be Channel or str)ÚtypeÚstrÚupdater   ÚvaluesÚupdate_channelr   Ú	TypeError)r   Úchannelr
   r
   r   r      s    zChannelHandler.addc             C   s   d S)Nr   r
   )r   r
   r
   r   Ú__str__    s    zChannelHandler.__str__c             C   s^   | | j  ƒ  k s t ‚ t ƒ  } x6 |  j ƒ  D]( } | | j j ƒ  k r. | j | ƒ q. W| S)N)ÚlowerÚAssertionErrorr   r   Úusersr   r   )r   ÚuserZ	channels_Úvr
   r
   r   Úget_channels_for#   s    	zChannelHandler.get_channels_forc             G   s*   | d } | d } | j  | j  O_  d  S)Né    r   )r!   )r   ÚargsZto_mergeZ
merge_withr
   r
   r   r   +   s    

zChannelHandler.update_channelc                sm   | d k r. d | |  j  ƒ  k r. |  d | S| t t ƒ k rP t ƒ  j | ƒ St d |  | | f ƒ ‚ d  S)Nr   ú#z9'%s' object has no attribute '%s', have you joined '#%s'?)r   Údirr   r   r   ÚAttributeError)r   r   )r   r
   r   r   0   s    zChannelHandler.__getattribute__)	r   r   r   Ú__doc__r   r   r$   r   r   r
   r
   )r   r   r      s   r   c               @   sR   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d d	 „  Z d
 d „  Z d S)ÚServerStatezp A class that holds the active channels and admins and some more things about the bot that are server-specific. c             C   sg   | |  _  t ƒ  |  _ t ƒ  |  _ d |  _ g  |  _ i  |  _ t ƒ  |  _ t	 | ƒ |  _
 t ƒ  |  _ d  S)NZJames)Úbotr   ÚadminsÚmutedÚnickZnoticesÚmessagesr   Úchannelsr   r!   r   Úevents)r   r,   r
   r
   r   Ú__init__;   s    				zServerState.__init__c             C   s   |  j  j | j ƒ  ƒ d S)z  Add an user to the admin list. N)r-   r   r   )r   r/   r
   r
   r   Ú	add_adminF   s    zServerState.add_adminc             C   s   |  j  j | j ƒ  ƒ d S)z% Remove an user from the admin list. N)r-   Úremover   )r   Údnickr
   r
   r   Ú	del_adminJ   s    zServerState.del_adminc             C   s   |  j  j | j ƒ  ƒ d S)z Add an user to the mute list. N)r.   r   r   )r   r/   r
   r
   r   ÚmuteN   s    zServerState.mutec             C   s   |  j  j | j ƒ  ƒ d S)z% Remove an user from the block list. N)r.   r5   r   )r   r6   r
   r
   r   ÚunmuteR   s    zServerState.unmuteN)	r   r   r   r*   r3   r4   r7   r8   r9   r
   r
   r
   r   r+   9   s   r+   N)r*   r   r   r   Úsetr   Údictr   r   Úobjectr+   r
   r
   r
   r   Ú<module>   s
   &