如何解决转发消息的问题?

How can I solve the problem with forwarding messages?

我使用“botact”库创建了一个聊天机器人,但是 当我尝试在 vk-community API 工作页面上验证我的 bot 时,我在 'Windows PowerShell[=20] 中收到错误=]'(这里我为机器人启动了服务器):

TypeError: Cannot read property 'fwd_messages' of undefined
 at Botact.getLastMessage (C:\Users\whoami\Desktop\Bot-test\node_modules\botact\lib\utils\getLastMessage.js:2:11)
    at Botact.module.exports (C:\Users\whoami\Desktop\Bot-test\node_modules\botact\lib\methods\listen.js:29:28).

文件 'getLastMessage.js' 包含此代码:

    const getLastMessage = (msg) => {
      if (msg.fwd_messages && msg.fwd_messages.length) {
        return getLastMessage(msg.fwd_messages[0])
      }

      return msg
    }

module.exports = getLastMessage

所以我对botact了解不多,但是根据你在/路线时的代码,你需要传递一个包含object 属性.

现在,由于这是 vk bots 的机器人框架,它可能会自动发送请求正文。您可以通过记录请求正文来确定。

server.post('/', async (req,res)=>{
    console.dir(req.body);
    await bot.listen(req, res);
});

/lib/methods/listen.js:

const { type, secret, object, group_id } = framework === 'koa'
    ? args[0].request.body
    : args[0].body
...
...
...
const { events, middlewares } = actions
const forwarded = this.getLastMessage(object)

现在,当您执行 bot.listen 时,表达传递 req 作为第一个参数。 { type, secret, object, group_id } 这些字段从 req.body.

然后 object 被传递给 getLastMessage 函数。

因此对于请求正文,您至少需要

{ "object": {} }

这是我将其添加到 Postman

的请求正文后得到的 200 OK 输出

POC代码:

const express = require("express");
const bodyParser = require("body-parser");
const { Botact } = require("botact");
const server = express();
const bot = new Botact({
  token: "token_for_my_group_i_just_hided_it",
  confirmation: "code_for_my_group_i_just_hided_it"
});
server.use(bodyParser.json());

server.post("/",bot.listen);
server.listen(8080);