Discord js 添加对机器人消息的反应

Discord js Add reaction to a bot message

我已经创建了自己的 discord 机器人,但我遇到此代码的错误:

    message.channel.send(":apple:***SONDAGE :apple:\n "+choix1+" ou "+""+choix2+"***")
      .then(function (message) {
          message.react("")
          message.react("")
         message.pin()
          message.delete()
       });

它向频道发送消息并添加反应,但在我的控制台中出现此错误:

(node:11728) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): DiscordAPIError: Unknown Message
(node:11728) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:11728) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): DiscordAPIError: Unknown Message

那些不是错误,那些是警告。正如所说,当您的 promise 被拒绝时,您不会检查。 你应该在 .then() 之后使用 .catch() 以防它被拒绝。

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise/catch

尝试:

message.channel.send(":apple:***SONDAGE :apple:\n "+choix1+" ou "+""+choix2+"***")
            .then(function (message) {
              message.react("")
              message.react("")
              message.pin()
              message.delete()
            }).catch(function() {
              //Something
             });

我有同样的错误,你做 message.delete(),但你想添加反应。删除消息后,机器人无法添加反应。只需删除 message.delete() 就不会出现错误。

在其他答案提到的之前的事情之上,功能如 message.react(...) 所有 return 承诺,因此例如消息可能会在 react/pin 承诺之前被删除已解决。

如果你想让事情发生,你需要有一个长的 .then(...).then(...).then(...) 链,或者你可以使用 async/await。这是一个 async/await 示例:

client.on("message", async (message) => {
  const sentMessage = await message.channel.send("my message");
  await sentMessage.react("");
  await sentMessage.react("");
  await sentMessage.pin();
  await sentMessage.delete();
});

如果您想对失败进行任何错误处理,您可以将 await 内容包装在 try/catch 块中:

client.on("message", async (message) => {
  try {
    const sentMessage = await message.channel.send("my message");
    await sentMessage.react("");
    await sentMessage.react("");
    await sentMessage.pin();
    await sentMessage.delete();
  } catch (e) {
    console.error(e);
  }
});

进一步阅读: