o
    m4·hçÇ  ã                   @   s~   d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlmZ d dlZd dl	m
Z
mZmZmZ G dd„ dejƒZdd„ ZdS )	é    N)Úcommands)Údatetime)ÚOptionalÚDictÚListÚUnionc                   @   s’  e Zd Zdd„ Zdefdd„ZdSdd„Zdefd	d
„ZdSdd„ZdSdd„Z	e
jddd�dd„ ƒZejdd�dd„ ƒZejdd�dTddœdee dee fdd„ƒZejdd�ddœdee fd d!„ƒZejd"d�e
jdd#�d$d%„ ƒƒZejd&d�d'ejfd(d)„ƒZejd*d�d'ejfd+d,„ƒZejd-d�e
jdd#�d.d/„ ƒƒZejd0d�e
jdd#�d0ejfd1d2„ƒƒZejd3d�e
jdd#�d4ejfd5d6„ƒƒZdTd7d8„Ze
j  ¡ d9d:„ ƒZ!ejd;d�e
jdd#�d<ej"fd=d>„ƒƒZ#ejd?d�e
jdd#�d<ej"fd@dA„ƒƒZ$ejdBd�e
jdd#�dCdD„ ƒƒZ%ejdEd�e
jdd#�dFdG„ ƒƒZ&ejdHd�e
jdd#�dIdJ„ ƒƒZ'e
j  ¡ dKdL„ ƒZ(e
j  ¡ dMdN„ ƒZ)dOdP„ Z*dQdR„ Z+dS )UÚTicketSystemc                 C   sŽ   || _ d| _d| _|  ¡ | _|  ¡ | _d| _| jsEdd d g ddddd	œd
dddd	œddddd	œgdddddtt	 
¡ ƒddœ| _|  ¡  d S d S )Nztickets_data.jsonztickets_config.jsoniòeX TÚPodporaõ   ðŸ”§éÛ˜4 õ)   PotÅ™ebujeÅ¡ pomoc s botem nebo serverem?©ÚnameÚemojiÚcolorÚdescriptionõ   NahlÃ¡Å¡enÃ­õ   âš ï¸�i"~æ õ"   NahlÃ¡sit uÅ¾ivatele nebo problÃ©mõ   OstatnÃ­õ   â�“i¶Y› õ   JinÃ© poÅ¾adavkyúticket-{user}õH   VÃ­tej v ticketu, {user}! NapiÅ¡ svÅ¯j problÃ©m a staff ti brzy odpovÃ­.éH   é   z(http://localhost:5000/api/ticket-webhook)ÚenabledÚticket_category_idÚlog_channel_idÚstaff_rolesÚticket_typesÚticket_name_formatÚwelcome_messageÚauto_close_hoursÚmax_tickets_per_userÚarchive_closed_ticketsÚweb_auth_tokenÚweb_webhook_url)ÚbotÚtickets_fileÚconfig_fileÚload_ticketsÚtickets_dataÚload_configÚconfigÚdiscord_blueÚstrÚuuidÚuuid4Úsave_config)Úselfr(   © r5   úFC:\Users\Buzz\Documents\TitanTS\Discord\TitanBot\files\cogs\tickets.pyÚ__init__   sJ   

üüüó
á!ÞzTicketSystem.__init__Úreturnc              
   C   s¬   t j | j¡rLz!t| jddd��}t |¡W  d  ƒ W S 1 s!w   Y  W dS  tyK } ztd|› �ƒ g g ddddœdœW  Y d}~S d}~ww g g ddddœdœS )	u   NaÄ�te data ticketÅ¯ ze souboruÚrúutf-8©ÚencodingNu"   Chyba pÅ™i naÄ�Ã­tÃ¡nÃ­ ticketÅ¯: r   )ÚtotalÚopenÚclosed)ÚticketsÚarchivedÚstats)	ÚosÚpathÚexistsr)   r>   ÚjsonÚloadÚ	ExceptionÚprint©r4   ÚfÚer5   r5   r6   r+   9   s   (ÿ €þzTicketSystem.load_ticketsNc              
   C   s    z5t | jddd��}tj| j|ddd� W d  ƒ n1 sw   Y  | j d¡r3t |  	¡ ¡ W dS W dS  t
yO } ztd	|› �ƒ W Y d}~dS d}~ww )
u    UloÅ¾Ã­ data ticketÅ¯ do souboruÚwr:   r;   é   F©ÚindentÚensure_asciiNr'   u!   Chyba pÅ™i uklÃ¡dÃ¡nÃ­ ticketÅ¯: )r>   r)   rF   Údumpr,   r.   ÚgetÚasyncioÚcreate_taskÚnotify_web_updaterH   rI   rJ   r5   r5   r6   Úsave_ticketsE   s   ÿÿ€ÿzTicketSystem.save_ticketsc              
   C   sŒ   t j | j¡rDz!t| jddd��}t |¡W  d  ƒ W S 1 s!w   Y  W dS  tyC } ztd|› �ƒ i W  Y d}~S d}~ww i S )u   NaÄ�te konfiguraci ticketÅ¯r9   r:   r;   Nu.   Chyba pÅ™i naÄ�Ã­tÃ¡nÃ­ konfigurace ticketÅ¯: )	rC   rD   rE   r*   r>   rF   rG   rH   rI   rJ   r5   r5   r6   r-   Q   s   (ÿ€þzTicketSystem.load_configc              
   C   s„   z't | jddd��}tj| j|ddd� W d  ƒ W dS 1 s w   Y  W dS  tyA } ztd|› �ƒ W Y d}~dS d}~ww )	u   UloÅ¾Ã­ konfiguraci ticketÅ¯rM   r:   r;   rN   FrO   Nu-   Chyba pÅ™i uklÃ¡dÃ¡nÃ­ konfigurace ticketÅ¯: )r>   r*   rF   rR   r.   rH   rI   rJ   r5   r5   r6   r3   ]   s   &ÿ€ÿzTicketSystem.save_configc              
   Ã   s  �| j  d¡s	dS | j d }| j d }z_t ¡ 4 I dH šI}|j|dt ¡  ¡ dœd|› �ddœd	�4 I dH š}|jd
krDt	d|j› �ƒ W d  ƒI dH  qY1 I dH sTw   Y  W d  ƒI dH  W dS 1 I dH skw   Y  W dS  t
yŒ } zt	d|› �ƒ W Y d}~dS d}~ww )u8   OdeÅ¡le webhook notifikaci na web o aktualizaci ticketÅ¯r'   Nr&   Úupdate)ÚtypeÚ	timestampzBearer zapplication/json)ÚAuthorizationzContent-Type)rF   ÚheaderséÈ   u,   Chyba pÅ™i odesÃ­lÃ¡nÃ­ webhook notifikace: )r.   rS   ÚaiohttpÚClientSessionÚpostr   ÚnowÚ	isoformatÚstatusrI   rH   )r4   Zwebhook_urlÚ
auth_tokenÚsessionÚresponserL   r5   r5   r6   rV   e   s,   €

ý
€*ú2ÿ€ÿzTicketSystem.notify_web_updateÚticketT)r   Úinvoke_without_commandc                 Ã   s*   �t jdd| jd�}|j|d�I dH  dS )u   ZÃ¡kladnÃ­ ticket pÅ™Ã­kazu   ðŸŽ« Ticket SystÃ©mu%   PouÅ¾ij `!ticket help` pro nÃ¡povÄ›du©Útitler   r   ©ÚembedN)ÚdiscordÚEmbedr/   Úsend©r4   Úctxrl   r5   r5   r6   Ú
ticket_cmdy   s   €ýzTicketSystem.ticket_cmdÚhelp)r   c                 Ã   s¾   �t jdd| jd�}|jdddd� d}|jjjrd}n| j d	g ¡D ]}|j	 
t|ƒ¡}|r9||jjv r9d} q:q#|rT|jd
ddd� |jdddd� |jdddd� |j|d�I dH  dS )u(   ZobrazÃ­ nÃ¡povÄ›du pro ticket pÅ™Ã­kazyu    ðŸŽ« Ticket SystÃ©m - NÃ¡povÄ›dau0   Seznam dostupnÃ½ch pÅ™Ã­kazÅ¯ pro ticket systÃ©mri   u   ðŸ‘¤ UÅ¾ivatelskÃ© pÅ™Ã­kazyuÛ   `!ticket create [typ] [dÅ¯vod]` - VytvoÅ™Ã­ novÃ½ ticket
`!ticket close [dÅ¯vod]` - UzavÅ™e aktuÃ¡lnÃ­ ticket
`!ticket add <@user>` - PÅ™idÃ¡ uÅ¾ivatele do ticketu
`!ticket remove <@user>` - Odebere uÅ¾ivatele z ticketuF©r   ÚvalueÚinlineTr   u   ðŸ›¡ï¸� Staff pÅ™Ã­kazyu^  `!ticket setup` - NastavÃ­ panel pro vytvÃ¡Å™enÃ­ ticketÅ¯
`!ticket archive` - Archivuje uzavÅ™enÃ½ ticket
`!ticket delete` - SmaÅ¾e ticket permanentnÄ›
`!ticket reopen` - Znovu otevÅ™e uzavÅ™enÃ½ ticket
`!ticket list` - ZobrazÃ­ seznam aktivnÃ­ch ticketÅ¯
`!ticket view <id>` - ZobrazÃ­ detaily ticketu
`!ticket stats` - ZobrazÃ­ statistiky ticketÅ¯u   âš™ï¸� Admin pÅ™Ã­kazyu_  `!ticket config` - ZobrazÃ­ aktuÃ¡lnÃ­ konfiguraci
`!ticket config set <klÃ­Ä�> <hodnota>` - NastavÃ­ hodnotu
`!ticket config reset` - Resetuje konfiguraci
`!ticket category <#kategorie>` - NastavÃ­ kategorii
`!ticket log <#kanÃ¡l>` - NastavÃ­ log kanÃ¡l
`!ticket addrole <@role>` - PÅ™idÃ¡ staff roli
`!ticket removerole <@role>` - Odebere staff roliõ   ðŸŒ� Web Dashboardus   Pro pokroÄ�ilou sprÃ¡vu ticketÅ¯ pouÅ¾ij web rozhranÃ­:
**[localhost:5000/tickets](http://localhost:5000/tickets)**rk   N)rm   rn   r/   Ú	add_fieldÚauthorÚguild_permissionsÚadministratorr.   rS   ÚguildÚget_roleÚintÚrolesro   )r4   rq   rl   Úis_staffÚrole_idÚroler5   r5   r6   Úticket_helpƒ   sJ   €ýø
€õõú	zTicketSystem.ticket_helpÚcreate©ÚreasonÚticket_typer†   c                ƒ   sv  �| j  dd¡sˆ  d¡I dH  dS | j  dd¡}‡ fdd„| jd	 D ƒ}t|ƒ|kr9ˆ  d
|› d�¡I dH  dS | j  d¡}|sKˆ  d¡I dH  dS ˆ j t|ƒ¡}|s_ˆ  d¡I dH  dS | ˆ jj	¡}|j
ssˆ  d¡I dH  dS | j  dg ¡}	d}
|r‘|	D ]}|d  ¡ | ¡ kr�|}
 q‘q€|
sš|	rš|	d }
n	|
s£dddddœ}
| j  dd¡jˆ jj ¡  dd¡t| jd	 ƒd d�}ˆ jjtjdd�ˆ jtjddd�ˆ jj	tjdddd �i}| j  d!g ¡D ]}zˆ j t|ƒ¡}|r÷tjddd�||< W qá   Y qá�ztd"|› d#|j› d$�ƒ td%|› �ƒ |j||d&�I dH }td'|j› d(|j› d)�ƒ tt ¡ ƒdd*… }| j  d+d,¡}|jˆ jjd-�}tj|
d. › d/|
d › �||
d0 d1�}|jd2ˆ jjdd3� |jd4d5|› d5�dd3� |�rw|jd6|dd3� |jd7d8� |j|d9�I dH }| ¡ I dH  | d:¡I dH  | d;¡I dH  tjd<d=|j› �| j d1�}ˆ j|d9�I dH  |t|jƒtˆ jjƒˆ jjtˆ jjƒ|
d |�pÌd>d?t! "¡  #¡ dg tˆ jjƒg|
d0 d@œ}| jd	  $|¡ | jdA dB  d7  < | jdA d?  d7  < |  %¡  |  &ˆ jdC|› �ˆ j|¡I dH  W dS  t'�y: } ztdD|› �ƒ ˆ  dE|› �¡I dH  W Y d}~dS d}~ww )Fu   VytvoÅ™Ã­ novÃ½ ticketr   Tu,   â�Œ Ticket systÃ©m je momentÃ¡lnÄ› vypnutÃ½.Nr$   r   c                    s0   g | ]}|d  t ˆ jjƒkr|d dkr|‘qS )Úuser_idrc   r>   )r0   ry   Úid©Ú.0Út©rq   r5   r6   Ú
<listcomp>Ô   s   0 z.TicketSystem.create_ticket.<locals>.<listcomp>r@   u<   â�Œ DosÃ¡hl jsi maximÃ¡lnÃ­ho poÄ�tu otevÅ™enÃ½ch ticketÅ¯ (z).r   uE   â�Œ Kategorie pro tickety nenÃ­ nastavena. Kontaktuj administrÃ¡tora.uE   â�Œ Kategorie pro tickety nebyla nalezena. Kontaktuj administrÃ¡tora.u;   â�Œ Bot nemÃ¡ prÃ¡va na sprÃ¡vu kanÃ¡lÅ¯ v tÃ©to kategorii!r    r   r   r	   r
   r   r   r!   r   Ú Ú-é   )Úuserr‰   F)Úread_messages©r“   Úsend_messages)r“   r•   Úmanage_channelsr   zDEBUG: Creating channel 'z' in category 'ú'zDEBUG: Overwrites: )r   Ú
overwriteszDEBUG: Channel created: z (ID: ú)é   r"   r   )r’   r   z	 Ticket: r   ri   u	   UÅ¾ivatelrt   ú
ID Ticketuú`õ   DÅ¯vodu,   Pro uzavÅ™enÃ­ ticketu pouÅ¾ij !ticket close©Útextrk   õ   ðŸ”’õ   ðŸ“�u   âœ… Ticket vytvoÅ™enu   TvÅ¯j ticket byl vytvoÅ™en: õ   Å½Ã¡dnÃ½ dÅ¯vod nebyl uvedenr>   )r‰   Ú
channel_idrˆ   Ú	user_nameÚguild_idrY   r†   rc   Ú
created_atÚ	closed_atÚmessagesÚparticipantsr   rB   r=   u   Ticket vytvoÅ™en: #zERROR: u%   â�Œ Chyba pÅ™i vytvÃ¡Å™enÃ­ ticketu: )(r.   rS   ro   r,   Úlenr|   Úget_channelr~   Úpermissions_forÚmer–   ÚlowerÚformatry   r   ÚreplaceÚdefault_rolerm   ÚPermissionOverwriter}   rI   Úcreate_text_channelr‰   r0   r1   r2   Úmentionrn   rx   Ú
set_footerÚpinÚadd_reactionr/   r   ra   rb   ÚappendrW   Úlog_ticket_eventrH   )r4   rq   r‡   r†   Zmax_ticketsÚuser_ticketsÚcategory_idÚcategoryÚbot_permissionsr    Zselected_typeÚt_typeZticket_namer˜   r�   r‚   ÚchannelZ	ticket_idr"   rl   Zwelcome_msgZconfirm_embedÚticket_datarL   r5   r�   r6   Úcreate_ticketÊ   sÒ   €þ
üþý€ý
ý


ó&$€þzTicketSystem.create_ticketÚcloser¢   c             
   Ã   s‚  �d}| j d D ]}|d t|jjƒkr|d dkr|} qq|s+| d¡I dH  dS d}t|jjƒ|d k}|jjjr?d	}n| j 	d
g ¡D ]}|j
 t|ƒ¡}|r\||jjv r\d	} q]qF|sk|sk| d¡I dH  dS z¶d|d< t ¡  ¡ |d< ||d< t|jjƒ|d< | j d d  d8  < | j d d  d7  < |  ¡  |d D ]}	z|j
 t|	ƒ¡}
|
rº|jj|
dd�I dH  W q¢   Y q¢tjdd|jj› �dd�}|jd|dd� |jdd|d › d�d	d� |jdddd� |j|d�I dH }| d ¡I dH  | d!¡I dH  | d"¡I dH  |  |j
d#|d › �|j|¡I dH  W dS  t�y@ } z| d$|› �¡I dH  W Y d}~dS d}~ww )%u   UzavÅ™e aktuÃ¡lnÃ­ ticketNr@   r£   rc   r>   õ,   â�Œ Tento kanÃ¡l nenÃ­ otevÅ™enÃ½m ticketem.Frˆ   Tr   u0   â�Œ NemÃ¡Å¡ oprÃ¡vnÄ›nÃ­ uzavÅ™Ã­t tento ticket.r?   r§   Zclose_reasonZ	closed_byrB   r‘   r©   ©r•   u   ðŸ”’ Ticket uzavÅ™enu&   Tento ticket byl uzavÅ™en uÅ¾ivatelem é6Cô ri   r�   rt   r›   rœ   r‰   u	   MoÅ¾nostiu5   ðŸ”“ - Znovu otevÅ™Ã­t
ðŸ“� - Archivovat
â�Œ - Smazatrk   õ   ðŸ”“õ   ðŸ“�õ   â�Œu   Ticket uzavÅ™en: #u%   â�Œ Chyba pÅ™i uzavÃ­rÃ¡nÃ­ ticketu: )r,   r0   r¿   r‰   ro   ry   rz   r{   r.   rS   r|   r}   r~   r   r   ra   rb   rW   Ú
get_memberÚset_permissionsrm   rn   r´   rx   r·   r¹   rH   )r4   rq   r†   rÀ   rg   r€   Úis_ticket_creatorr�   r‚   rˆ   r’   rl   Z	close_msgrL   r5   r5   r6   Úclose_ticketb  sp   € €
€€ý*$€ÿzTicketSystem.close_ticketÚsetup)r{   c                 Ã   sò   �t jdd| jd�}| j dg ¡}|s$ddddœd	d
ddœddddœg}|D ]}|j|d › d|d › �|d dd� q&|jdd� |j|d�I dH }|D ]}| |d ¡I dH  qMt	|j
ƒ| jd< t	|jj
ƒ| jd< |  ¡  |j ¡ I dH  dS )u(   NastavÃ­ panel pro vytvÃ¡Å™enÃ­ ticketÅ¯u   ðŸŽ« VytvoÅ™enÃ­ TicketuuE   Klikni na reakci podle typu problÃ©mu, kterÃ½ potÅ™ebujeÅ¡ vyÅ™eÅ¡it.ri   r    r	   r
   r   )r   r   r   r   r   r   r   r   r   r   r�   r   r   Frt   u.   Reaguj na tuto zprÃ¡vu pro vytvoÅ™enÃ­ ticketurž   rk   NÚticket_panel_message_idZticket_panel_channel_id)rm   rn   r/   r.   rS   rx   rµ   ro   r·   r0   r‰   r¿   r3   ÚmessageÚdelete)r4   rq   rl   r    r¾   Z	panel_msgr5   r5   r6   Úsetup_ticket_panel¯  s4   €ý


ýýzTicketSystem.setup_ticket_panelÚaddr’   c              
   Ã   sª  �d}| j d D ]}|d t|jjƒkr|d dkr|} qq|s+| d¡I dH  dS d}t|jjƒ|d k}|jjjr?d	}n| j 	d
g ¡D ]}|j
 t|ƒ¡}|r\||jjv r\d	} q]qF|sk|sk| d¡I dH  dS t|jƒ|d v rƒ| d|j› d�¡I dH  dS z3|jj|d	d	d�I dH  |d  t|jƒ¡ |  ¡  tjd|j› d�| jd�}	|j|	d�I dH  W dS  tyÔ }
 z| d|
› �¡I dH  W Y d}
~
dS d}
~
ww )u   PÅ™idÃ¡ uÅ¾ivatele do ticketuNr@   r£   rc   r>   rÃ   Frˆ   Tr   u>   â�Œ NemÃ¡Å¡ oprÃ¡vnÄ›nÃ­ pÅ™idat uÅ¾ivatele do tohoto ticketu.r©   õ   â�Œ u$    uÅ¾ mÃ¡ pÅ™Ã­stup k tomuto ticketu.r”   u   âœ… UÅ¾ivatel pÅ™idÃ¡nu    byl pÅ™idÃ¡n do ticketu.ri   rk   u)   â�Œ Chyba pÅ™i pÅ™idÃ¡vÃ¡nÃ­ uÅ¾ivatele: )r,   r0   r¿   r‰   ro   ry   rz   r{   r.   rS   r|   r}   r~   r   r´   rÊ   r¸   rW   rm   rn   r/   rH   ©r4   rq   r’   rÀ   rg   r€   rË   r�   r‚   rl   rL   r5   r5   r6   Úadd_user_to_ticketØ  sP   € €
€
ý$€ÿzTicketSystem.add_user_to_ticketÚremovec              
   Ã   sÎ  �d}| j d D ]}|d t|jjƒkr|d dkr|} qq|s+| d¡I dH  dS d}t|jjƒ|d k}|jjjr?d	}n| j 	d
g ¡D ]}|j
 t|ƒ¡}|r\||jjv r\d	} q]qF|sk|sk| d¡I dH  dS t|jƒ|d kr~| d¡I dH  dS t|jƒ|d vr–| d|j› d�¡I dH  dS z2|jj|dd�I dH  |d  t|jƒ¡ |  ¡  tjd|j› d�| jd�}	|j|	d�I dH  W dS  tyæ }
 z| d|
› �¡I dH  W Y d}
~
dS d}
~
ww )u   Odebere uÅ¾ivatele z ticketuNr@   r£   rc   r>   rÃ   Frˆ   Tr   u=   â�Œ NemÃ¡Å¡ oprÃ¡vnÄ›nÃ­ odebrat uÅ¾ivatele z tohoto ticketu.u%   â�Œ Nelze odebrat vlastnÃ­ka ticketu.r©   rÓ   u"    nemÃ¡ pÅ™Ã­stup k tomuto ticketu.)Ú	overwriteu   âœ… UÅ¾ivatel odebrÃ¡nu    byl odebrÃ¡n z ticketu.ri   rk   u(   â�Œ Chyba pÅ™i odebÃ­rÃ¡nÃ­ uÅ¾ivatele: )r,   r0   r¿   r‰   ro   ry   rz   r{   r.   rS   r|   r}   r~   r   r´   rÊ   rÖ   rW   rm   rn   r/   rH   rÔ   r5   r5   r6   Úremove_user_from_ticket  sV   € €
€
ý$€ÿz$TicketSystem.remove_user_from_ticketrB   c                 Ã   sj  �| j d }tjd| jd�}|jd|d dd� |jd|d	 dd� |jd
|d dd� i }| j d D ]}|d }||vrAd||< ||  d7  < q3t| ¡ dd„ dd�dd… }|r¢d}t|dƒD ]5\}	\}}
z| j 	t
|ƒ¡I dH }|d|	› d|j› d|
› d�7 }W qb   |d|	› d|› d|
› d�7 }Y qb|jd|pžddd� |jdddd� |j|d �I dH  dS )!u   ZobrazÃ­ statistiky ticketÅ¯rB   u   ðŸ“Š Statistiky TicketÅ¯©rj   r   u   ðŸ“� Celkem vytvoÅ™enor=   Trt   u   ðŸ”“ AktuÃ¡lnÄ› otevÅ™enÃ©r>   u   ðŸ”’ UzavÅ™enÃ©r?   r@   rˆ   r   r‘   c                 S   s   | d S )Nr‘   r5   )Úxr5   r5   r6   Ú<lambda>_  s    z+TicketSystem.ticket_stats.<locals>.<lambda>)ÚkeyÚreverseNé   Ú ú**z.** z: **u   ** ticketÅ¯
z.** ID u!   ðŸ‘¥ NejaktivnÄ›jÅ¡Ã­ uÅ¾ivatelÃ©u   Å½Ã¡dnÃ­ uÅ¾ivatelÃ©Frw   uU   PodrobnÃ© statistiky najdeÅ¡ na [web dashboardu](http://localhost:5000/tickets/stats)rk   )r,   rm   rn   r/   rx   ÚsortedÚitemsÚ	enumerater(   Ú
fetch_userr~   r   ro   )r4   rq   rB   rl   rº   rg   rˆ   Z	top_usersZ
users_textÚiÚcountr’   r5   r5   r6   Úticket_statsG  s>   €
þ" ýzTicketSystem.ticket_statsr¼   c                 Ã   óJ   �t |jƒ| jd< |  ¡  tjdd|j› �| jd�}|j|d�I dH  dS )u   NastavÃ­ kategorii pro ticketyr   u   âœ… Kategorie nastavenau'   Tickety budou vytvÃ¡Å™eny v kategorii: ri   rk   N)	r0   r‰   r.   r3   rm   rn   r   r/   ro   )r4   rq   r¼   rl   r5   r5   r6   Úset_ticket_categoryt  ó   €
ýz TicketSystem.set_ticket_categoryÚlogr¿   c                 Ã   rè   )u'   NastavÃ­ kanÃ¡l pro logovÃ¡nÃ­ ticketÅ¯r   u   âœ… Log kanÃ¡l nastavenu$   Logy ticketÅ¯ budou odesÃ­lÃ¡ny do: ri   rk   N)	r0   r‰   r.   r3   rm   rn   r´   r/   ro   )r4   rq   r¿   rl   r5   r5   r6   Úset_log_channel‚  rê   zTicketSystem.set_log_channelc                 Ã   sX  �| j  d¡}|sdS | t|ƒ¡}|sdS tjd|| jt ¡ d�}|j	d|j
› d|j› d�dd	� |r¡|j	d
|d dd	� | d¡rW| t|d ƒ¡}|rW|j	d|j
dd	� |j	d|d  ¡ dd	� | d¡rt |d ¡}	|j	ddt|	 ¡ ƒ› d�dd	� | d¡r¡|d dur¡t |d ¡}
|j	ddt|
 ¡ ƒ› d�dd	� |j|d�I dH  dS )u/   Loguje udÃ¡lost ticketu do nastavenÃ©ho kanÃ¡lur   Nu   ðŸŽ« Ticket Log)rj   r   r   rZ   u   ðŸ‘¤ UÅ¾ivatelz (r™   Trt   u   ðŸ†” Ticket IDr‰   r£   u   ðŸ“� KanÃ¡lu   ðŸ“Š Statusrc   r¦   u   â�° VytvoÅ™enoz<t:z:R>r§   u   ðŸ”’ UzavÅ™enork   )r.   rS   r«   r~   rm   rn   r/   r   ra   rx   r´   r‰   Ú
capitalizeÚfromisoformatrZ   ro   )r4   r|   Úactionr’   rÀ   r   Úlog_channelrl   r¿   Zcreated_timeZclosed_timer5   r5   r6   r¹   �  s8   €ü 

  zTicketSystem.log_ticket_eventc                 ƒ   sV  �|j | jjjkrdS t|jƒ| j dd¡krˆ| j |j	¡}|s"dS | 
|j¡}|s,dS | |j ¡‰ˆs6dS z| |j¡I dH }| |jˆ¡I dH  W n   Y dS d}| j dg ¡D ]}t|jƒ|d krl|d } qmq[|r†| j |¡I dH }ˆ|_|  ||¡I dH  dS dS d‰| jd D ]}|d t|jƒkrž|‰ qŸq�ˆs£dS | j |j	¡}|s®dS | 
|j¡}|s¸dS | |j ¡‰ˆsÂdS d	}	tˆjƒˆd
 k}
ˆjjrÔd}	n| j dg ¡D ]}| t|ƒ¡}|rï|ˆjv rïd}	 qðqÛz| |j¡I dH }| |jˆ¡I dH  W n   Y dS t|jƒ}|dk�r=ˆd dk�r=|	�s#|
�r;| j |¡I dH }ˆ|_| j|dd�I dH  dS dS |dk�r¼ˆd dk�r¼|	�rºdˆd< dˆd< | jd d  d7  < | jd d  d8  < |  ¡  ˆd D ]}z| t|ƒ¡}|�r‰|j|dd�I dH  W �qr   Y �qrtjddˆj› �| jd�}|j |d�I dH  |  !|dˆd › �ˆˆ¡I dH  dS dS |dk�r&ˆd dk�r&|	�r$| jd   "ˆ¡ ‡fd!d"„| jd D ƒ| jd< |  ¡  tjd#d$ˆj› �d%d�}|j |d�I dH  |  !|d&ˆd › �ˆˆ¡I dH  t# $d'¡I dH  z
| %¡ I dH  W dS    Y dS dS |d(k�r„ˆd dk�r„|	�r‚‡fd)d"„| jd D ƒ| jd< |  ¡  tjd*d+d,d�}|j |d�I dH  |  !|d-ˆd › �ˆˆ¡I dH  t# $d.¡I dH  z
| %¡ I dH  W dS    Y dS dS |d/k�r'|	�r)z‚tjd0d1| jd�}ˆj |d�I dH ‰ ‡ ‡fd2d3„}zS| jj&d4d5|d6�I dH }|j' (¡ d7k�rÇˆ  d8¡I dH  W W dS tjd9|j'd:d�}|j)ˆj*ˆj+j,d;� |j-d<ˆd › �d=� |j |d�I dH  ˆ  d>¡I dH  W W dS  t#j.�y   ˆ  d?¡I dH  Y W dS w    tjd0d@| jd�}|j |d�I dH  Y dS dS dS )Au&   ZpracovÃ¡nÃ­ reakcÃ­ na ticket zprÃ¡vyNrÎ   rß   r    r   r   r@   r£   Frˆ   Tr   r    rc   r>   u   UzavÅ™eno pomocÃ­ reakcer…   rÆ   r?   r§   rB   r‘   r©   rÄ   u   ðŸ”“ Ticket znovu otevÅ™enu,   Tento ticket byl znovu otevÅ™en uÅ¾ivatelem ri   rk   u   Ticket znovu otevÅ™en: #r‰   rÇ   rA   c                    ó    g | ]}|d  ˆ d  kr|‘qS ©r‰   r5   rŠ   ©rÀ   r5   r6   rŽ   =  ó     z4TicketSystem.on_raw_reaction_add.<locals>.<listcomp>u   ðŸ“� Ticket archivovÃ¡nu)   Tento ticket byl archivovÃ¡n uÅ¾ivatelem i&§ÿ u   Ticket archivovÃ¡n: #é
   rÈ   c                    rñ   rò   r5   rŠ   ró   r5   r6   rŽ   X  rô   u   â�Œ Ticket bude smazÃ¡nu(   Tento ticket bude smazÃ¡n za 5 sekund...rÅ   u   Ticket smazÃ¡n: #rÞ   r¡   u$   ðŸ“� PÅ™idÃ¡nÃ­ poznÃ¡mky do ticketuud   Zadej poznÃ¡mku, kterou chceÅ¡ pÅ™idat do ticketu. MÃ¡Å¡ 60 sekund.
OdpovÄ›z `cancel` pro zruÅ¡enÃ­.c                    s   | j ˆ j ko
| jˆkS ©N)r¿   ry   )Úm)Ú
dm_messager’   r5   r6   Úcheck{  s   z/TicketSystem.on_raw_reaction_add.<locals>.checkrÏ   g      N@)Útimeoutrù   Úcancelu"   â�Œ PÅ™idÃ¡nÃ­ poznÃ¡mky zruÅ¡eno.u   ðŸ“� PoznÃ¡mka Staffi ˜ÿ )r   Úicon_urlzTicket ID: rž   u(   âœ… PoznÃ¡mka byla pÅ™idÃ¡na do ticketu.u1   â�Œ ÄŒas vyprÅ¡el. PÅ™idÃ¡nÃ­ poznÃ¡mky zruÅ¡eno.uS   Nelze ti poslat DM. PouÅ¾ij pÅ™Ã­kaz `!ticket note <text>` pÅ™Ã­mo v tomto kanÃ¡lu.)/rˆ   r(   r’   r‰   r0   Ú
message_idr.   rS   Ú	get_guildr¥   r«   r£   rÉ   Úfetch_messageÚremove_reactionr   Úget_contextry   rÁ   r,   rz   r{   r}   r~   r   rÌ   rW   rÊ   rm   rn   r´   r/   ro   r¹   r¸   rT   ÚsleeprÐ   Úwait_forÚcontentr®   Ú
set_authorr   Údisplay_avatarÚurlrµ   ÚTimeoutError)r4   Úpayloadr|   r¿   rÏ   r‡   r¾   rq   rg   r€   rË   r�   r‚   r   rˆ   Úmemberrl   Údm_embedrù   Znote_messager5   )rø   rÀ   r’   r6   Úon_raw_reaction_add·  sD  €þü	þ€
ý€
ý$ã
ý æý é
ýýÿýÕz TicketSystem.on_raw_reaction_addÚaddroler‚   c                 Ã   s’   �t |jƒ| j dg ¡v r| d¡I dH  dS d| jvr!g | jd< | jd  t |jƒ¡ |  ¡  tjdd|j	› d�| j
d�}|j|d�I dH  dS )	u.   PÅ™idÃ¡ roli do staff rolÃ­ pro ticket systÃ©mr   u+   â�Œ Tato role uÅ¾ je v seznamu staff rolÃ­.Nu   âœ… Role pÅ™idÃ¡naúRole u2    byla pÅ™idÃ¡na do staff rolÃ­ pro ticket systÃ©m.ri   rk   )r0   r‰   r.   rS   ro   r¸   r3   rm   rn   r´   r/   ©r4   rq   r‚   rl   r5   r5   r6   Úadd_staff_roleœ  s   €

ýzTicketSystem.add_staff_roleÚ
removerolec                 Ã   s~   �t |jƒ| j dg ¡vr| d¡I dH  dS | jd  t |jƒ¡ |  ¡  tjdd|j	› d�| j
d�}|j|d�I dH  dS )	u.   Odebere roli ze staff rolÃ­ pro ticket systÃ©mr   u*   â�Œ Tato role nenÃ­ v seznamu staff rolÃ­.Nu   âœ… Role odebrÃ¡nar  u2    byla odebrÃ¡na ze staff rolÃ­ pro ticket systÃ©m.ri   rk   )r0   r‰   r.   rS   ro   rÖ   r3   rm   rn   r´   r/   r  r5   r5   r6   Úremove_staff_role±  s   €ýzTicketSystem.remove_staff_roleÚlistc                 Ã   s  �t jd| jd�}dd„ | jd D ƒ}dd„ | jd D ƒ}|s/|s/d|_|j|d�I d	H  d	S |r�d
}t|d	d… dƒD ]I\}}|j t	|d ƒ¡}|rO|j
nd}	z| j t	|d ƒ¡I d	H }
|
j}W n   d|v ro|d nd}Y |d|› d|d › d|	› d|› d�	7 }q<|r�|jd|dd� |rñd
}t|d	d… dƒD ]I\}}|j t	|d ƒ¡}|r°|j
nd}	z| j t	|d ƒ¡I d	H }
|
j}W n   d|v rÐ|d nd}Y |d|› d|d › d|	› d|› d�	7 }q�|rñ|jd|dd� |jdddd� |j|d�I d	H  d	S )u#   ZobrazÃ­ seznam aktivnÃ­ch ticketÅ¯u   ðŸŽ« Seznam TicketÅ¯rÙ   c                 S   ó   g | ]
}|d  dkr|‘qS )rc   r>   r5   rŠ   r5   r5   r6   rŽ   Ì  ó    z-TicketSystem.list_tickets.<locals>.<listcomp>r@   c                 S   r  )rc   r?   r5   rŠ   r5   r5   r6   rŽ   Í  r  u   Å½Ã¡dnÃ© aktivnÃ­ tickety.rk   Nrß   rõ   r‘   r£   u   KanÃ¡l nenalezenrˆ   r¤   ÚUnknownrà   z	.** ID: `r‰   z` | u    | ðŸ‘¤ Ú
u   ðŸ”“ OtevÅ™enÃ© TicketyFrt   rÞ   u   ðŸ”’ UzavÅ™enÃ© Ticketyrw   uU   KompletnÃ­ seznam ticketÅ¯ najdeÅ¡ na [web dashboardu](http://localhost:5000/tickets))rm   rn   r/   r,   r   ro   rã   r|   r«   r~   r´   r(   rä   r   rx   )r4   rq   rl   Zopen_ticketsZclosed_ticketsÚ	open_textrå   rg   r¿   Zchannel_mentionr’   r¤   Zclosed_textr5   r5   r6   Úlist_ticketsÃ  sV   €þ
(
(ýzTicketSystem.list_ticketsr.   c           
      Ã   sÎ  �t jd| jd�}|jdd| j dd¡rdnd› d	| j d
d¡› d| j dd¡› d| j dd¡r2dnd› d�	dd� d}| j d¡rM|j t| jd ƒ¡}d}| j d¡r`|j t| jd ƒ¡}|jdd|ri|j	nd› d|rq|j
nd› d�dd� d}| j dg ¡D ]}|j t|ƒ¡}|r—|d|j
› d �7 }q‚|jd!|pžd"dd� d}| j d#g ¡D ]}	|d|	d$ › d%|	d& › d'�7 }q«|jd(|pÃd)dd� |jd*d+| j d,d-¡dd.… › d/�dd� |j|d0�I dH  dS )1u/   ZobrazÃ­ aktuÃ¡lnÃ­ konfiguraci ticket systÃ©muu"   âš™ï¸� Konfigurace Ticket SystÃ©murÙ   u   ðŸ”§ ZÃ¡kladnÃ­ nastavenÃ­u   â€¢ Status: **r   TZZapnutoZVypnutou%   **
â€¢ Max ticketÅ¯ na uÅ¾ivatele: **r$   r   u   **
â€¢ Auto-zavÅ™enÃ­ po: **r#   r   u+    hodinÃ¡ch**
â€¢ Archivace uzavÅ™enÃ½ch: **r%   ZAnoZNerà   Frt   Nr   r   u   ðŸ“� KanÃ¡ly a kategorieu   â€¢ Kategorie: **ÚNenastavenou   **
â€¢ Log kanÃ¡l: **rß   r   u   â€¢ r  u   ðŸ‘® Staff roleu   Å½Ã¡dnÃ© role nastavenyr    r   z **r   z**
u   ðŸ�·ï¸� Typy ticketÅ¯u   Å½Ã¡dnÃ© typy nastavenyu   ðŸŒ� Web rozhranÃ­u”   â€¢ Dashboard: **[localhost:5000/tickets](http://localhost:5000/tickets)**
â€¢ API endpoint: **http://localhost:5000/api/tickets**
â€¢ Auth token: `r&   Z
nenastavené   z...`rk   )rm   rn   r/   rx   r.   rS   r|   r«   r~   r   r´   r}   ro   )
r4   rq   rl   r¼   rð   Ú
roles_textr�   r‚   Z
types_textr¾   r5   r5   r6   Úshow_configþ  sp   €þÿþýøÿú
€ý ýþù
zTicketSystem.show_configÚsyncc                 Ã   s8   �|   ¡ I dH  tjdd| jd�}|j|d�I dH  dS )u/   Synchronizuje konfiguraci s webovÃ½m rozhranÃ­mNu   âœ… Synchronizace dokonÄ�enauO   Konfigurace a data ticket systÃ©mu byla synchronizovÃ¡na s webovÃ½m rozhranÃ­m.ri   rk   )rV   rm   rn   r/   ro   rp   r5   r5   r6   Úsync_web_configJ  s   €ýzTicketSystem.sync_web_configc                 Ã   sà   �|j jrdS d}| jd D ]}|d t|jjƒkr|} qq|r'|d dkr)dS t|jƒt|j jƒ|j j|jt 	¡  
¡ dd„ |jD ƒdœ}d	|vrNg |d	< |d	  |¡ t|j jƒ|d
 vrj|d
  t|j jƒ¡ |  ¡  dS )u3   ZachycenÃ­ zprÃ¡v v ticket kanÃ¡lech pro logovÃ¡nÃ­Nr@   r£   rc   r>   c                 S   s   g | ]}|j ‘qS r5   )r  )r‹   Ú
attachmentr5   r5   r6   rŽ   n  s    z+TicketSystem.on_message.<locals>.<listcomp>)r‰   Z	author_idZauthor_namer  rZ   Úattachmentsr¨   r©   )ry   r(   r,   r0   r¿   r‰   r   r  r   ra   rb   r!  r¸   rW   )r4   rÏ   rÀ   rg   Úmessage_datar5   r5   r6   Ú
on_messageW  s0   €þ

ú	zTicketSystem.on_messagec                 Ã   s.   �t dƒ | j tƒ ¡ | jj |  ¡ ¡ d S )Nu   ðŸ“© Ticket System loaded)rI   r(   Úadd_viewÚ
TicketViewÚlooprU   Úcheck_panel_requests)r4   r5   r5   r6   Úon_ready|  s   €zTicketSystem.on_readyc              
   Ã   sì   �| j  ¡ I dH  | j  ¡ stz=tj | jd¡}tj |¡rJt|dƒ�}t	 
|¡}W d  ƒ n1 s2w   Y  | d¡dkrE|  ¡ I dH  t |¡ W n tyd } ztd|› �ƒ W Y d}~nd}~ww t d¡I dH  | j  ¡ rdS dS )uT   PravidelnÄ› kontroluje poÅ¾adavky na vytvoÅ™enÃ­ ticket panelu z webovÃ©ho rozhranÃ­Nzticket_panel_request.jsonr9   rï   Z
post_panelzError checking panel requests: rÞ   )r(   Úwait_until_readyÚ	is_closedrC   rD   ÚjoinÚbase_dirrE   r>   rF   rG   rS   Úpost_ticket_panelrÖ   rH   rI   rT   r  )r4   Zpanel_request_filerK   ÚrequestrL   r5   r5   r6   r'  ƒ  s&   €
ÿ
€€ÿïz!TicketSystem.check_panel_requestsc              
   Ã   s¸   �z@| j  d¡sW dS | j t| j d ƒ¡}|sW dS tj| j d d | j d d | j d d d�}tƒ }|j||d�I d	H  W d
S  t	y[ } zt
d|› �ƒ W Y d	}~dS d	}~ww )u,   VytvoÅ™Ã­ ticket panel v nastavenÃ©m kanÃ¡lur£   Frl   rj   r   r   ri   )rl   ÚviewNTzError posting ticket panel: )r.   rS   r(   r«   r~   rm   rn   r%  ro   rH   rI   )r4   r¿   rl   r/  rL   r5   r5   r6   r-  ™  s(   €ý€þzTicketSystem.post_ticket_panel)r8   Nrö   ),Ú__name__Ú
__module__Ú__qualname__r7   r   r+   rW   r-   r3   rV   r   Úgrouprr   Úcommandrƒ   r   r0   rÁ   rÌ   Úhas_permissionsrÑ   rm   ÚMemberrÕ   rØ   rç   ÚCategoryChannelré   ÚTextChannelrì   r¹   ÚCogÚlistenerr  ÚRoler  r  r  r  r  r#  r(  r'  r-  r5   r5   r5   r6   r      sr    -




	

F$ 

L

'
4
9

+



'
 
e





9

J

$
r   c                 Ã   s   �|   t| ƒ¡I d H  d S rö   )Úadd_cogr   )r(   r5   r5   r6   rÍ   ³  s   €rÍ   )rm   Údiscord.extr   rF   rC   rT   r1   r   r^   Útypingr   r   r   r   r9  r   rÍ   r5   r5   r5   r6   Ú<module>   s(             1