Advertisement
Guest User

Untitled

a guest
May 26th, 2017
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 4.10 KB | None | 0 0
  1.  
  2. (ql:quickload :drakma)
  3. (ql:quickload :cl-json)
  4. (ql:quickload :cl-ppcre)
  5.  
  6. ;; (setf drakma:*header-stream* *standard-output*)
  7. (defun prompt-read (prompt)
  8.   (format *query-io* "~a: " prompt)
  9.   (force-output *query-io*)
  10.   (read-line *query-io*))
  11.  
  12. (defvar *cookie-jar*
  13.   (make-instance 'drakma:cookie-jar
  14.                  :cookies (list (make-instance 'drakma:cookie
  15.                                                :name "csrftoken"
  16.                                                :value "bot"
  17.                                                :domain "beta.mlug.ru"
  18.                                                :path "/"))))
  19.  
  20. (defvar token nil)
  21. (defvar sessionid nil)
  22. (defvar *last-uuid* nil)
  23. (defvar *messages-db* nil)
  24.  
  25. (defun init-poster ()
  26.   (drakma:http-request "https://beta.mlug.ru/id/key_authenticate"
  27.                        :method :post
  28.                        :parameters '(("csrfmiddlewaretoken" . "bot")
  29.                                      ("key" . "your key")
  30.                                      ("redirect" . "https://beta.mlug.ru/"))
  31.                        :additional-headers
  32.                        '(("Accept" . "text/html")
  33.                          ("Referer" . "https://beta.mlug.ru/id/?key_auth=1"))
  34.                        :cookie-jar *cookie-jar*)
  35.   (setf token
  36.         (drakma:cookie-value (second (drakma:cookie-jar-cookies *cookie-jar*))))
  37.   (setf sessionid
  38.         (drakma:cookie-value (first  (drakma:cookie-jar-cookies *cookie-jar*)))))
  39.  
  40. (defun say (text)
  41.   (drakma:http-request "https://beta.mlug.ru/chat/tsmr/message"
  42.                        :method :post
  43.                        :parameters (list
  44.                                     (cons "message" text)
  45.                                     (cons "csrfmiddlewaretoken" token))
  46.                        :additional-headers
  47.                        (list (cons "Content-type" "application/x-www-form-urlencoded")
  48.                              (cons "Referer" "https://beta.mlug.ru/chat/tsmr")
  49.                              (cons "X-CSRFToken" token))
  50.                        :cookie-jar *cookie-jar*
  51.                        :external-format-out :utf-8))
  52.  
  53. (init-poster)
  54.  
  55. (defun get-messages (uuid)
  56.   (cdr
  57.    (second
  58.     (cl-json:decode-json
  59.      (drakma:http-request "https://beta.mlug.ru/chat/tsmr/poll"
  60.                           :method :get
  61.                           :parameters
  62.                           (list (cons "uuid" uuid))
  63.                           :additional-headers
  64.                           (list (cons "Referer" "https://beta.mlug.ru/chat/tsmr")
  65.                                 (cons "X-CSRFToken" token))
  66.                           :cookie-jar *cookie-jar*
  67.                           :external-format-out :utf-8
  68.                           :want-stream t)))))
  69.  
  70. (defun parse-messages (messages)
  71.   (let ((msg-list nil))
  72.     (dolist (msg messages)
  73.       (setf *last-uuid* (first msg))
  74.       (if (not (equalp (third msg)
  75.                        "Alice"))
  76.           (setf msg-list (append msg-list (list (list (third msg)
  77.                                                       (fourth msg)))))))
  78.     msg-list))
  79.  
  80. (defun split-msg (message)
  81.   (cl-ppcre:split "\\s+" message
  82.                   :with-registers-p t
  83.                   :omit-unmatched-p t))
  84.  
  85. (defun respond (message)
  86.   (when (dolist (word (split-msg (second message)))
  87.           (print word)
  88.           (if (equalp word "хуй")
  89.               (return t)))
  90.     (print (first message))
  91.     (say (concatenate 'string
  92.                       "Сам иди нахуй, "
  93.                       (first message)
  94.                       "   #"
  95.                       (write-to-string (get-universal-time))))))
  96.  
  97. (defun chatting ()
  98.   (let ((start (get-universal-time))
  99.         (stop nil)
  100.         (temp-mess nil))
  101.     (when (setf temp-mess (get-messages *last-uuid*))
  102.       (setf temp-mess (parse-messages temp-mess))
  103.       (dolist (msg temp-mess)
  104.         (print msg)
  105.         (respond msg)
  106.         (print msg)))
  107.     (setf stop (get-universal-time))
  108.     (if (< (- stop start)
  109.            3)
  110.         (sleep (- 3
  111.                   (- stop
  112.                      start))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement