|
|
@@ -2,19 +2,39 @@
|
|
|
|
|
|
(defvar *telegram-token* nil "Telegram bot token")
|
|
|
(defparameter +telegram-api-format+ "https://api.telegram.org/bot~A/~A")
|
|
|
+(defvar *telegram-timeout* 30 "Default Telegram timeout")
|
|
|
+
|
|
|
+;; (defun %telegram-api-call (method &optional args)
|
|
|
+;; (let* ((params (loop for (k . v) in args collect (cons
|
|
|
+;; (princ-to-string k)
|
|
|
+;; (princ-to-string v))))
|
|
|
+;; (response (yason:parse
|
|
|
+;; (flexi-streams:octets-to-string
|
|
|
+;; (drakma:http-request (format nil +telegram-api-format+ *telegram-token* method)
|
|
|
+;; :method :post
|
|
|
+;; :parameters params
|
|
|
+;; :external-format-out :utf8)
|
|
|
+;; :external-format :utf8)
|
|
|
+;; :object-as :alist)))
|
|
|
+;; (unless (aget "ok" response)
|
|
|
+;; (error (aget "description" response)))
|
|
|
+;; (aget "result" response)))
|
|
|
|
|
|
(defun %telegram-api-call (method &optional args)
|
|
|
(let* ((params (loop for (k . v) in args collect (cons
|
|
|
(princ-to-string k)
|
|
|
(princ-to-string v))))
|
|
|
+ (timeout (+ 5 (or (cdr (assoc :timeout args))
|
|
|
+ *telegram-timeout*)))
|
|
|
(response (yason:parse
|
|
|
- (flexi-streams:octets-to-string
|
|
|
- (drakma:http-request (format nil +telegram-api-format+ *telegram-token* method)
|
|
|
- :method :post
|
|
|
- :parameters params
|
|
|
- :external-format-out :utf8)
|
|
|
- :external-format :utf8)
|
|
|
- :object-as :alist)))
|
|
|
+ (flexi-streams:octets-to-string
|
|
|
+ (bordeaux-threads:with-timeout (timeout)
|
|
|
+ (dex:post (format nil +telegram-api-format+ *telegram-token* method)
|
|
|
+ :content params
|
|
|
+ :use-connection-pool t
|
|
|
+ :force-binary t))
|
|
|
+ :external-format :utf8)
|
|
|
+ :object-as :alist)))
|
|
|
(unless (aget "ok" response)
|
|
|
(error (aget "description" response)))
|
|
|
(aget "result" response)))
|