blob: b5be417bdb4bb69d7971da715cc67b1fbdde9d17 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
;; SPDX-License-Identifier: EUPL-1.2
;; SPDX-FileCopyrightText: 2025 Uko Kokņevičs <perkontevs@gmail.com>
(defpackage :ukkoclot/tg-types/user
(:use :c2cl :ukkoclot/tg-types/macros)
(:import-from :ukkoclot/strings :escape-xml)
(:export
#:user
#:make-user
#:user-p
#:copy-user
#:user-id
#:user-is-bot
#:user-first-name
#:user-last-name
#:user-username
#:user-language-code
#:user-is-premium
#:user-added-to-attachment-menu
#:user-can-join-groups
#:user-can-read-all-group-messages
#:user-supports-inline-queries
#:user-can-connect-to-business
#:user-format-name))
(in-package :ukkoclot/tg-types/user)
(define-tg-type user
(id integer)
(is-bot boolean)
(first-name string)
(last-name (or string null) nil)
(username (or string null) nil)
(language-code (or string null) nil)
(is-premium boolean nil)
(added-to-attachment-menu boolean nil)
(can-join-groups boolean nil)
(can-read-all-group-messages boolean nil)
(supports-inline-queries boolean nil)
(can-connect-to-business boolean nil))
(defun user-format-name% (user out)
(format out "<a href=\"tg://user?id=~A\"><i>" (user-id user))
(escape-xml (user-first-name user) out)
(when (user-last-name user)
(write-char #\Space out)
(escape-xml (user-last-name user) out))
(write-string "</i>" out)
(when (user-username user)
(write-string " @" out)
(escape-xml (user-username user) out))
(format out "</a> [<code>~A</code>]" (user-id user)))
(defun user-format-name (user &optional out)
(if out
(user-format-name% user out)
(with-output-to-string (stream)
(user-format-name% user stream))))
|