;;;; utilities -- nuff said (in-package :dnd) (let ((host (uiop:hostname)) (count 0)) (defun nuid () "Generates a Nearly Universal ID" (format nil "~36r" (sxhash (list (incf count) host (get-universal-time)))))) (defun hash-string (plaintext salt) "Hash plaintext using SALT" (flexi-streams:octets-to-string (ironclad:digest-sequence :sha3 (flexi-streams:string-to-octets (concatenate 'string salt plaintext) :external-format :utf-8)) :external-format :latin1)) (defparameter +user-nick-chars+ "0123456789abcdefghijklmnopqrstuvwxyz-._") (defun/t valid-nick-p (nick) :tests (eql ("??????") nil) (eql ("⚔") nil) (eql ("cool_beans") t) (eql ("COOOL_BEANS") t) (eql ("COOL beans") nil) :end (unless (zerop (length nick)) (every (lambda (char) (find char +user-nick-chars+)) (string-downcase nick))))