o
    j                     @  s
  d Z ddlmZ ddlZddlZddlmZ ddlm	Z	 ddl
m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 ee jjd d ZdZdd Zd7ddZd8ddZd9ddZd:ddZd;d!d"Z d<d%d&Z!d9d'd(Z"dd)d*d+d,d=d3d4Z#d>d5d6Z$dS )?uG   BotEro MCP 业务层：复用 checkin_gallery 与 group_alarm 逻辑。    )annotationsN)Path)Any)	DbManager)get_monday_to_monday)cancel_alarmcreate_alarmlist_alarms)get_checkin_status)fetch_checkins_paginatedpluginszgroup_alarm.pyremedy_checkinc                  C  sD   t jdt} | d u s| jd u rtdt j| }| j| |S )Nbotero_group_alarm_mcpu   无法加载 group_alarm 模块)	importlibutilspec_from_file_location_GROUP_ALARM_PATHloaderRuntimeErrormodule_from_specexec_module)specmod r   0/home/dore/onebot/Bot_Ero/botero_mcp/services.py_load_group_alarm   s   r   datar   returnstrc                 C  s   t jd| ddddS )NT)okr   F   ensure_asciiindentjsondumps)r   r   r   r   _ok      r'   messagec                 C  s   t jd| ddddS )NF)r   errorr    r!   r$   )r)   r   r   r   _err"   r(   r+   user_idc              
   C  @   zt t| W S  ty } ztt|W  Y d }~S d }~ww N)r'   r	   	Exceptionr+   r   r,   excr   r   r   
alarm_list&      r2   payloaddict[str, Any]c              
   C  p   zt t| |W S  ty  } ztt|W  Y d }~S d }~w ty7 } ztt|W  Y d }~S d }~ww r.   )r'   r   
ValueErrorr+   r   r/   )r,   r4   r1   r   r   r   alarm_create_structured-      r8   schedule_textc                 C  s   |pd  }|stdS zVt }||}t|trt|W S |\}}}t }|jt| ||d d|d}	|rI|\}
}}}d|	|
||| d}nd}t
|	d|	 d|d	 d
| d| d	dW S  tyz } ztt|W  Y d }~S d }~ww )N uJ   schedule_text 不能为空（与机器人 /闹钟 后正文格式相同）T)group_id
is_privaterecuru   （u
    循环）u   已设置闹钟 #u
   ，将于 z%Y-%m-%d %H:%Mu
    提醒你u   ：「u   」)idr)   )stripr+   r   _parse_create_body
isinstancer   r   add_group_alarmint_format_recur_descr'   strftimer/   )r,   r:   bodygaparsedfireclean_contentr>   dbaidkabcextrar1   r   r   r   alarm_create_from_text6   sB   



	rS   alarm_idrD   c              
   C  r6   r.   )r'   r   r7   r+   r   r/   )r,   rT   r1   r   r   r   alarm_cancel[   r9   rU   c              
   C  r-   r.   )r'   r
   r/   r+   r   r0   r   r   r   checkin_weekly_statusd   r3   rV         F)yearpage	page_sizeimages_onlyrY   
int | NonerZ   r[   r\   boolc          
   
   C  s   z0t dt|}t dtdt|}t| ||||d\}}}dd |D }t||||||dW S  tyH }	 ztt|	W  Y d }	~	S d }	~	ww )NrW   2   )r,   rY   rZ   r[   only_with_filec                 S  s"   g | ]}|j |j|jd udqS )N)r?   checkin_datehas_local_image)r?   ra   
image_path).0itr   r   r   
<listcomp>}   s    z(checkin_list_records.<locals>.<listcomp>)itemstotalrZ   r[   has_morerY   )maxrD   minr   r'   r/   r+   r   )
r,   rY   rZ   r[   r\   rg   rh   ri   rowsr1   r   r   r   checkin_list_recordsk   s4   
rm   c               
   C  s   zct  \} }t }|| |}i }|D ]+}t|d }t|dkr%|d nd}|tkr,q|d }||vs:||| k r>|||< qdd t| dd d	D }	t| 	d
d |	d
d t|	|	dW S  t
y{ }
 ztt|
W  Y d }
~
S d }
~
ww )NrW      r;   r    c                 S  s   g | ]	\}}||d qS ))r,   first_checkin_atr   )rd   uidtsr   r   r   rf      s    z-checkin_list_week_members.<locals>.<listcomp>c                 S  s   | d S )NrW   r   )xr   r   r   <lambda>   s    z+checkin_list_week_members.<locals>.<lambda>)key r   )
week_startweek_endcountmembers)r   r   search_all_user_checkin_ranger   len_REMEDYsortedrg   r'   splitr/   r+   )
start_dateend_daterL   rl   user_maprowrp   contentrq   ry   r1   r   r   r   checkin_list_week_members   s8   
r   )r   r   r   r   )r)   r   r   r   )r,   r   r   r   )r,   r   r4   r5   r   r   )r,   r   r:   r   r   r   )r,   r   rT   rD   r   r   )r,   r   rY   r]   rZ   rD   r[   rD   r\   r^   r   r   )r   r   )%__doc__
__future__r   importlib.utilr   r%   pathlibr   typingr   core.database_managerr   
core.utilsr   checkin_gallery.alarm_servicer   r   r	   checkin_gallery.checkin_servicer
   checkin_gallery.repositoryr   __file__resolveparentr   r|   r   r'   r+   r2   r8   rS   rU   rV   rm   r   r   r   r   r   <module>   s6    
	



	
%
	
(