eliza.lisp 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. (in-package #:chatikbot)
  2. (defparameter *fuck-off*
  3. '((отъебись) (мне похуй) (ебаный ты нахуй!))
  4. "Fuck-off responses")
  5. (defun goto-p (input) (member input '(иди пошел вали)))
  6. (defun prep-p (i) (member i '(в на)))
  7. (defun dirty-p (i) (member i '(лох хуй мудак ебалай пидор сука уебок мудило еблан говнюк уебище ебантяй пидрила)))
  8. (defparameter *eliza-rules*
  9. `(
  10. (((?is ?g goto-p) (?is ?prep prep-p) (?* ?х))
  11. (а самому не пойти ?prep ?х ?) (мамку свою посылай ?prep ?х) (покомандуй тут еще) ,@*fuck-off*)
  12. (((?is ?g goto-p) (?* ?x))
  13. (сам иди ?x) (покомандуй тут еще) ,@*fuck-off*)
  14. (((?* ?a) ты (?* ?x))
  15. (сам ?x) (сам ты ?x) (а по ебалу?) (сейчас мы разберемся кто еще тут ?x) ,@*fuck-off*)
  16. (((?is ?x dirty-p))
  17. (сам ?x) (сам ты ?x) (а по ебалу?) (сейчас мы разберемся кто еще тут ?x))
  18. (((?* ?a) (?or хуита хуета хуйня лажа говно бред) (?* ?b))
  19. ("вам, сударь," не угодить) (и что?) (бывает) (мопед не мой) (сам получше придумывай) ,@*fuck-off*)
  20. (((?* ?a) (?or норм хорошо молодец ниплохо ниплоха ниеплоха) (?* ?b))
  21. (спасибо) (я старался) (как себе) ,@*fuck-off*)
  22. (((?or спасибо) (?* ?x))
  23. (всё для вас) (пожалуйста) (на здоровье) ,@*fuck-off*)
  24. (((?* ?x) (?or уровень) (?* ?y))
  25. (в жопу себе его засунь) (хуюровень) ,@*fuck-off*)
  26. (((?* ?a) (?is ?x ,(lambda (i) (and (symbolp i) (search "ХАХА" (symbol-name i))))) (?* ?b))
  27. (очень смешно) (клоунов тут нашел?) (посмейся мне еще) ,@*fuck-off*)
  28. (((?* ?a) (?or сиськи сисяндры титьки буфера boobs tits) (?is ?n numberp))
  29. (#'tumblr-random-photo ,*boobs-roll* ?n))
  30. (((?* ?a) (?or сиськи сисяндры титьки буфера boobs tits) (?* ?b))
  31. (#'tumblr-random-photo ,*boobs-roll*))
  32. (((?* ?a) (?or жопа жопы ягодицы зад зады ass asses) (?is ?n numberp))
  33. (#'tumblr-random-photo ,*ass-roll* ?n))
  34. (((?* ?a) (?or жопа жопы ягодицы зад зады ass asses) (?* ?b))
  35. (#'tumblr-random-photo ,*ass-roll*))
  36. (((?* ?a) (?or тёлка телка телку тёлку баба бабу сука суку сучка сучку babe bitch) (?* ?b))
  37. (#'tumblr-random-photo ,*ass-roll*) (#'tumblr-random-photo ,*boobs-roll*))
  38. ((yit)
  39. (#'yit-info))
  40. (((?* x))
  41. (:text . "И чё?")
  42. (:text . "Сам-то понял?")
  43. (:text . "Ну хуй знает")
  44. (:text . "Бля...")
  45. (:text . "В душе не ебу")
  46. (:text . "Мне похуй")
  47. (:text . "Eбаный ты нахуй")
  48. (:text . "Отъебись")
  49. (:sticker . "BQADAgADFAADOoERAAGoLKS_Vgs6GgI") ;; ЭЭ епта Чо
  50. (:sticker . "BQADAgADGQADOoERAAFDXJisD4fClgI") ;; Ну чё ты несёшь
  51. (:sticker . "BQADAgADFwADOoERAAHCw-fBiFjACgI") ;; А у меня собака, я не могу
  52. (:sticker . "BQADAgADEgADOoERAAFtU3uF9HvtQgI") ;; Бухнём?
  53. (:sticker . "BQADBAADQAEAAnscSQABqWydSKTnASoC"))))
  54. (defun punctuation-p (char)
  55. (find char ".,;:'!?#-()\\\""))
  56. (defun read-from-string-no-punct (input)
  57. "Read from an input string, ignoring punctuation."
  58. (let ((*package* (find-package 'chatikbot)))
  59. (read-from-string
  60. (concatenate 'string "(" (substitute-if #\space #'punctuation-p input) ")"))))
  61. (defun print-with-spaces (list)
  62. (format nil "~@(~{~a~^ ~}~)" list))
  63. (defun switch-viewpoint (words)
  64. "Change I to you and vice versa, and so on."
  65. (sublis '((I . you) (you . I) (me . you) (am . are)
  66. (я ты) (ты я) (меня тебя) (тебя меня))
  67. words))
  68. (defun use-eliza-rules (input)
  69. "Find some rule with which to transform the input."
  70. (rule-based-translator input *eliza-rules*
  71. :action #'(lambda (bindings responses)
  72. (sublis (switch-viewpoint bindings)
  73. (random-elt responses)))))
  74. (defun eliza (input)
  75. (let ((r (use-eliza-rules
  76. (read-from-string-no-punct input))))
  77. (cond
  78. ((null r) nil)
  79. ((and (consp (car r)) (eq 'function (caar r)))
  80. (apply (cadar r) (cdr r)))
  81. ((keywordp (car r)) r)
  82. (t (print-with-spaces (flatten r))))))