o
    fy                     @   s  d dl Z d dlZd dlmZ d dl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Zd dlmZ d dlZd dlmZmZmZ d dlZd dlZd dlmZmZmZmZmZmZ d d	lmZmZmZm Z  d dl!Z!d dl"Z"d d
l#m$Z$m%Z%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+ d dl,m-Z- e. Z/e/0dZ1e/0dZ2e/0dZ3e/0dZ4e/0dZ5e/0dZ6e/0dZ7e/0dZ8e/0dZ9G dd dej:Z;dd Z<dd Z=dd Z>dd Z?d d! Z@d"d# ZAd$d% ZBd&d' ZCd(d) ZDd*d+ ZEd,d- ZFd.d/ ZGd0d1 ZHd2d3 ZId4d5 ZJd6d7 ZKd8d9 ZLd:d; ZMd<d= ZNG d>d? d?ejOjPZQG d@dA dAejOjPZRG dBdC dCejOjSZTG dDdE dEejOjPZUG dFdG dGejOjPZVG dHdI dIejOjPZWG dJdK dKejOjPZXdLdM ZYdS )N    Ntimeout)
SafeLoader)option)commands)Error)datedatetimetzinfo)CanvasEditorFontTextfontload_image_async)Image	ImageDraw	ImageFontImageOps)encodedecodeencryptdecrypt)select_databaseinsert_databaseupdate_database)createembedz%Y/%m/%dz%Yz%mz%dz%H:%M:%Sz%Hz%Mz%Sz%Y/%m/%d%H:%M:%Sc                   @   s0   e Zd Zdd ZejdddejfddZdS )	Ticketsc                 C   s   || _ |jad S N)botpath)selfr    r"   +/server/development/247-Bot/cogs/tickets.py__init__4   s   
zTickets.__init__ticketszSenden der Tickets-Nachricht)namedescriptionc              	      s  t t dddn}tj|td}zt fdd|d D }t|I d H }W n tyB    jdd	d
I d H  Y W d    d S w |d urh|durpt	 ||| j
I d H } j|d	d
I d H  W d    d S W d    d S W d    d S 1 s{w   Y  d S )N/Configs/server.yamlutf8encodingLoaderc                 3   0    | ]}t  jjt |d  kr|d V  qdS guildr&   Nstrr0   id.0itemctxr"   r#   	<genexpr>B      . z"Tickets.tickets.<locals>.<genexpr>Config.ServerError in SyntaxT	ephemeralF)openr    yamlloadr   next
check_sendStopIterationrespondsend_ticketr   )r!   r8   fdata
servername	checkbackbacksendr"   r7   r#   r%   ;   s&   		"zTickets.ticketsN)	__name__
__module____qualname__r$   r   slash_commanddiscordApplicationContextr%   r"   r"   r"   r#   r   2   s
    r   c                    s   t t d|  ddd}tj|td}W d    n1 sw   Y  |d dkr^|d d	kr3d	}n|d d
kr<d
}nd }|d dkrGd}n|d dkrPd}nd }|d ur\||g}|S dS d S )N	/Configs//tickets.yamlr)   r*   r,   zConfig.EnabledTConfig.Baser   EmbedzConfig.ElementButtonDropdownF)r?   r    r@   rA   r   )rI   rG   rH   methodeinteractobjectrJ   r"   r"   r#   rC   ^   s(   rC   c              
      s   t t d| ddd}tj|td}W d    n1 sw   Y  |t| jj}|	t|d }|d }|d }	t
t|d	d
d d d d |	I d H }
|	dkritjjd d}|t| |j|
|dI d H  |	dkrv|j|
dI d H  |d d }|S )NrR   rS   r)   r*   r,   zConfig.Channelr      tickets.yamlzConfig.TextrV   r   embedviewrW   r]   zConfig.Messagesmessage_send)r?   r    r@   rA   r   	get_guildintr0   r3   get_channelr   rP   uiViewadd_itemTicketButtonsend)r8   rI   baser   rG   rH   r0   channelrX   rY   rU   r^   rK   r"   r"   r#   rF      s"   rF   c           	   
      s   |d dkr
d}n
|d dkrd}n	 |dkrT|d ur|}n| j |j}tt|ddd |d d |	I d H }| j rG| jj|ddI d H  dS | jj	|ddI d H  dS dS )	NrT   r   rU   r[   zConfig.AnswerT)r]   r>   F)
r0   rc   r3   r   r    responseis_donefollowuprh   send_message)	interactionuser
channelobjthreadrH   rI   rX   rj   rU   r"   r"   r#   send_answermessage   s"   
rs   c              
      s   |d dkr
