You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1.4 KiB

(in-package #:lolisp)
(defmacro telegram-api-string (api-part)
`(str "https://api.telegram.org/bot" (config-item :loligram-url) ,api-part))
(defvar *send-loli* (telegram-api-string "/sendPhoto?chat_id=~a&photo=~a"))
(defvar *no-loli* (telegram-api-string "/sendMessage?chat_id=~a&text=Go away"))
(defvar *chats* (make-hash-table))
(defun configure-loligram ()
(setf *send-loli* (telegram-api-string "/sendPhoto?chat_id=~a&photo=~a"))
(setf *no-loli* (telegram-api-string "/sendMessage?chat_id=~a&text=Go away"))
(setf *chats* (make-hash-table))
(loop for chat in (config-item :loligram-chats)
do (setf (gethash chat *chats*) t)))
(defun get-loli ()
(cdr (assoc :file-url (rori:loli-data (rori:loli-json "s") :file-url t))))
(toot:handle (loligram :post (str "/loli/" (config-item :loligram-url))
:acceptor 'lolisp
:content-type toot:@plain)
()
(when (null (tbnl:raw-post-data))
(tbnl:abort-request-handler))
(let* ((json (jsown:parse (babel:octets-to-string (tbnl:raw-post-data))))
(chat-id (json-value json "message" "chat" "id"))
(text (json-value json "message" "text")))
(cond
((not (gethash chat-id *chats*))
(dex:get (format nil *no-loli* chat-id)))
((string= text "/loli")
(dex:get (format nil *send-loli* chat-id (get-loli))))))
"mwee") ;; Return mwee