(ql:quickload :aserve) (ql:quickload :dexador) (ql:quickload :jsown) (ql:quickload :qbase64) (ql:quickload :cl-ppcre) (ql:quickload :cl-rng) (ql:quickload :manx-utils) (load #p"config.lisp") (when (null *host*) (print "Host can't be nil") (exit :code -1)) (defun get-loli (rating) (jsown:val (car ;; %parse-json returns a list of a list (jsown:parse (dex:get (manx-utils:to-string "https://lolibooru.moe/post/index.json?tags=rating:" rating "+-3dcg+-rape&limit=1&page=" (cl-rng:crandom :limit 25000 :transform 'floor))))) "file_url")) (defun main (&rest args) (net.aserve:start :port 8080 :host *host*) (net.aserve:publish :path "/loli" :content-type "text/html" :function 'this-is-bad-code) (net.aserve:publish-file :path "/loli/about" :file #p"about.html") (loop (sleep 10000))) (defun loli-rating (rating) (or (cl-ppcre:scan-to-strings "-?(s|q|e)" rating) "s")) (defun based-loli (req) (manx-utils:to-string "data:image/jpg;base64," (qbase64:encode-bytes (dex:get (get-loli (loli-rating (net.aserve:request-query-value "rating" req))))))) (defun this-is-bad-code (req ent) (net.aserve:with-http-response (req ent) (net.aserve:with-http-body (req ent) (net.html.generator:html (:html (:head ((:meta name "viewport" content "width=device-width, initial-scale=1"))) ((:body :style "position:relative") ((:img :style "object-fit: contain; width: 100%; height:100%" :src (based-loli req))) ((:a :style "position:absolute;top:8px;right:16px;" href "/loli/about") "about")))))) (gc :full t)) ;; Removes downloaded files from memory (main)