
    `gj                     :    d Z d Zd ZdedefdZdedefdZd Zy	)
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                 D   ddl m}  |       }t        | dd      }|dk(  rt        |       y|dk(  r"t	        || j
                  | j                         y|dk(  r"t        || j
                  | j                         y|dk(  rt        |       yt        d	       t        d
       y)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       E/root/.hermes/venv/lib/python3.12/site-packages/hermes_cli/pairing.pypairing_commandr      s    ,NET+T2F%	9	UDMM4995	8	E4==$,,7	?	"5!IJ89    c                    | j                         }| j                         }|s|st        d       y|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 ]@  }t        d|d   dd|d   d
d|d   dd|j	                  d      xs ddd|d    d       B n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 ]2  }t        d|d   dd|d   dd|j	                  d      xs dd       4 t                yt        d       t                y)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.s7|nB?@:c"!F3<q3qAeWUV:c"!F3<q3qAeWUV 	AQz]3'q63q9c8J!EE+&,"c2!Am4D3EUL	 	01$S]O267:c"!Ic?!F3<@A:c"!Ic?!F3<@A 	`ABq}S)1Y<*<Aquu[?Q?WUWY\=]^_	`
 
G 	&'	Gr   r   r   c                    |j                         j                         }|j                         j                         }| j                  ||      }|rD|d   }|j	                  d      xs d}|r| d| dn|}t        d| d| d       t        d	       y| j                  |      rd
dl}| j                  | j                               }|j	                  d| d
      }	t        d
t        |	|j                         z
              }
|
dz  }t        d| d       t        d| d       t        dj                  |             yt        d| d| d       t        d       y)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   @   sd   ~~%%'H::<D$/FYzz+&,"'+TF"SE##G9D
:OPQNO			h	' 	!!%"8"8":;

Yxj#91=3}uzz|;<=	BXJ '! "	
 	%dV;78>>DfX>N	

 	
4& EhZrRSCDr   r   c                     |j                         j                         }| j                  ||      rt        d| d| d       yt        d| d| d       y)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   sU    ~~%%'H||Hg&,WIT(3GH	'"B8*CPQr   c                 ^    | j                         }|rt        d| d       yt        d       y)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   s.    !EUG#ABC34r   N)__doc__r   r   strr   r   r    r   r   <module>rI      sG   :(B E#  ES  EFR Rs R5r   