1
0

admin.lisp 1.0 KB

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