Procházet zdrojové kódy

[core] fix more free vars.

Innocenty Enikeew před 6 roky
rodič
revize
a4cb65ec65
3 změnil soubory, kde provedl 19 přidání a 9 odebrání
  1. 3 0
      common.lisp
  2. 10 8
      server.lisp
  3. 6 1
      utils.lisp

+ 3 - 0
common.lisp

@@ -43,6 +43,9 @@
            :*error*
            :*raw-state*
            :*state*
+           :*hook*
+           :*headers*
+           :*paths*
            :*admins*
            :*bot-name*
            :*hooks*

+ 10 - 8
server.lisp

@@ -92,16 +92,18 @@
   "OK")
 
 (defmacro def-webhook-handler (name (&rest routes) &body body)
-  (let ((parts (gensym "parts")))
+  (alexandria:with-gensyms (g-parts g-hook g-data g-headers)
     `(progn
-       (defun ,name (hook data headers)
-         (declare (ignorable data headers))
-         (let ((,parts (split-sequence:split-sequence #\/ hook)))
-           (when (member (car ,parts) (list ,@routes) :test #'equal)
-             (log:info ,parts)
+       (defun ,name (,g-hook ,g-data ,g-headers)
+         (let* ((,g-parts (split-sequence:split-sequence #\/ ,g-hook))
+                (*hook* ,g-hook)
+                (*data* ,g-data)
+                (*headers* ,g-headers)
+                (*paths* (rest ,g-parts)))
+           (when (member (car ,g-parts) (list ,@routes) :test #'equal)
+             (log:info ,g-parts)
              (handler-case
-                 (let ((paths (rest ,parts)))
-                   ,@body)
+                 ,@body
                (error (e) (log:error "~A" e))))))
        (add-hook :webhook ',name))))
 

+ 6 - 1
utils.lisp

@@ -22,6 +22,9 @@
            :*error*
            :*raw-state*
            :*state*
+           :*hook*
+           :*headers*
+           :*paths*
 
            :*admins*
            :*bot-name*
@@ -99,7 +102,9 @@
 (defvar *error*)
 (defvar *raw-state*)
 (defvar *state*)
-
+(defvar *hook*)
+(defvar *headers*)
+(defvar *paths*)
 
 (defvar *admins* nil "Admins chat-ids")
 (defvar *bot-name* nil "bot name to properly handle text input")