1
0

tumblr.lisp 2.6 KB

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