o
    Š‡h\s  ã                   @   s€   d dl Z d dlmZ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
Z
G dd„ dƒZG dd„ dejƒZdd	„ ZdS )
é    N)ÚcommandsÚtasks)Údatetimec                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚRemoteServerMonitoringc                 C   s   i | _ |  ¡  d S ©N)ÚserversÚload_servers_config©Úself© r   úIC:\Users\Buzz\Documents\TitanTS\Discord\TitanBot\files\cogs\monitoring.pyÚ__init__   s   zRemoteServerMonitoring.__init__c                 C   sR   t j d¡r$tddƒ�}t |¡| _W d  ƒ dS 1 sw   Y  dS i | _dS )u(   NaÄ�te konfiguraci vzdÃ¡lenÃ½ch serverÅ¯úservers_config.jsonÚrN)ÚosÚpathÚexistsÚopenÚjsonÚloadr   ©r
   Úfr   r   r   r      s
   "ÿ
z*RemoteServerMonitoring.load_servers_configc                 C   sB   t ddƒ�}tj| j|dd� W d  ƒ dS 1 sw   Y  dS )u   UloÅ¾Ã­ konfiguraci serverÅ¯r   Úwé   ©ÚindentN)r   r   Údumpr   r   r   r   r   Úsave_servers_config   s   "ÿz*RemoteServerMonitoring.save_servers_configc           	   
   Ã   sX  �z�| j  |¡}|sW dS ddl}| ¡ 4 I dH šh}d|d › d|d › d�}|j|dd	�4 I dH š8}|jd
kr`| ¡ I dH }|d |d< ||d< |W  d  ƒI dH  W  d  ƒI dH  W S W d  ƒI dH  qu1 I dH spw   Y  W d  ƒI dH  W dS 1 I dH s‡w   Y  W dS  ty« } ztd|› d|› �ƒ W Y d}~dS d}~ww )u$   ZÃ­skÃ¡ data ze vzdÃ¡lenÃ©ho serveruNr   úhttp://Úhostú:Úportú/api/monitoringé
   ©ÚtimeoutéÈ   ÚnameÚserver_nameÚ	server_idzError getting data from ú: )r   ÚgetÚaiohttpÚClientSessionÚstatusr   Ú	ExceptionÚprint)	r
   r)   Úserverr,   ÚsessionÚurlÚresponseÚdataÚer   r   r   Úget_remote_server_data   s6   €
ûþ*ÿþø€þz-RemoteServerMonitoring.get_remote_server_dataN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r7   r   r   r   r   r      s
    r   c                	   @   s`  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
jdd�dd„ ƒZe ¡ ejdd�dd„ ƒƒZe ¡ ejdd�dd„ ƒƒZe ¡ ejdd�dd„ ƒƒZe ¡ ejdd�dd„ ƒƒZe ¡ ejdd�d-deded efd!d"„ƒƒZe ¡ ejdd�d#efd$d%„ƒƒZe ¡ ejdd�d&d'„ ƒƒZe ¡ ejdd�d(d)„ ƒƒZej ¡ d*d+„ ƒZd,S ).ÚServerMonitoringc                 C   s,   || _ d | _i | _i | _tƒ | _|  ¡  d S r   )ÚbotÚalert_channel_idÚlast_alertsZmonitoring_datar   Úremote_monitoringÚload_config)r
   r<   r   r   r   r   3   s   zServerMonitoring.__init__c                 C   sÔ   t j d¡rStddƒ�>}t |¡}| d¡| _| dd¡| _| dd¡| _	| dd	¡| _
| d
d¡| _| dd¡| _| dd¡| _W d  ƒ dS 1 sLw   Y  dS d| _d| _d| _	d	| _
d| _d| _d| _dS )u!   NaÄ�tenÃ­ konfigurace monitoringuúmonitoring_config.jsonr   r=   Úcpu_thresholdéP   Úmemory_thresholdéU   Údisk_thresholdéZ   Útemp_thresholdéK   Úmonitoring_methodÚautoÚsystem_overrideN)r   r   r   r   r   r   r+   r=   rB   rD   rF   rH   rJ   rL   )r
   r   Úconfigr   r   r   r@   ;   s$   
