(in-package :cl-user) (defpackage chatikbot.plugins.admin (:use :cl :chatikbot.common)) (in-package :chatikbot.plugins.admin) (defmacro handling-errors (&body body) `(handler-case (progn ,@body) (simple-condition (err) (format *error-output* "~&~A: ~%" (class-name (class-of err))) (apply (function format) *error-output* (simple-condition-format-control err) (simple-condition-format-arguments err)) (format *error-output* "~&")) (condition (err) (format *error-output* "~&~A: ~% ~S~%" (class-name (class-of err)) err)))) (defun rep (input) (when input (with-output-to-string (*standard-output*) (let ((*package* (find-package 'chatikbot.common)) (*error-output* *standard-output*)) (handling-errors (format t "~{~S~^ ;~% ~}~%" (multiple-value-list (eval (read-from-string input))))))))) (def-message-admin-cmd-handler handle-admin-eval (:eval) (bot-send-message chat-id (rep (format nil "~{~A~^ ~}" args))))