admin.lisp 957 B

12345678910111213141516171819202122232425
  1. (in-package #:chatikbot)
  2. (defmacro handling-errors (&body body)
  3. `(handler-case (progn ,@body)
  4. (simple-condition (err)
  5. (format *error-output* "~&~A: ~%" (class-name (class-of err)))
  6. (apply (function format) *error-output*
  7. (simple-condition-format-control err)
  8. (simple-condition-format-arguments err))
  9. (format *error-output* "~&"))
  10. (condition (err)
  11. (format *error-output* "~&~A: ~% ~S~%"
  12. (class-name (class-of err)) err))))
  13. (defun rep (input)
  14. (when input
  15. (with-output-to-string (*standard-output*)
  16. (let ((*package* (find-package 'chatikbot))
  17. (*error-output* *standard-output*))
  18. (handling-errors
  19. (format t "~{~S~^ ;~% ~}~%"
  20. (multiple-value-list (eval (read-from-string input)))))))))
  21. (def-message-admin-cmd-handler handle-admin-eval (:eval)
  22. (bot-send-message chat-id (rep (format nil "~{~A~^ ~}" args))))