blob: b0eca5c777489295b432e782f739bc2ba5a8fb90 (
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
;; SPDX-License-Identifier: EUPL-1.2
;; SPDX-FileCopyrightText: 2025 Uko Kokņevičs <perkontevs@gmail.com>
(defpackage :ukkoclot/bot/methods
(:use :c2cl :ukkoclot/bot/impl :ukkoclot/tg-types :ukkoclot/tg-types/macros)
(:export :answer-callback-query :bot-id :bot-username :delete-message :edit-message-text :get-me :get-updates :send-message :set-my-name))
(in-package :ukkoclot/bot/methods)
(define-tg-method (answer-callback-query boolean "answerCallbackQuery" #'identity)
(callback-query-id string)
(text (or string null) nil)
(show-alert boolean nil)
(url (or string null) nil)
(cache-time (or integer null) nil))
(defun bot-id (bot)
(or (bot-id% bot)
(progn
(get-me bot)
(bot-id% bot))))
(defun bot-username (bot)
(or (bot-username% bot)
(progn
(get-me bot)
(bot-username% bot))))
(define-tg-method (delete-message boolean "deleteMessage" #'identity)
(chat-id (or integer string))
(message-id integer))
(define-tg-method (edit-message-text message "editMessageText" #'hash->message)
(business-connection-id (or string null) nil)
(chat-id (or integer string null) nil)
(message-id (or integer null) nil)
(inline-message-id (or string null) nil)
(text string)
(parse-mode (or string null) nil)
(entities (or (array message-entity) null) nil)
(link-preview-options (or link-preview-options null) nil)
(reply-markup (or inline-keyboard-markup null) nil))
(define-tg-method (get-me% user "getMe" #'hash->user :GET))
(defun get-me (bot)
(let ((res (get-me% bot)))
(setf (bot-id% bot) (user-id res))
(setf (bot-username% bot) (user-username res))
res))
(define-tg-method (get-my-name bot-name "getMyName" #'hash->bot-name :GET)
(language-code (or string null) nil))
(define-tg-method (get-updates (array update) "getUpdates" #'parse-update-array)
(offset (or integer null) nil)
(limit (or integer null) nil)
(timeout (or integer null) nil)
(allowed-updates (or string null) nil))
(define-tg-method (send-message message "sendMessage" #'hash->message)
(business-connection-id (or string null) nil)
(chat-id (or integer string))
(message-thread-id (or integer null) nil)
(text string)
;; TODO: parse-mode should maybe be keywords?
(parse-mode (or string null) nil)
(entities (or (array message-entity) null) nil)
(link-preview-options (or link-preview-options null) nil)
(disable-notification (or boolean null) nil)
(protect-content (or boolean null) nil)
(message-effect-id (or string null) nil)
(reply-parameters (or reply-parameters null) nil)
(reply-markup (or inline-keyboard-markup
;; TODO: reply-keyboard-markup
;; TODO: reply-keyboard-remove
force-reply null) nil))
(define-tg-method (set-my-name% boolean "setMyName" #'identity)
(name (or string null) nil)
(language-code (or string null) nil))
(defun set-my-name (bot &key (name nil) (language-code nil))
(block nil
(when name
(let ((curr-name (get-my-name bot :language-code language-code)))
(when (string= name (bot-name-name curr-name))
(return))))
(unless (set-my-name% bot :name name :language-code language-code)
(error "Failed to set name"))))
|