1
0

hooks.lisp 911 B

1234567891011121314151617181920212223242526
  1. (in-package #:chatikbot)
  2. (defvar *hooks* (make-hash-table) "Hooks storage")
  3. (defun run-hooks (event &rest arguments)
  4. (let ((hooks (gethash event *hooks*)))
  5. (labels ((try-handle (func)
  6. (apply func arguments)))
  7. (unless (some #'try-handle hooks)
  8. (log:info "unhandled" event arguments)))))
  9. (defun add-hook (event hook &optional append)
  10. (let ((existing (gethash event *hooks*))
  11. (func (if (functionp hook) hook (symbol-function hook))))
  12. (unless (member func existing)
  13. (setf (gethash event *hooks*)
  14. (if append (append existing (list func))
  15. (cons func existing))))))
  16. (defun remove-hook (event hook)
  17. (setf (gethash event *hooks*)
  18. (remove (if (functionp hook) hook (symbol-function hook))
  19. (gethash event *hooks*))))
  20. (defun string-to-event (key)
  21. (intern (string-upcase (substitute #\- #\_ key)) :keyword))