1
0

tescort.lisp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. (in-package :cl-user)
  2. (defpackage chatikbot.plugins.tescort
  3. (:use :cl :chatikbot.common :chatikbot.scraping))
  4. (in-package :chatikbot.plugins.tescort)
  5. (defparameter +login-form+
  6. '(("http://www.tescort.com/private/signin")
  7. ".signin-box form"
  8. (("username" . login)
  9. ("password" . pass))))
  10. (defparameter +blacklist-search+
  11. '(("http://www.tescort.com/panel/client-blacklist" :parameters (("client_criterias" . q)
  12. ("search" . "search")))
  13. ".black_list_table tbody tr"
  14. ((:date . ("td:nth-of-type(1)"))
  15. (:name . ("td:nth-of-type(2)"))
  16. (:city . ("td:nth-of-type(3)"))
  17. (:phone . ("td:nth-of-type(4)"))
  18. (:comment . ("td:nth-of-type(5)")))))
  19. (defvar *login*)
  20. (defvar *pass*)
  21. (defun login ()
  22. (let ((dom (do-form +login-form+ `((login . ,*login*) (pass . ,*pass*)))))
  23. (when (zerop (length (clss:select "#header .sitemenu-logged" dom)))
  24. (error "bad password"))
  25. dom))
  26. (defvar *tescort-cookie-jar* (cl-cookie:make-cookie-jar))
  27. (defun search-blacklist (query)
  28. (let ((*cookie-jar* *tescort-cookie-jar*))
  29. (unless (have-cookies (car +blacklist-search+))
  30. (login))
  31. (scrape-list +blacklist-search+ `((q . ,query)))))
  32. (defun format-blacklist (blacklist)
  33. (with-output-to-string (s)
  34. (loop for item in blacklist
  35. do (format s "~A, ~A: ~A *~A*~%~A~%~%"
  36. (agets item :date) (agets item :city)
  37. (agets item :name) (agets item :phone)
  38. (agets item :comment)))))
  39. (defun handle-blacklist (chat-id query)
  40. (telegram-send-chat-action chat-id "typing")
  41. (let ((results (search-blacklist query)))
  42. (bot-send-message chat-id (if results (format-blacklist results) "Not found")
  43. :parse-mode "markdown" :disable-web-preview "true")))
  44. (def-message-cmd-handler handler-cmd-blacklist (:blacklist)
  45. (cond
  46. ((null args) (bot-send-message chat-id "Enter query")
  47. (on-next-message chat-id
  48. (handle-blacklist chat-id text)))
  49. (:otherwise (handle-blacklist chat-id (spaced args)))))