一个生成随机文案的插件,return部分要怎么写才正确

首先,一个生成随机毒鸡汤的插件,api的地址是这里
我的代码是这样写的:

//ctx.command("毒鸡汤").action(async () => {
    const ret = await ctx.http.get(
      "https://v.api.aa1.cn/api/api-wenan-dujitang/index.php?aa1=json"
    );
    return ret[0].dujitang;

这时候代码可以正常运行,如图:


问题是:
1.一旦我把返回的部分:return ret[0].dujitang
变成了return ret.dujitangreturn ret[0]
代码就不能正常运行了,我想知道为什么
2.如果我把https://v.api.aa1.cn/api/api-wenan-dujitang/index.php?aa1=json后面的?aa1=json删去了,代码也不能正常运行了。如图:


我想知道?后面的参数是否是必需的,什么时候要加上呢?
3.这是另一个生成舔狗文案的插件,
api的地址是这个地方
使用效果:

代码是:

//const cmd = ctx.command("舔狗").action(async () => {
    const ret = await ctx.http.get("https://v.api.aa1.cn/api/tiangou/");
    return ret;
  });

我想知道后面这个插件填api地址这个地方

https://v.api.aa1.cn/api/tiangou/

后面为什么可以不加 ?json也可以正常发送请求
而且return ret这里也不像之前的毒鸡汤插件那样:

return ret[0].dujitang

需要加[0]和后面的拼音才可以正常返回

2 个赞

你好,让我来解答你的问题

  1. 给 action 函数传入的回调函数的返回值,会被作为指令触发时的消息发出去,你需要返回一个字符串或者消息组件才能正常的被发出去
  2. 让我们打开 API 文档,它提供了这个 API 的返回值,是一个 JSON,这个 JSON 就是你获取到的 ret,它长下面这样
    image
    这是一个数组,数组的第一个成员是一个对象,你想要拿到的文本是对象里 dujitang 这个键所对应的值,因此你需要 ret[0].dujitang 来访问这个文本,把它发送给用户
  3. 如果把后面部分删去为什么不能运行呢? 这是因为,我们进行网络请求的时候,我们实际上是把一个 HTTP 消息 发送给了服务器,举例来说,对于普通的例如 GET 请求,通常包含着请求地址和请求头,我们这里没有请求头,只有请求地址,请求地址的全名叫做 统一资源定位符,我们就叫它网址吧,它分成 域名 路径 查询字符串 三个部分,其中问号后面的部分就是查询字符串,服务器会拿到这些东西然后按它喜欢来处理,因为我们不知道服务器会怎么处理,所以我们一般优先按照 API 文档里告诉我们的方法来请求 API

网址里的 query 部分(?aa=bb 的部分)也是组成网址的部分之一,我们平常看到

https://space.bilibili.com/95060399/?spm_id_from=333.999.0.0

这样的网址可以简化为

https://space.bilibili.com/95060399

这样,这只是因为最后的部分 恰好没有影响,可以随便删去,只是凑巧而已。实际上 query 部分是不能随便删的。很多query都是有实际作用的,这种情况下整个网址的所有字符就都要完整地填入。