1
0

tumblr.lisp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. (in-package :chatikbot)
  2. (defvar *tumblr-roll* nil "List of tumblr to select from")
  3. (defparameter *read-timeout* 5 "API request timeout")
  4. (defparameter *boobs-roll*
  5. '("http://boobsarethegreatest.tumblr.com"
  6. "http://perfectbreasts.tumblr.com")
  7. "Tumblr roll with boobs")
  8. (defparameter *ass-roll*
  9. '("http://divine-asses.tumblr.com"
  10. "http://greatestassonearth.tumblr.com")
  11. "Tumblr roll with asses")
  12. (defparameter *tumblr-rules*
  13. `((((?* ?a) (?or сиськи сисяндры титьки буфера boobs tits) (?is ?n numberp))
  14. (#'tumblr-random-photo ,*boobs-roll* ?n))
  15. (((?* ?a) (?or сиськи сисяндры титьки буфера boobs tits) (?* ?b))
  16. (#'tumblr-random-photo ,*boobs-roll*))
  17. (((?* ?a) (?or жопа жопы ягодицы зад зады ass asses) (?is ?n numberp))
  18. (#'tumblr-random-photo ,*ass-roll* ?n))
  19. (((?* ?a) (?or жопа жопы ягодицы зад зады ass asses) (?* ?b))
  20. (#'tumblr-random-photo ,*ass-roll*))
  21. (((?* ?a) (?or тёлка телка телку тёлку баба бабу сука суку сучка сучку babe bitch) (?* ?b))
  22. (#'tumblr-random-photo ,*ass-roll*) (#'tumblr-random-photo ,*boobs-roll*))))
  23. (defun lo-string (val)
  24. (string-downcase (princ-to-string val)))
  25. (defun tumblr-read (domain &rest args)
  26. (let ((params (loop for (k v) on args by #'cddr
  27. when v collect (cons (lo-string k) (lo-string v)))))
  28. (yason:parse
  29. (subseq (http-request
  30. (format nil "~A/api/read/json" domain)
  31. :parameters params
  32. :timeout *read-timeout*)
  33. 22)
  34. :object-as :alist)))
  35. (defun tumblr-random-post (&key (roll *tumblr-roll*) type (num 1))
  36. (when roll
  37. (let* ((domain (random-elt roll))
  38. (total (aget "posts-total" (tumblr-read domain :num 1 :type type)))
  39. (start (random total))
  40. (res (tumblr-read domain :num num :type type :start start)))
  41. (log:info "Post" start "from" domain)
  42. (loop for post in (aget "posts" res)
  43. collect (aget "photo-url-1280" post)))))
  44. (defun tumblr-random-photo (&optional (roll *tumblr-roll*) (num 1))
  45. (tumblr-random-post :roll roll :type :photo :num num))
  46. (def-message-handler handle-tumblr (message)
  47. (alexandria:when-let ((resp (eliza (preprocess-input text) *tumblr-rules*)))
  48. (log:info resp)
  49. (send-response chat-id resp)))