| 1234567891011121314151617181920212223242526 |
- (in-package #:chatikbot)
- (defvar *hooks* (make-hash-table) "Hooks storage")
- (defun run-hooks (event &rest arguments)
- (let ((hooks (gethash event *hooks*)))
- (labels ((try-handle (func)
- (apply func arguments)))
- (unless (some #'try-handle hooks)
- (log:info "unhandled" event arguments)))))
- (defun add-hook (event hook &optional append)
- (let ((existing (gethash event *hooks*))
- (func (if (functionp hook) hook (symbol-function hook))))
- (unless (member func existing)
- (setf (gethash event *hooks*)
- (if append (append existing (list func))
- (cons func existing))))))
- (defun remove-hook (event hook)
- (setf (gethash event *hooks*)
- (remove (if (functionp hook) hook (symbol-function hook))
- (gethash event *hooks*))))
- (defun string-to-event (key)
- (intern (string-upcase (substitute #\- #\_ key)) :keyword))
|