o
    jjn                     @   s   d dl T d dlmZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ dZdZd	gZd
ZG dd dZG dd deZee
eef ef ZG dd deZdS )    )*)
ApiWrapper)	DbManager)datetime)IterableOptionalSetTupleUnion)EventFu   小埃同学iM	?
3915014383c                   @   s   e Zd ZdZdZdefddZddefddZd	d
 Z	defddZ
ddefddZdefddZddefddZdefddZdefddZdefddZdefddZdS )Plugin raw_contextc                 C   s    t || _t|| _t | _d S N)r   	bot_eventr   apir   	dbmanager)selfr    r   &/home/dore/onebot/Bot_Ero/core/base.py__init__   s   

zPlugin.__init__messagereturnc                 C   s   dS NFr   r   
event_typer   r   r   match      zPlugin.matchc                 C   s   d S r   r   r   r   r   r   handle   r   zPlugin.handlec                 C   s   | j jd krdS | j jdkS )NFr   )r   	post_typer   r   r   r   
on_message      zPlugin.on_messagec                 C   sX   | j jd krdS | j j}t|dkr*|d }|d dkrdS |d d }| |kS dS NF   r   typetextdatar   r   lenstrip)r   keywordmessage_listmsgmsg_textr   r   r   on_full_match$   s   zPlugin.on_full_matchc                 G   sX   | j jd krdS | j j}t|dkrdS |d }|d dkr dS |d d  }||v S r$   r)   )r   keywordsr-   r.   r/   r   r   r   on_full_match_any0   s   zPlugin.on_full_match_anyc                 C   sL   | j jg krdS | j jd }|d dkr$|d dko#|d d  |kS dS )NFr   r&   r'   r(   )r   r   r+   )r   r,   r.   r   r   r   on_begin_with<   s    zPlugin.on_begin_withc                 C   s   | j jg krdS | j jd }|d dkrA|d d d}|d |kr?| j jd }|d dkr1dS |d d }|d| _dS dS dS NFr   r&   r'   r(    Tr   r   splitargs)r   commandr.   spraw_datar   r   r   
on_commandE   s   zPlugin.on_commandc                 G   sb   | j jg krdS | j jd }|d dkrdS |d d }|d}|d |v r/|d| _dS dS r4   r6   )r   commandsr;   	text_bodyr:   r   r   r   on_command_anyW   s   
zPlugin.on_command_anyc                 C   s   | j jd krdS | j jtv S r   )r   user_id
SUPER_USERr   r   r   r   
super_userd   r#   zPlugin.super_userc                 C   s,   | j jd krdS |  p| j jdddv S )NFroler   )adminowner)r   senderrB   getr   r   r   r   
admin_useri   s   zPlugin.admin_userNr   )r   )__name__
__module____qualname__namedescriptiondictr   boolr   r    r"   r0   r2   r3   r<   r?   rB   rH   r   r   r   r   r      s    	r   c                   @   sH   e Zd ZU dZdZeeedf B ed< defddZdde	fd	d
Z
dS )CommandPluginzBase for message command plugins.

    Declare COMMANDS (str or tuple of str) and match() auto-checks the
    first text segment against them.  self.cmd holds the matched word,
    self.args holds everything after it.
    r   .COMMANDSr   c                 C   s<   | j jD ]}|ddkr|di dd   S qdS )Nr&   r'   r(   r   )r   r   rG   r+   )r   segr   r   r   _first_textz   s
   zCommandPlugin._first_textr   c                 C   sv   |dkrdS |   }|sdS t| jtr| jfnt| j}|s!dS | }|d |vr-dS |d | _|dd  | _dS )Nr   Fr   r%   T)rT   
isinstancerR   strtupler7   cmdr8   )r   r   r'   cmdspartsr   r   r   r      s   
zCommandPlugin.matchNrI   )rJ   rK   rL   __doc__rR   rV   rW   __annotations__rT   rP   r   r   r   r   r   rQ   p   s
   
 rQ   c                   @   s   e Zd ZU dZdZeee  ed< dZ	eee
  ed< i Zedee
 deeeef  fddZd	edefd
dZd	edefddZdedefddZddefddZdS )TimedHeartbeatPluginz00:00NRUN_WEEKDAYSRUN_ANNUAL_DATESrawr   c                 C   s   t  }| D ]G}t|tr0| dd}|d}t|dkr q|t|d t|d f qt|t	t
frLt|dkrL|t|d t|d f q|S )N/-   r   r%   )setrU   rV   r+   replacer7   r*   addintrW   list)r`   outitemsrZ   r   r   r   _annual_dates_as_set   s   

 z)TimedHeartbeatPlugin._annual_dates_as_setnowc                 C   s,   t | }t|dd }|sdS | t|v S )Nr^   T)r&   getattr
isoweekdayrd   )r   rm   clsdaysr   r   r   _passes_weekday_filter   s
   z+TimedHeartbeatPlugin._passes_weekday_filterc                 C   s6   t | }t|dd }|sdS | |}|j|jf|v S )Nr_   T)r&   rn   rl   monthday)r   rm   rp   datesallowedr   r   r   _passes_annual_filter   s   
z*TimedHeartbeatPlugin._passes_annual_filterr   c                 C   s~   |dkrdS t  }|d}|| jkrdS | |sdS | |s$dS |d}t| j}| j	||kr8dS || j|< dS )NmetaFz%H:%Mz%Y-%m-%d %H:%MT)
r   rm   strftimeRUN_ATrr   rw   r&   rJ   _last_run_minuterG   )r   r   rm   current_minuterun_keyplugin_namer   r   r   should_run_on_heartbeat   s    






z,TimedHeartbeatPlugin.should_run_on_heartbeatr   c                 C   s
   |  |S r   )r   r   r   r   r   r      s   
zTimedHeartbeatPlugin.matchrI   )rJ   rK   rL   rz   r^   r   r   rg   r\   r_   AnnualDateItemr{   staticmethodr   r	   rl   r   rP   rr   rw   rV   r   r   r   r   r   r   r]      s   
 $r]   N)core.cqcore.apir   core.database_managerr   r   typingr   r   r   r	   r
   
core.eventr   only_to_me_flagNICKNAMErA   BOT_QQr   rQ   rg   rV   r   r]   r   r   r   r   <module>   s    `!