"ø
zServerMonitoring.load_configc                 C   s   |   ¡  td| j› �ƒ dS )u#   Znovu naÄ�te konfiguraci ze souboruu1   ðŸ“Š Monitoring config reloaded - Alert channel: N)r@   r0   r=   r	   r   r   r   Úreload_configQ   s   zServerMonitoring.reload_configc                 C   sb   | j | j| j| j| j| j| jdœ}tddƒ�}tj	||dd� W d  ƒ dS 1 s*w   Y  dS )u   UloÅ¾enÃ­ konfigurace)r=   rB   rD   rF   rH   rJ   rL   rA   r   r   r   N)
r=   rB   rD   rF   rH   rJ   rL   r   r   r   )r
   rM   r   r   r   r   Úsave_configV   s   ù	"ÿzServerMonitoring.save_configc                 C   s*  t  ¡ dkr:z.g d¢}tj|ddddd�}|jdkr3|j ¡ r3|j ¡ }| ¡ r3t|ƒ}|dkr3|W S W n>   Y n9t  ¡ dkrsz.tjd	gddd
d�}|jdkrm|j 	d¡D ]}d|v rl| 	d¡d  ¡ }t
|ƒ  W S qVW n   Y zt ¡ }|r†|jr‰|jdkrŒ|jW S W dS W dS W dS    Y dS )u(   ZÃ­skÃ¡nÃ­ CPU frekvence - zjednoduÅ¡enoÚWindows)Z
powershellz-ExecutionPolicyZBypassz-CommandzM(Get-WmiObject -Class Win32_Processor | Select-Object -First 1).MaxClockSpeedTé   )Úcapture_outputÚtextr%   Úshellr   iô  ÚLinuxZlscpué   )rR   rS   r%   Ú
zCPU max MHzr    é   N)ÚplatformÚsystemÚ
subprocessÚrunÚ
returncodeÚstdoutÚstripÚisdigitÚintÚsplitÚfloatÚpsutilZcpu_freqÚmax)r
   Zps_cmdÚresultZfreq_strÚfreqÚliner   r   r   Úget_cpu_frequencyd   sL   
€
þ€ÿûûýz"ServerMonitoring.get_cpu_frequencyc                 C   sô  �z]t | dƒr| jdkr| j}nt ¡ }|dk}t | dƒr:| jdkr't ¡ }n| jdkr3tjdd�}ntjd	d�}ntjd	d�}tjd
d�}tjdd�}|  ¡ }t 	¡ }|r\t 
d¡}nt 
d¡}zt ¡ }	W n   d}	Y d}
z t ¡ }|r�| ¡ D ]\}}|rŽt|ƒdkrŽ|d j}
 q�q{W n   Y g }zMg }t g d¢¡D ]4}z#|jd }|rÅ|dvrÅ| |jd |dd… d|jd pÁddœ¡ W q¡ tjtjtjfyÕ   Y q¡w t|dd„ d
d�dd… }W n tyÿ } ztd|› �ƒ g }W Y d}~nd}~ww t|dƒ|||�p
||�rt|dƒnddœ|j|jt|jdƒ|jdœ|j|j|jt|j|j d  dƒd!œ|
�r<t|
dƒnd|t  ¡  !¡ |t"| ddƒd"œ}|	�r\|	j#|	j$|	j%|	j&d#œ|d$< |W S  t�yy } ztd%|› �ƒ W Y d}~dS d}~ww )&u/   SynchronnÃ­ zÃ­skÃ¡nÃ­ systÃ©movÃ½ch informacÃ­rL   rK   rP   rJ   ÚfastZaccurateg       @)Úintervalg      ð?T)ZlogicalFzC:ú/Nr   )Úpidr'   Úmemory_percentr'   )zSystem Idle ProcessÚSystemÚ rm   é   rn   )rm   r'   Úcpu_percentrn   c                 S   s   | d S )Nrn   r   )Úxr   r   r   Ú<lambda>Ó   s    z7ServerMonitoring.get_system_info_sync.<locals>.<lambda>)ÚkeyÚreverser#   zError getting processes: rX   )ÚpercentÚcount_logicalÚcount_physicalÚcountÚ	frequency)ÚtotalÚ	availablerw   Úusedéd   )r|   r~   Úfreerw   )ÚcpuÚmemoryÚdiskÚtemperatureÚ	processesÚ	timestamprZ   Úmethod)Ú
bytes_sentÚ
bytes_recvÚpackets_sentÚpackets_recvÚnetworkzMonitoring error: )'ÚhasattrrL   rY   rZ   rJ   rd   rr   Ú	cpu_countri   Zvirtual_memoryÚ
disk_usageZnet_io_countersZsensors_temperaturesÚitemsÚlenÚcurrentZprocess_iterÚinfoÚappendZNoSuchProcessZAccessDeniedZZombieProcessÚsortedr/   r0   Úroundr|   r}   rw   r~   r€   r   ÚnowÚ	isoformatÚgetattrrˆ   r‰   rŠ   r‹   )r
   Zdetected_systemZ
is_windowsrr   Zcpu_count_logicalZcpu_count_physicalZcpu_frequencyr‚   rƒ   rŒ   r„   Ztempsr'   Úentriesr…   ZprocsÚprocr6   rf   r   r   r   Úget_system_info_syncŒ   s¶   





€

ü€ÿ€þû
üü

è
ü€þz%ServerMonitoring.get_system_info_syncc              
   Ã   sp  �t d| j› �ƒ | jr|st dƒ dS | j | j¡}|s't d| j› �ƒ dS t d|j› �ƒ t ¡ }g }|d d | jkryt d|d d › d	| j› d
�ƒ d| jvs]|| jd  j	dkru| 
d|d d d›d| j› d�¡ || jd< nt dƒ |d d | jkr½t d|d d › d	| j› d
�ƒ d| jvs¡|| jd  j	dkr¹| 
d|d d d›d| j› d�¡ || jd< nt dƒ |d d | jk�rt d|d d › d	| j› d
�ƒ d| jvsæ|| jd  j	dkrþ| 
d|d d d›d| j› d�¡ || jd< nt dƒ |d �rH|d | jk�rHt d|d › d| j› d�ƒ d| jv�s.|| jd  j	dk�rD| 
d|d d›d| j› d �¡ || jd< nt d!ƒ |�r²t d"t|ƒ› d#|j› �ƒ z>tjd$d% |¡d&|d'�}|jd(d)|d d d›d*|d d d›d+|d d d›d
�d,d-� |jd.|d/�I dH  t d0ƒ W dS  t�y± } zt d1|› �ƒ W Y d}~dS d}~ww t d2ƒ dS )3u!   Kontrola alertÅ¯ s debug vÃ½pisemu#   ðŸ”� Checking alerts - Channel ID: u#   â�Œ No alert channel set or no dataNu!   â�Œ Cannot find channel with ID: u   âœ… Found alert channel: r�   rw   u   ðŸ”¥ CPU alert triggered: z% > ú%i,  u"   ðŸ”¥ **CPU VysokÃ© zatÃ­Å¾enÃ­:** ú.1fz
% (limit: z%)u   â�³ CPU alert cooldown activer‚   u   ðŸ’¾ Memory alert triggered: u"   ðŸ’¾ **RAM VysokÃ© zatÃ­Å¾enÃ­:** u    â�³ Memory alert cooldown activerƒ   u   ðŸ’½ Disk alert triggered: u   ðŸ’½ **Disk PlnÃ½:** u   â�³ Disk alert cooldown activer„   u%   ðŸŒ¡ï¸� Temperature alert triggered: u   Â°C > õ   Â°CÚtempu   ðŸŒ¡ï¸� **VysokÃ¡ Teplota:** u   Â°C (limit: u   Â°C)u%   â�³ Temperature alert cooldown activeu   ðŸ“¤ Sending z alerts to u   ðŸš¨ Server AlertrW   é  ÿ ©ÚtitleÚdescriptionÚcolorr†   õ   ðŸ“Š AktuÃ¡lnÃ­ stavúCPU: ú	% | RAM: ú
% | Disk: F©r'   ÚvalueÚinlineú@here©Úembedu   âœ… Alerts sent successfully!u   â�Œ Error sending alert: u   âœ… No alerts to send)r0   r=   r<   Úget_channelr'   r   r—   rB   r>   Úsecondsr”   rD   rF   rH   r‘   ÚdiscordÚEmbedÚjoinÚ	add_fieldÚsendr/   )r
   r5   ÚchannelÚcurrent_timeZalertsr¯   r6   r   r   r   Úcheck_alerts  sr   €
 $ $ $" ü4ý€ÿzServerMonitoring.check_alertsr   )Úminutesc              
   Ã   s¶   �z?|   ¡  t ¡ }| d| j¡I dH }|r>tddƒ�}tj||dd� W d  ƒ n1 s.w   Y  |  |¡I dH  W dS W dS  t	yZ } zt
d|› �ƒ W Y d}~dS d}~ww )u:   HlavnÃ­ monitoring loop s automatickÃ½m reload konfiguraceNzmonitoring_data.jsonr   r   r   zMonitoring loop error: )rN   ÚasyncioÚget_event_loopÚrun_in_executorrœ   r   r   r   r¹   r/   r0   )r
   Úloopr5   r   r6   r   r   r   Úmonitor_systemN  s   €ÿú€ÿzServerMonitoring.monitor_systemT)Úadministratorc                 Ã   sŒ  �|  ¡ 4 I dH �š® �zpt ¡ }| d| j¡I dH }|s1| d¡I dH  W W d  ƒI dH  dS tjddt 	¡ d�}|d d | j
krFdnd	}|d  d
|d  dd¡¡}|d  dd¡}d|d d d›d�}||kr||dkr|||› d|› d�7 }n||› d�7 }|d d r—|d|d d d›d�7 }n|d7 }|j|› d�|dd� |d d | jkr±dnd	}	|d d d }
|d d d }|j|	› d�d|d d d›d|
d›d |d›d!�dd� |d" d | jkrêdnd	}|d" d d }|d" d d }|j|› d#�d|d" d d›d|d›d |d›d!�dd� |d$ �r;|d$ | jk�r'dnd%}|j|› d&�d|d$ d›d'�dd� |d( �rdt|d( ƒdk�rdd d)d*„ |d( dd+… D ƒ¡}|jd,|�p`d-d.d� |jd/| d0d1¡› d2�d3� |j|d4�I dH  W n% t�y¡ } z| d5|› �¡I dH  td6|› �ƒ W Y d}~nd}~ww W d  ƒI dH  dS W d  ƒI dH  dS 1 I dH �s¿w   Y  dS )7u    ZobrazÃ­ aktuÃ¡lnÃ­ stav serveruNu,   â�Œ Chyba pÅ™i zÃ­skÃ¡vÃ¡nÃ­ monitoring dat!u   ðŸ“Š Server MonitoringéòeX ©r£   r¥   r†   r�   rw   õ   ðŸ”¥õ   ðŸ’šry   rx   r   z**rž   z%**
z cores, z threadsz coresr{   rW   z.0fz MHz (base)u   
*Frekvence nedostupnÃ¡*z CPUTrª   r‚   r~   i   @r|   z RAMrl   z GBrƒ   z Diskr„   u   â�„ï¸�z Teplotau   Â°C**r…   c                 S   s2   g | ]}d |d dd… d›d|d d›d�‘qS )	ú`r'   Né   Z12Ú rn   z>5.1fz% RAM`r   )Ú.0r›   r   r   r   Ú
<listcomp>¨  s    $ÿÿz/ServerMonitoring.monitoring.<locals>.<listcomp>é   u   ðŸ”� Top Procesy (RAM)u   Å½Ã¡dnÃ© procesyFu   BuzzHost Server Monitoring â€¢ rZ   ÚUnknownu'    â€¢ Konfigurace: http://localhost:5000©rS   r®   u   â�Œ Chyba pÅ™i monitoring: zMonitoring command error: )Útypingr»   r¼   r½   rœ   r¶   r²   r³   r   r—   rB   r+   rµ   rD   rF   rH   r‘   r´   Ú
set_footerr/   r0   )r
   Úctxr¾   r5   r¯   Ú	cpu_emojiZ	cpu_coresZcpu_threadsZcpu_textZmemory_emojiZ	memory_gbZmemory_total_gbÚ
disk_emojiZdisk_gbZdisk_total_gbZ
temp_emojiZtop_processesr6   r   r   r   Ú
monitoringc  sŒ   €ø
ý$ý$ý
ý
þýÿ€þþ±S0­zServerMonitoring.monitoringc                 Ã   sÊ   �zE|   ¡  tjddt ¡ d�}|jd| jrd| j› d�nddd	� |jd
d| j› d| j› d| j	› d| j
› d�	dd	� |j|d�I dH  W dS  tyd } z| d|› �¡I dH  W Y d}~dS d}~ww )u#   Znovu naÄ�te monitoring konfiguraciu   ðŸ”„ Monitoring Config Reloadedé ÿ  rÂ   u   ðŸ“¢ Alert KanÃ¡lz<#Ú>ZNenastavenoFrª   u   ðŸš¨ Thresholdsr§   r¨   r©   z
% | Temp: rŸ   r®   Nu$   â�Œ Chyba pÅ™i reloadu konfigurace: )rN   r²   r³   r   r—   rµ   r=   rB   rD   rF   rH   r¶   r/   )r
   rÏ   r¯   r6   r   r   r   Úreloadmonitoring¼  s.   €ýý$ý$€ÿz!ServerMonitoring.reloadmonitoringc              
   Ã   sü   �|   ¡  | js| d¡I dH  dS | j | j¡}|s*| d| j› d�¡I dH  dS tjdddt ¡ d�}|j	d	|j
