summaryrefslogtreecommitdiff
path: root/src/tg/user.lisp
diff options
context:
space:
mode:
authorGravatar Uko Kokņevičs2025-10-23 10:17:00 +0300
committerGravatar Uko Kokņevičs2025-10-23 10:32:36 +0300
commitfec434a4e2d0ff65510581e461d87a945d25759a (patch)
tree676891233e6121f8801f4751d3e2d1ca7ad4e09c /src/tg/user.lisp
parentUse alexandria's make-keyword & symbolicate (diff)
downloadukkoclot-fec434a4e2d0ff65510581e461d87a945d25759a.tar.gz
ukkoclot-fec434a4e2d0ff65510581e461d87a945d25759a.tar.xz
ukkoclot-fec434a4e2d0ff65510581e461d87a945d25759a.zip
Use serapeum's -> & defsubst
Diffstat (limited to 'src/tg/user.lisp')
-rw-r--r--src/tg/user.lisp37
1 files changed, 16 insertions, 21 deletions
diff --git a/src/tg/user.lisp b/src/tg/user.lisp
index 0768d12..aefdeeb 100644
--- a/src/tg/user.lisp
+++ b/src/tg/user.lisp
@@ -3,6 +3,8 @@
3(defpackage :ukkoclot/src/tg/user 3(defpackage :ukkoclot/src/tg/user
4 (:documentation "User Telegram type") 4 (:documentation "User Telegram type")
5 (:use :c2cl :ukkoclot/src/tg/type-macros) 5 (:use :c2cl :ukkoclot/src/tg/type-macros)
6 (:import-from :serapeum :->)
7 (:import-from :ukkoclot/src/streams :with-format-like-stream)
6 (:import-from :ukkoclot/src/strings :escape-xml) 8 (:import-from :ukkoclot/src/strings :escape-xml)
7 (:export 9 (:export
8 #:user 10 #:user
@@ -39,26 +41,19 @@
39 (supports-inline-queries boolean nil) 41 (supports-inline-queries boolean nil)
40 (can-connect-to-business boolean nil)) 42 (can-connect-to-business boolean nil))
41 43
42(defun user-format-name% (user out) 44(-> user-format-name (user &optional (or stream boolean)) (or string null))
43 "Format the USER's name in a nice way to stream OUT." 45(defun user-format-name (user &optional out-spec)
44 (format out "<a href=\"tg://user?id=~A\"><i>" (user-id user)) 46 "Format the `user''s name in a nice way."
45 (escape-xml (user-first-name user) out) 47 (with-format-like-stream (out out-spec)
46 (when (user-last-name user) 48 (format out "<a href=\"tg://user?id=~A\"><i>" (user-id user))
47 (write-char #\Space out) 49 (escape-xml (user-first-name user) out)
48 (escape-xml (user-last-name user) out)) 50 (when (user-last-name user)
49 (write-string "</i>" out) 51 (write-char #\Space out)
52 (escape-xml (user-last-name user) out))
53 (write-string "</i>" out)
50 54
51 (when (user-username user) 55 (when (user-username user)
52 (write-string " @" out) 56 (write-string " @" out)
53 (escape-xml (user-username user) out)) 57 (escape-xml (user-username user) out))
54 58
55 (format out "</a> [<code>~A</code>]" (user-id user))) 59 (format out "</a> [<code>~A</code>]" (user-id user))))
56
57(defun user-format-name (user &optional out)
58 "Format the USER's name in a nice way to stream OUT.
59
60If OUT is `nil', return the formatted name as a string instead."
61 (if out
62 (user-format-name% user out)
63 (with-output-to-string (stream)
64 (user-format-name% user stream))))