git.fiddlerwoaroof.com
users.lisp
62e9d7d6
 (in-package :hhgbot-augmented-assistant)
 
 (defmacro define-constructor (name (class &rest args))
   `(defun ,name (source-hash-table)
      (make-instance ',class
 		    ,@(mapcan (lambda (arg) (list (make-keyword arg)
 						  `(gethash ,(symbol-name arg)
 							    source-hash-table)))
 			      args))))
 
 (defclass user ()
   ((id :reader id :initarg :id)
    (name :reader name :initarg :name)
    (presence :accessor presence :initarg :presence)
    (deleted :reader deleted :initarg :deleted)
    (color :reader color :initarg :color)
    (profile :reader profile :initarg :profile)
    (is_admin :reader is_admin :initarg :is_admin)
    (is_owner :reader is_owner :initarg :is_owner)
    (is_primary_owner :reader is_primary_owner :initarg :is_primary_owner)
    (is_restricted :reader is_restricted :initarg :is_restricted)
    (is_ultra_restricted :reader is_ultra_restricted :initarg :is_ultra_restricted)
    (has_2fa :reader has_2fa :initarg :has_2fa)
    (two_factor_type :reader two_factor_type :initarg :two_factor_type)
    (has_files :reader has_files :initarg :has_files)))
 
 (define-constructor make-user
     (user id name deleted color profile
 	  is_admin is_owner is_primary_owner is_restricted is_ultra_restricted
 	  has_2fa two_factor_type has_files presence))
 
 (defmethod print-object ((o user) s)
   (print-unreadable-object (o s :type t :identity t)
     (format s "~a: ~a" (id o) (name o))))
 
 (defun format-users (client &optional (stream t))
   (format stream "~&~:{~a: ~{~19<~a~>~^ ~}~%~}"
           (stable-sort
             (sort
               (loop for id being the hash-keys of (users client) using (hash-value user)
                     collect (list id (list (name user) (presence user))))
               #'string-lessp
               :key #'caadr)
             #'string-lessp
             :key #'cadadr)))