首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在普通lisp中发布松弛的web钩子url

不能在普通lisp中发布松弛的web钩子url
EN

Stack Overflow用户
提问于 2019-02-25 14:50:52
回答 2查看 123关注 0票数 1

我想发布松弛的网络钩子,但我得到了一个错误。

这样做是可行的:

代码语言:javascript
复制
(defun post-slack ()
  (drakma:http-request "https://hooks.slack.com/services/xxx"
      :method :post
      :content-type "application/json"
      :parameters '(("payload" . "{\"username\":\"bot\",\"icon_emoji\":\":hatching_chick:\",\"text\":\"name: ~A \n email: ~A \n content: ~A \",\"as_user\":true}"))))

但这并不意味着:

代码语言:javascript
复制
(defun post-slack (name email text)
    (setq *payload* (format nil "{\"username\":\"bot\",\"icon_emoji\":\":hatching_chick:\",\"text\":\"<@U7RM4J8MR> name: ~A \n email: ~A \n text: ~A \",\"as_user\":true}" name email text))
    (drakma:http-request "https://hooks.slack.com/services/xxx"
        :method :post
        :content-type "application/json"
        :parameters '(("payload" . *payload*))))

这是我的错误:

代码语言:javascript
复制
The value
  CAVEMAN-STUDY.CONTROLLER::*PAYLOAD*
is not of type
  LIST
when binding SB-C::FAST
   [Condition of type TYPE-ERROR]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [*ABORT] Return to SLIME's top level.
 2: [ABORT] abort thread (#<THREAD "new-repl-thread" RUNNING {1008826443}>)

Backtrace:
  0: (FIND-IF-NOT #<FUNCTION (LAMBDA (DRAKMA::THING) :IN DRAKMA:HTTP-REQUEST) {22D088AB}> ("payload" . CAVEMAN-STUDY.CONTROLLER::*PAYLOAD*) :KEY #<FUNCTION CDR>)
  1: (DRAKMA:HTTP-REQUEST #<PURI:URI https://hooks.slack.com/services/xxxx> :METHOD :POST :CONTENT-TYPE "application/json" :PARAMETERS ("payload" . CAVEMAN-STUDY.CON..
  2: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CAVEMAN-STUDY.CONTROLLER:POST-SLACK "aaa" "bbb" "ccc") #<NULL-LEXENV>)
  3: (EVAL (CAVEMAN-STUDY.CONTROLLER:POST-SLACK "aaa" "bbb" "ccase"))
 --more--

请告诉我怎么修。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-25 15:55:03

您正在将(("payload" . *payload*))传递给drakma:http-request,这里的*payload*没有被计算,也就是说,它是作为一个symbol传递的,而不是它的值。

你可能想要的是

代码语言:javascript
复制
(defun post-slack (name email text)
  (let ((payload (format nil "..." ...)))
    (drakma:http-request "https://hooks.slack.com/services/xxx"
                         :method :post
                         :content-type "application/json"
                         :parameters `(("payload" . ,payload)))))

请注意,我将setq替换为let

PS。如果您想要避免使用(list (cons "payload" *payload*)),也可以使用`(("payload" . ,payload))而不是反引

票数 4
EN

Stack Overflow用户

发布于 2019-02-25 22:02:49

既然你说的是斯拉克

也有更多的斯拉克机器人。

我是在快速搜索中发现这些的(我不知道这么方便)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54868796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档