d}n
|d dkrd}n	 |dkrMt t|ddd |d d d 	I d H }tjjd d}|t| |t| |d dkrI|t| ||fS d S )	NrT   r   rU   r[   Config.Ticketr   Config.EditorButtonT)	r   r    rP   rd   re   rf   TicketCloseButtonTicketInviteButtonTicketAddEditorButton)ro   rp   rH   rI   rX   rU   r^   r"   r"   r#   create_ticketmessage   s   ry   c                    sR   |d dkr
d}n
|d dkrd}n	 |dkr't  }d|_|jdd |S d S )NrT   r   rU   z&Admin / Supporter Panel | Comming SoonzBitte haben Sie gedult.)text)rP   rU   title
set_footer)ro   rp   rH   rI   rX   rU   r"   r"   r#   create_threadheader   s   r}   c              
      s   |d dkr
d}n
|d dkrd}n	 |dkrUt t|ddd |d d |	I d H }tjjd d}|t| |t| |d dkrI|t| |j	||d	I d H  dS d
S NrT   r   rU   r[   rt   r   ru   Tr\   F)
r   r    rP   rd   re   rf   rv   rw   rx   rh   )ro   rp   rj   rH   rI   rX   rU   r^   r"   r"   r#   send_threadmessage   s    r   c           	   
      s   |d dkr
d}n
|d dkrd}n	 |dkr\| j |j}tt|ddd |d d |	I d H }tjjd d}|t	| |t
| |d dkrP|t| |j||d	I d H  dS d
S r~   )r0   rc   r3   r   r    rP   rd   re   rf   rv   rw   rx   rh   )	ro   rp   rq   rH   rI   rX   rj   rU   r^   r"   r"   r#   send_ticketmessage
  s"   r   c           	   
      s   |d dkr
d}n
|d dkrd}n	 |dkr]t t|ddd ||| jj|	I d H }tjjd d}|t| |t	| | j
 rP| jj||dI d H  dS | j
j||dI d H  dS d	S )
NrT   r   rU   r[   zConfig.Inviter   r\   TF)r   r    messager3   rP   rd   re   rf   TicketInviteAcceptButtonTicketInviteDeclineButtonrk   rl   rm   rh   rn   )	ro   rp   memberrj   rH   rI   rX   rU   r^   r"   r"   r#   send_invitemessage+  s"   "
r   c                    s  z|d }| j t|d | d }W n	 ty   Y nw |d urgdd | jjD }t|j|v rR| j	 rE| j
jdddI d H  d	S | jjdddI d H  d	S | jjd
|j t|j|dI d H }|S | j	 ry| j
jdddI d H  d	S | jjdddI d H  d	S )NConfig.CategoryidConfig.Category
categoryidc                 S   s   g | ]}|j qS r"   )topic)r5   rj   r"   r"   r#   
<listcomp>R  s    z!create_ticket.<locals>.<listcomp>u(   Sie haben Bereits ein geöffnetes TicketTr=   FzSupport-Ticket-)r   categoryr<   )clientrc   rb   	Exceptionr0   text_channelsr2   r3   rk   rl   rm   rh   rn   create_text_channelr&   )ro   rp   rH   r   r   channel_topicsticketchannelr"   r"   r#   create_ticketJ  s,    
&
r   c                    s^   z|d }| j t|d | d }W n	 ty   Y nw |jd|j |dI d H }|S )Nr   r   r   z	Ticket - )r&   r]   )r   rc   rb   r   create_threadr&   )ro   rp   rH   rU   r   r   ticketthreadr"   r"   r#   r   i  s    r   c                    sB  i }|d D ]}|dkr-| j j}|d | d }| D ]\}}	tjdi |||< qq|dkrM|d | d }| D ]\}}	tjdi |||< q=q|dkrt|d | }
td|
dD ]/}| j t|d | | d }|d | | d }| D ]\}}	tjdi |||< qq_q|i krd	S |j	|d
I d H  dS )NConfig.Permissionsdefaultpermissionsrp   rolesr   rZ   roleidF)
overwritesTr"   )
r0   default_roleitemsrP   PermissionOverwritelenrangeget_rolerb   edit)ro   rp   rj   rH   r   grouproler   keyvaluelengthir"   r"   r#   overwrite_ticketv  s6    r   c              
      sN   | j |}z| j I d H  W dS  ty& } z|W  Y d }~S d }~ww )NT)r0   rc   rj   deleter   )r8   	channelidrj   er"   r"   r#   close_ticket  s   r   c              	      s  g }|j D ]}|jdr |jdd dd }|| q| jjj}| j	|I d H }|j
d }t|j d }|D ]}	z
| jt|	}
W n tyT   Y  dS w |
| jkr[q=t| jjdkrnt| | j|
I d H  n|d d d	 }| jj|
fi |I d H  d
|j | jv r|j||j | j|j | j|j | j|
j|j | jd q=|j||j | j|j | jd |
j |j | jd q=|j|dI d H  | j r| jjdddI d H  dS | jjdddI d H  dS )Nz<@rZ   >r   Fpublic_threadr   rp   r   Noner&   r   inline
r_   zInvite AcceptedTr=   ) fieldsr   
startswithsplitappendr   	reference
message_idrj   fetch_messageembedsr   r0   
get_memberrb   r   rp   r2   typesingle_ghost_pingset_permissionsset_field_atr&   replacementionr   r   rk   rl   rm   rh   rn   )ro   rU   rH   membersfield	member_idoriginal_message_idoriginal_messager   memberidr   r   r"   r"   r#   invite_member  s@   




>6
r   c           	   
      s   g }| j jd dd2 z3 d H W }|| q6 d}t|D ]2}|jd}|jj}|j}|d| d| d| d7 }|j	D ]}|d| d| d|j
 d7 }q>q| j|I d H  dS )	NT)limitoldest_first z%Y-%m-%d %H:%M:%S[z] z: r   )rj   historyr   reversed
created_atstrftimeauthordisplay_namecontentattachmentsurlrp   rh   )	ro   rH   messagesr   transcript_content	timestampr   r   
attachmentr"   r"   r#   create_transcript  s    
 r   c                    s<  t |jd }t| jjdkrt| | j| jI d H  n|d d d }| jj| jfi |I d H  d|j| jv rZ|j	||j| j
|j| j|j| j| jj|j| jd n|j	||j| j
|j| jd | jj |j| jd | jj|d	I d H  | j r| jjd
ddI d H  dS | jjd
ddI d H  dS )N   r   r   editorr   r   r   r   r_   zAls Bearbeiter eingetragenTr=   )r   r   r2   rj   r   r   rp   r   r   r   r&   r   r   r   r   r   rk   rl   rm   rh   rn   )ro   rU   rH   r   r   r"   r"   r#   
add_editor  s   @6
r   c                    s   t |d d }td|dD ]0}|d d | d dkr?| jt|d d | d }||jI d H }|jdd	I d H  qd S )
Nr   r   r   rZ   	ghostpingTr   333333?delay)r   r   r0   r   rb   rh   r   r   )ro   rj   rH   r   r   r   r   r"   r"   r#   
ghost_ping  s    r   c                    s*   | |jI d H }|jddI d H  d S )Nr   r   )rh   r   r   )ro   rj   r   r   r"   r"   r#   r     s   r   c                    s   | j d d2 z>3 d H W }t|tjrE|jD ].}t|tjr5|jD ]}t|tjr3|j|kr3   dS q!qt|tjrD|j|krD  dS qq6 dS )N)r   TF)	r   
isinstancerP   Message
components	ActionRowchildrenrV   label)rj   button_labelr   	componentbuttonr"   r"   r#   check_existing_button  s"   




r   c                    s   t d d S )Ntest)print)ro   rH   rI   r"   r"   r#   addon_integration(  s   r   c                       s*   e Zd Z fddZejfddZ  ZS )rg   c                       || _ tt d| ddd}tj|td}W d    n1 s!w   Y  t j|d d d  |d d d	  t|d d d
 |d d d d| j	j
 d d S )NrR   rS   r)   r*   r,   Config.Buttonticketbuttonemojir   styledisabledinteraction:r   r   r   r   	custom_idserverr?   r    r@   rA   r   superr$   rb   	__class__rL   r!   rI   rG   rH   r   r"   r#   r$   .     
zTicketButton.__init__c                    sL   j }tt ddd}tj|td}W d    n1 sw   Y  zt fdd|d D }W n
 ty=   Y d S w  jj	dd	d
I d H  tt d| ddd}tj|td}W d    n1 sgw   Y  |d D ]}|d d	krt
 ||I d H   d S qp|d d	krt |||I d H }|durt |||I d H }|durt |d |||I d H }	|	durt | j I d H }
|
dur|d d	krt ||I d H  t ||||I d H  d S d S d S t ||I d H }|dur t |||I d H }|dur"t ||d ||I d H }	|	dur$t ||||I d H  d S d S d S d S )Nr(   r)   r*   r,   c                 3   r.   r/   r1   r4   ro   r"   r#   r9   @  r:   z(TicketButton.callback.<locals>.<genexpr>r;   FT	invisibler>   rR   rS   zConfig.AddonsactivezConfig.ChannelisForumzConfig.Ghostpings)rp   r?   r    r@   rA   r   rB   rD   rk   deferr   r}   r   rs   r   r   r   r   r   r   )r!   ro   rp   rG   rH   rI   addonthreadheader
threadback
awswerbacksinglegohstback
createbackoverwritebackr"   r   r#   callback;  sT   


zTicketButton.callbackrL   rM   rN   r$   rP   Interactionr  __classcell__r"   r"   r   r#   rg   -  s    rg   c                       ,   e Zd Z fddZdejfddZ  ZS )rw   c                    r   )NrR   rS   r)   r*   r,   r   ticketinvitebuttonr   r   r   r   r   r   r   r   r   r"   r#   r$   o  r   zTicketInviteButton.__init__ro   c                    sT   j }tt ddd}tj|td}W d    n1 sw   Y  zt fdd|d D }W n
 ty=   Y d S w tt d| d	dd}tj|td}W d    n1 s\w   Y  t j	|d
 d d I d H }|dkr j
t|d d d   |dI d H  d S  j
 r jjdddI d H  d S  j
jdddI d H  d S )Nr(   r)   r*   r,   c                 3   r.   r/   r1   r4   r   r"   r#   r9     r:   z.TicketInviteButton.callback.<locals>.<genexpr>r;   rR   rS   r   ticketinviteacceptbuttonr   FConfig.Modalticketinvitemodalr{   )r{   ro   rI   zlSie haben bereits eine Einladungsanfrage gesendet. Warten Sie bis ein Supporter Ihre Anfrage bearbeitet hat.Tr=   )rp   r?   r    r@   rA   r   rB   rD   r   rj   rk   
send_modalTicketInviteModalrl   rm   rh   rn   )r!   ro   rp   rG   rH   rI   existing_buttonr"   r   r#   r  |  s&   .
zTicketInviteButton.callbackr  r"   r"   r   r#   rw   n      rw   c                       s.   e Zd Zd fddZdejfddZ  ZS )	r  returnNc           	   	      s  t  j|i | || _|| _tt d| ddd}tj|td}t	|d d d }W d    n1 s7w   Y  t
d	|d
D ]|}|d d d | d dkr| tjj|d d d | d |d d d | d |d d d | d tjjd qB|d d d | d dkr| tjj|d d d | d |d d d | d |d d d | d tjjd qB dS d S )NrR   rS   r)   r*   r,   r  r  r   r   rZ   r   shortr   placeholderrequired)r   r  r  r   longF)r   r$   ro   r   r?   r    r@   rA   r   r   r   rf   rP   rd   	InputTextInputTextStyler  r  )	r!   ro   rI   argskwargsrG   rH   r   r   r   r"   r#   r$     s   \\zTicketInviteModal.__init__ro   c           	   	      s~   j }tt ddd}tj|td}W d    n1 sw   Y  zt fdd|d D }W n
 ty=   Y d S w tt d| d	dd}tj|td}W d    n1 s\w   Y   jj	d
dI d H  g }t
dddD ]<}| j| jd ur| j| j rz jt| j| j}t|jt j jkr|| W qs toty   Y qsw qst || j||I d H  d S )Nr(   r)   r*   r,   c                 3   r.   r/   r1   r4   r   r"   r#   r9     r:   z-TicketInviteModal.callback.<locals>.<genexpr>r;   rR   rS   F)r  r      rZ   )rp   r?   r    r@   rA   r   rB   rD   rk   r  r   r   r   isdigitr   get_userrb   r2   r3   r   AttributeError
ValueErrorr   rj   )	r!   ro   rp   rG   rH   rI   r   r   mr"   r   r#   r    s8   
zTicketInviteModal.callback)r  Nr  r"   r"   r   r#   r    s    r  c                       r  )r   c                    r   )NrR   rS   r)   r*   r,   r   r  r   r   r   r   r   r   r   r   r   r"   r#   r$     r   z!TicketInviteAcceptButton.__init__ro   c           
         s   j }tt ddd}tj|td}W d    n1 sw   Y  zt fdd|d D }W n
 ty=   Y d S w  j	 I d H   j
jdd	d
I d H  tt d| ddd}tj|td}t|d d }W d    n1 sww   Y  td|dD ]'} jt|d d | d }||jv rt  jjd |I d H }	 d S q j
 r jjdd	dI d H  d S  j
jdd	dI d H  d S )Nr(   r)   r*   r,   c                 3   r.   r/   r1   r4   r   r"   r#   r9     r:   z4TicketInviteAcceptButton.callback.<locals>.<genexpr>r;   FTr  rR   rS   r   r   r   rZ   r   You are not allowed to do this!r=   )rp   r?   r    r@   rA   r   rB   rD   r   r   rk   r  r   r   r0   r   rb   r   r   r   rl   rm   rh   rn   )
r!   ro   rp   rG   rH   rI   r   r   r   returninviter"   r   r#   r    s2    

z!TicketInviteAcceptButton.callbackr  r"   r"   r   r#   r     r  r   c                       r  )r   c                    r   )NrR   rS   r)   r*   r,   r   ticketinvitedeclinebuttonr   r   r   r   r   r   r   r   r   r"   r#   r$     r   z"TicketInviteDeclineButton.__init__ro   c           	         s   j }tt ddd}tj|td}W d    n1 sw   Y  zt fdd|d D }W n
 ty=   Y d S w  j	 I d H   j
jdd	d
I d H  tt d| ddd}tj|td}t|d d }W d    n1 sww   Y  td|dD ]8} jt|d d | d }||jv r j
 r jjdd	dI d H   d S  j
jdd	dI d H   d S q j
 r͈ jjdd	dI d H  d S  j
jdd	dI d H  d S )Nr(   r)   r*   r,   c                 3   r.   r/   r1   r4   r   r"   r#   r9     r:   z5TicketInviteDeclineButton.callback.<locals>.<genexpr>r;   FTr  rR   rS   r   r   r   rZ   r   zInvite Decliner=   r(  )rp   r?   r    r@   rA   r   rB   rD   r   r   rk   r  r   r   r0   r   rb   r   rl   rm   rh   rn   )	r!   ro   rp   rG   rH   rI   r   r   r   r"   r   r#   r    s8    


z"TicketInviteDeclineButton.callbackr  r"   r"   r   r#   r     r  r   c                       r  )rx   c                    r   )NrR   rS   r)   r*   r,   r   ticketaddeditorbuttonr   r   r   r   r   r   r   r   r   r"   r#   r$   *  r   zTicketAddEditorButton.__init__ro   c           
         s   j }tt ddd}tj|td}W d    n1 sw   Y  zt fdd|d D }W n
 ty=   Y d S w  jj	dd	d
I d H  tt d| ddd}tj|td}t
|d d }W d    n1 sow   Y  td|dD ]'} jt|d d | d }||jv rt  jjd |I d H }	 d S qz j r jjdd	dI d H  d S  jjdd	dI d H  d S )Nr(   r)   r*   r,   c                 3   r.   r/   r1   r4   r   r"   r#   r9   <  r:   z1TicketAddEditorButton.callback.<locals>.<genexpr>r;   FTr  rR   rS   r   r   r   rZ   r   r(  r=   )rp   r?   r    r@   rA   r   rB   rD   rk   r  r   r   r0   r   rb   r   r   r   r   rl   rm   rh   rn   )
r!   ro   rp   rG   rH   rI   r   r   r   returnaddeditorr"   r   r#   r  7  s0    

zTicketAddEditorButton.callbackr  r"   r"   r   r#   rx   )  r  rx   c                       r  )rv   c                    r   )NrR   rS   r)   r*   r,   r   ticketclosebuttonr   r   r   r   r   r   r   r   r   r"   r#   r$   V  r   zTicketCloseButton.__init__ro   c                    s   |j  I d H  d S r   )rj   r   )r!   ro   r"   r"   r#   r  c  s   zTicketCloseButton.callbackr  r"   r"   r   r#   rv   U  r  rv   c                 C   s   |  t|  d S r   )add_cogr   )r   r"   r"   r#   setupi  s   r/  )Zasyncioaiocronasync_timeoutr   r@   yaml.loaderr   rP   discord.utilsr   discord.extr   mysql.connectormysqlr   timer	   r   r
   osflaskeasy_pilr   r   r   r   r   r   PILr   r   r   r   pytzsocketcogs.encryptingr   r   r   r   cogs.databaser   r   r   cogs.messagebuilderr   nowzeitr   	time_date	time_year
time_monthtime_day	time_time	time_hourtime_minutetime_secondtime_datetimeCogr   rC   rF   rs   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   rV   rg   rw   Modalr  r   r   rx   rv   r/  r"   r"   r"   r#   <module>   sx     








,%!$0
A'211,