d
d� |j	ddd
d� z|j|d�I dH  | 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   Test alert systÃ©muõ    â�Œ Alert kanÃ¡l nenÃ­ nastaven!Nõ   â�Œ KanÃ¡l s ID ú nenalezen!u   ðŸ§ª Test Alertu0   Toto je testovacÃ­ alert ze systÃ©mu monitoring.i ™ÿ r¢   u   ðŸ“¢ KanÃ¡lFrª   u   ðŸš¨ Statusu    Alert systÃ©m funguje sprÃ¡vnÄ›!r®   u   âœ… Test alert odeslÃ¡n do ú!u   â�Œ Chyba pÅ™i odesÃ­lÃ¡nÃ­: )rN   r=   r¶   r<   r°   r²   r³   r   r—   rµ   Úmentionr/   )r
   rÏ   r·   r¯   r6   r   r   r   Ú	testalertÚ  s0   €ü $€ÿzServerMonitoring.testalertc              
   Ã   s‚  �z¡t  ¡ }| d| j¡I dH }|s| d¡I dH  W dS |  ¡  | js/| d¡I dH  W dS | j | j¡}|sH| d| j› d�¡I dH  W dS t	j
dddt ¡ d	�}|jd
d|d d d›d|d d d›d|d d d›d�dd� |jdd| j› d| j› d| j› d�dd� |jd|d�I dH  | 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"   VynutÃ­ odeslÃ¡nÃ­ alertu pro testNu!   â�Œ Chyba pÅ™i zÃ­skÃ¡vÃ¡nÃ­ dat!rÖ   r×   rØ   u   ðŸš¨ Forced Alert Testu8   ðŸ”¥ **Test CPU Alert:** VynutÃ­ alert pro test systÃ©mur¡   r¢   r¦   r§   r�   rw   rž   r¨   r‚   r©   rƒ   r�   Frª   u   âš™ï¸� NastavenÃ© thresholdsr­   r®   u   âœ… Forced alert odeslÃ¡n do rÙ   u   â�Œ Chyba: )r»   r¼   r½   rœ   r¶   rN   r=   r<   r°   r²   r³   r   r—   rµ   rB   rD   rF   rÚ   r/   )r
   rÏ   r¾   r5   r·   r¯   r6   r   r   r   Ú
forcealertù  sJ   €ü4ýý $€ÿzServerMonitoring.forcealertéˆ  r'   r   r!   c                 Ã   sÚ  �|  ¡  dd¡}zxddl}| ¡ 4 I dH š_}d|› d|› d�}|j|dd	�4 I dH š5}	|	jd
krV| d|› d|› d�¡I dH  	 W d  ƒI dH  W d  ƒI dH  W dS W d  ƒI dH  qk1 I dH sfw   Y  W d  ƒI dH  q€1 I dH s{w   Y  W n$ ty¥ }
 z| d|› d|› d|
› �¡I dH  W Y d}
~
dS d}
~
ww |||dt 	¡  
¡ dœ| jj|< | j ¡  tjdd|› d�dd�}|jdd|› d|› d�dd� |jdd|› d�dd� |j|d�I dH  dS )u#   PÅ™idÃ¡ novÃ½ server pro monitoringrÇ   Ú_r   Nr   r    r"   rÊ   r$   r&   u   â�Œ Server u    neodpovÃ­dÃ¡!u   â�Œ Chyba pÅ™ipojenÃ­ k r*   T)r'   r   r!   ÚenabledZadded_atu   âœ… Server pÅ™idÃ¡nz	Server **u+   ** byl ÃºspÄ›Å¡nÄ› pÅ™idÃ¡n do monitoringu!rÓ   )r£   r¤   r¥   u   ðŸŒ� EndpointrÅ   Frª   u   ðŸ†” IDr®   )ÚlowerÚreplacer,   r-   r+   r.   r¶   r/   r   r—   r˜   r?   r   r   r²   r³   rµ   )r
   rÏ   r'   r   r!   r)   r,   r2   r3   r4   r6   r¯   r   r   r   Ú	addserver*  sH   €
