o
    jj[!                     @   sl   d dl m Z  d dlmZ d dlmZ d dlmZmZ d dlm	Z	 ddl
mZmZmZ e	G dd	 d	eZd
S )    )datetime)Tuple)Plugin)attext)register_plugin   )_format_recur_desc_next_recurring_fire_parse_create_bodyc                   @   s   e Zd ZdZdZdZdd Zdd Zdd	 Zd
e	e
e
f fddZdd Zdd Zdd Zde
fddZde
fddZdd ZdS )GroupAlarmPlugingroup_alarmu)   群聊或私聊定时闹钟：/闹钟 …Nc                 C   s$   |dkr|   S |dkr|  S dS )NmessagemetaF)_match_text_command_should_scan_alarms)self
event_type r   9/home/dore/onebot/Bot_Ero/plugins/group_alarm/__init__.pymatch   s
   zGroupAlarmPlugin.matchc                 C   sh   | j jsdS | j jd }|ddkrdS |d d  }|dr*d|dd   }|d	p3|d
S )NFr   typer   data   ／/r      /闹钟   /鬧鐘)	bot_eventr   getstrip
startswith)r   m0tr   r   r   r      s   
z$GroupAlarmPlugin._match_text_commandc                 C   s*   t  }|d}tj|krdS |t_dS )N%Y-%m-%d %H:%MFT)r   nowstrftimer   _last_alarm_scan_minute)r   r$   keyr   r   r   r   #   s   

z$GroupAlarmPlugin._should_scan_alarmsreturnc                 C   sl   | j jd d d  }|drd|dd   }|dr*d|tdd   fS d|tdd   fS )	Nr   r   r   r   r   r   r   r   )r   r   r   r    len)r   rawr   r   r   _command_body+   s   

zGroupAlarmPlugin._command_bodyc                 C   s   | j jdkr|   d S | j jr| j jd ddkrd S |  \}}|s+|   d S |d dd }|dv r=|   d S |dv rR|t	|d  
 }| | d S | | d S )N
meta_eventr   r   r   r   )u   一览u   一覽u   清單u   清单)u   取消u   撤銷)r   	post_type_handle_meta_duer   r   r+   _send_usagesplit_handle_listr)   r   _handle_cancel_handle_create)r   _bodyfirstrestr   r   r   handle3   s$   
zGroupAlarmPlugin.handlec                 C   s   | j td d S )Nu  用法：
· 「X年X月X日」无「后」— 具体日历日，可只写年/月/日或任意组合（缺省补当前年、月或 1 日）；亦可用 YYYY-MM-DD（与「YYYY年MM月DD日」等价）。
· 「X年X月X日X时/小时X分/分钟后」— 相对当前时刻的偏移；未写的年/月/日/时/分视为 0；可与独立 HH:MM 并存，若本段内写了时/分则以本段为准。
· 任意闹钟的触发时刻须距当前至少满 5 分钟（不足 5 分钟不可设，刚好 5 分钟可以）。
· 循环（须写在开头，且不能与紧接的「…日后」或定时用具体日历日混用）：
  「每天」「每日」— 等价于每 1 天；「每N日」或「每N天」— 每隔 N 天；「每周一」…「每周日」或「每星期一」…「每星期日」；
  「每年M月D日」；「每月D日」。
· 可同时写 HH:MM；无时间时，具体日/循环为当天当前时刻；相对「…后」若未写时/分，则为偏移后沿用当前时刻（否则以段内时/分为准）。
· /闹钟 HH:MM 内容 — 无日期时，为当天该时刻；若该时刻已过则无法设置。
须至少包含上述之一，且必须有文字内容。
群聊与私聊均可设置；到点后在原会话中提醒。
/闹钟、/鬧鐘 一览／一覽／清單 — 查看本人待触发闹钟
/闹钟、/鬧鐘 取消／撤銷 <编号> — 取消对应闹钟（仅本人创建）；亦可用全形「／」代替「/」。)apisend_msgr   )r   r   r   r   r/   G   s
   zGroupAlarmPlugin._send_usagec              	   C   s  | j j}| j j}| jj||}|s| jtd d S g }|D ][\}}}}}	}
}}t	|dkr2|n|d d d }|p=dd d }t
|pFdrqt
|	pLddkrqtt
|	t
|
pXdt
|p]dt
|pbd}|d|||| q |d||| q | jtd	d
|  d S )Nu!   你还没有待触发的闹钟。(   u   …    r   u   #{} · {} · {} · {}u   #{} · {} · {}u   待触发闹钟：

)r   group_iduser_id	dbmanageralarmpendingr9   r:   r   r)   intr	   appendformatjoin)r   giduidrowslinesridfatcis_recrkrarbrcpreviewtnextrecr   r   r   r1   _   s    *zGroupAlarmPlugin._handle_listr7   c                 C   sp   |  s| jtd d S t|}| jj|| jj	| jj
}|r.| jtd| d S | jtd d S )Nuf   请使用：/闹钟 取消 <编号> 或 /鬧鐘 撤銷 <编号>（编号见「一览／一覽」）。u   小埃已经取消闹钟 #{}。uH   取消失败：编号不存在、已触发或不是你创建的闹钟。)isdigitr9   r:   r   rD   rA   rB   cancelr   r@   r?   rF   )r   r7   aidokr   r   r   r2   q   s   zGroupAlarmPlugin._handle_cancelr5   c              	   C   s   t |}t|tr| jt| d S |\}}}| jjd u }| jj	j
| jj||| jj||d}|rB|\}}	}
}dt||	|
|}nd}| jtd||d|| d S )N)
is_privaterecuru   （{} 循环）r<   uH   小埃记住了，已设置闹钟 #{}，将于 {} 提醒你{}：「{}」r#   )r   
isinstancestrr9   r:   r   r   r?   rA   rB   addr@   rF   r	   r%   )r   r5   parsedfireclean_contentr\   is_privrY   kabrN   extrar   r   r   r3   |   s2   

zGroupAlarmPlugin._handle_createc              	   C   s  | j }t }|j|D ]}|d }|d }|d }|d }|d }t|d p)d}	t|d p1d}
t|d p9d}t|d	 pAd}t|d
 pId}t|d pQd}|pVdd d }d||}|
r|dkr|	ry| jdt|t	|fd n| jdt|t
t|t	dt	|fd t|d}t||||||}|j||| q|j|sq|	r| jdt|t	|fd q| jdt|t
t|t	dt	|fd qd S )Nr   r                        	   
   r<   r=   u2   预约「{}」的小埃提醒服务来了喵： {}send_private_msg)r@   r   send_group_msgr>   )r?   r   z%Y-%m-%d %H:%M:%S)rA   r   r$   rB   duerD   rF   r9   call_apir   r   strptimer
   advance
mark_fired)r   dbr$   rowrY   rH   creator_uidcontentrM   rc   rO   rP   rQ   rR   rS   
when_labellineprev_dtnxtr   r   r   r.      sZ   z!GroupAlarmPlugin._handle_meta_due)__name__
__module____qualname__namedescriptionr&   r   r   r   r   r^   r+   r8   r/   r1   r2   r3   r.   r   r   r   r   r      s    r   N)r   typingr   	core.baser   core.cqr   r   
core.utilsr   parserr	   r
   r   r   r   r   r   r   <module>   s    