
    PL
j                     <    d Z d Zd ZdedefdZdedefdZd Zd	S )
aL  
CLI commands for the DM pairing system.

Usage:
    hermes pairing list              # Show all pending + approved users
    hermes pairing approve <platform> <code>  # Approve a pairing code
    hermes pairing revoke <platform> <user_id> # Revoke user access
    hermes pairing clear-pending     # Clear all expired/pending codes
c                 l   ddl m}  |            }t          | dd          }|dk    rt          |           dS |dk    rt	          || j        | j                   dS |dk    rt          || j        | j                   dS |dk    rt          |           dS t          d	           t          d
           dS )z"Handle hermes pairing subcommands.    )PairingStorepairing_actionNlistapproverevokezclear-pendingz9Usage: hermes pairing {list|approve|revoke|clear-pending}z(Run 'hermes pairing --help' for details.)gateway.pairingr   getattr	_cmd_list_cmd_approveplatformcode_cmd_revokeuser_id_cmd_clear_pendingprint)argsr   storeactions       6/home/kuhnn/.hermes/hermes-agent/hermes_cli/pairing.pypairing_commandr      s    ,,,,,,LNNET+T22F%	9		UDM4955555	8		E4=$,77777	?	"	"5!!!!!IJJJ899999    c                    |                                  }|                                 }|s|st          d           dS |rt          dt          |           d           t          ddddd	d
dddddddd 
           t          dddddd
dddddddd 
           |D ]R}t          d|d         dd|d         d
d|d         dd|                    d          pddd|d          d           Snt          d           |rt          dt          |           d           t          ddddddddd           t          ddddddddd           |D ]>}t          d|d         dd|d         dd|                    d          pdd           ?nt          d           t                       dS )z$List all pending and approved users.z4No pairing data found. No one has tried to pair yet~Nz
  Pending Pairing Requests (z):z  Platformz<12 Codez<10zUser IDz<20NameAgez--------z----z-------z---r   r   r   	user_name age_minuteszm agoz
  No pending pairing requests.z
  Approved Users (z
  No approved users.)list_pendinglist_approvedr   lenget)r   pendingapprovedpas        r   r   r      s     ""G""$$H 8 DEEE 
2?s7||???@@@U:UUUFUUUUUUUUUeUUVVVU:UUUFUUUUUUUUUeUUVVV 	 	ALQz]L L L6L L L9L L LEE+&&,"KL L45m4DL L L   	 	0111 (6S]]666777@:@@@I@@@F@@@AAA@:@@@I@@@F@@@AAA 	` 	`A^q}^^^1Y<^^^quu[?Q?Q?WUW^^^____	` 	&'''	GGGGGr   r   r   c                 p   |                                                                 }|                                                                }|                     ||          }|rR|d         }|                    d          pd}|r| d| dn|}t          d| d| d           t          d	           dS |                     |          rd
dl}|                     | 	                                          }|                    d| d
          }	t          d
t          |	|                                z
                      }
|
dz  }t          d| d           t          d| d           t          d                    |                     dS t          d| d| d           t          d           dS )zApprove a pairing code.r   r   r    z ()z
  Approved! User  on z can now use the bot~z=  They'll be recognized automatically on their next message.
r   Nz	_lockout:<   z
  Platform 'z8' is locked out after too many failed approval attempts.z  Lockout clears in ~z minute(s).zf  To reset sooner, delete the '_lockout:{0}' entry from ~/.hermes/platforms/pairing/_rate_limits.json
z	
  Code 'z%' not found or expired for platform 'z'.z2  Run 'hermes pairing list' to see pending codes.
)lowerstripupperapprove_coder%   r   _is_locked_outtime
_load_json_rate_limit_pathmaxintformat)r   r   r   resultuidnamedisplay_timelimitslockout_until	remainingminss               r   r   r   @   s   ~~%%''H::<<D$//F EYzz+&&,"'+4T##S####PGPPPPPQQQNOOOOO			h	'	' E 	!!%"8"8":":;;

#9x#9#91==3}uzz||;<<==	B"X " " "	
 	
 	
 	7d777888>>DfX>N>N	
 	
 	
 	
 	

 	R4RRhRRRSSSCDDDDDr   r   c                     |                                                                 }|                     ||          rt          d| d| d           dS t          d| d| d           dS )zRevoke a user's access.z
  Revoked access for user r,   z.
z
  User z  not found in approved list for N)r.   r/   r   r   )r   r   r   s      r   r   r   c   s    ~~%%''H||Hg&& RGWGG(GGGHHHHHP'PP8PPPQQQQQr   c                 z    |                                  }|rt          d| d           dS t          d           dS )z Clear all pending pairing codes.z
  Cleared z pending pairing request(s).
z!
  No pending requests to clear.
N)clear_pendingr   )r   counts     r   r   r   m   sP    !!E 5BUBBBCCCCC344444r   N)__doc__r   r   strr   r   r    r   r   <module>rI      s    : : :(  B E#  ES  E  E  E  EFR Rs R R R R5 5 5 5 5r   