ýþ*ÿ(þ€"€þ
û

ýzServerMonitoring.addserverr)   c                 Ã   sj   �|| j jvr| d|› d�¡I dH  dS | j j| d }| j j|= | j  ¡  | d|› d�¡I dH  dS )zOdebere server z monitoringuu   â�Œ Server `z` nenalezen!Nr'   u   âœ… Server **u   ** odebrÃ¡n z monitoringu!)r?   r   r¶   r   )r
   rÏ   r)   r(   r   r   r   ÚremoveserverQ  s   €

zServerMonitoring.removeserverc              	   Ã   s¦   �| j js| d¡I dH  dS tjddd�}| j j ¡ D ]+\}}| dd¡r(dnd	}|j|d
 › d|› d�|› d|d › d|d › d�dd� q|j|d�I dH  dS )u(   ZobrazÃ­ seznam monitorovanÃ½ch serverÅ¯u9   ðŸ“­ Å½Ã¡dnÃ© vzdÃ¡lenÃ© servery nejsou nakonfigurovÃ¡ny!Nu   ðŸŒ� MonitorovanÃ© ServeryrÁ   )r£   r¥   rß   Tu   ðŸŸ¢ Onlineu   ðŸ”´ Offliner'   z (ú)z
`r   r    r!   rÅ   rª   r®   )r?   r   r¶   r²   r³   r�   r+   rµ   )r
   rÏ   r¯   r)   r1   r.   r   r   r   Úlistservers_  s    €þýzServerMonitoring.listserversc                 Ã   s<  �|  ¡ 4 I dH �š t ¡  d| j¡I dH }i }| jjD ]}| j |¡I dH }|r.|||< qtj	ddt
 ¡ d�}|r\|jdd|d d d	›d
|d d d	›d|d d d	›d�dd� | ¡ D ]_\}}| jj| d }|d d | jkrwdnd}|d d | jkr„dnd}	|d d | jkr‘dnd}
|jd|› �|› d|d d d	›d|	› d|d d d	›d|
› d|d d d	›d�dd� q`g }| jj ¡ D ]\}}||vr×| |d ¡ qÈ|rê|jdd dd„ |D ƒ¡dd� |jdt|ƒ|rôdnd › d �d!� |j|d"�I dH  W d  ƒI dH  dS 1 I dH �sw   Y  dS )#u#   ZobrazÃ­ monitoring vÅ¡ech serverÅ¯Nu   ðŸŒ� Multi-Server MonitoringrÁ   rÂ   u   ðŸ’» LokÃ¡lnÃ­ Serverr§   r�   rw   rž   r¨   r‚   r©   rƒ   r�   Frª   r'   rÃ   rÄ   u   ðŸŒ� z CPU: z% | z RAM: z Disk: u   ðŸ”´ Offline ServeryrW   c                 S   s   g | ]}d |› �‘qS )u   â�Œ r   )rÈ   r'   r   r   r   rÉ   ¬  s    z3ServerMonitoring.monitoring_all.<locals>.<listcomp>u   MonitorovÃ¡no: rX   r   u	    serverÅ¯rÌ   r®   )rÍ   r»   r¼   r½   rœ   r?   r   r7   r²   r³   r   r—   rµ   r�   rB   rD   rF   r”   r´   rÎ   r‘   r¶   )r
   rÏ   Z
local_dataZremote_datar)   r5   r¯   r(   rÐ   Z	ram_emojirÑ   Zoffline_serversr1   r   r   r   Úmonitoring_allv  sX   €€ý4ýDý€ý$0ÉzServerMonitoring.monitoring_allc                 Ã   s&   �| j  ¡ s| j  ¡  tdƒ d S d S )Nu!   ðŸ“Š Server monitoring spuÅ¡tÄ›n!)r¿   Ú
is_runningÚstartr0   r	   r   r   r   Úon_ready³  s
   €

þzServerMonitoring.on_readyN)rÝ   )r8   r9   r:   r   r@   rN   rO   ri   rœ   r¹   r   r¾   r¿   r   ÚcommandÚhas_permissionsrÒ   rÕ   rÛ   rÜ   Ústrra   râ   rã   rå   ræ   ÚCogÚlistenerré   r   r   r   r   r;   2   sH    (v
L

W


/
%


;r;   c                 Ã   s   �|   t| ƒ¡I d H  d S r   )Úadd_cogr;   )r<   r   r   r   Úsetup¹  s   €rð   )r²   Údiscord.extr   r   rd   r   r   r»   r   rY   r[   r   rí   r;   rð   r   r   r   r   Ú<module>   s"    '     