向发送被编辑的消息的机器人发送命令

时间:2021-02-12 00:25:15

标签: javascript message edit

我正在尝试制作一个在收到命令时编辑消息的机器人。我花了 5 个小时试图解决这个问题。这就是我得到的......

client.once("message", async message => {
  const msg = await message.channel.send("why?");
  msg.edit("why     ?");
  msg.edit("why    ?");
  msg.edit("why   ?");
  msg.edit("why  ?");
  msg.edit("why ?");
  msg.edit("why?");
  msg.edit("wh?");
  msg.edit("w?");
  msg.edit("?");
  msg.react("?")
  
  });

我想要它,所以当有人说“为什么”时,看起来山羊在吃“为什么”并且变大了,哈哈。 遗憾的是,我只能让它运行一次命令,而无需重新启动终端或使其成为垃圾命令。

1 个答案:

答案 0 :(得分:0)

您需要使用 client.on 而不是 client.once,顾名思义,它只运行一次。


还有一个 rate limit 说明您可以多久调用一次 api 来调用 discord。

尝试使用以下代码在编辑之间暂停。看起来像这样。

async function sleep(seconds) {
  return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
}

client.on("message", async message => {
  if (message !== "why") return;
  const msg = await message.channel.send("why?");
  await sleep(1);
  msg.edit("why     ?");
  await sleep(1);
  msg.edit("why    ?");
  await sleep(1);
  msg.edit("why   ?");
  await sleep(1);
  msg.edit("why  ?");
  await sleep(1);
  msg.edit("why ?");
  await sleep(1);
  msg.edit("why?");
  await sleep(1);
  msg.edit("wh?");
  await sleep(1);
  msg.edit("w?");
  await sleep(1);
  msg.edit("?");
  await sleep(1);
  msg.react("?");
});

async message => {
  if (message !== "why") return;
  const msg = await message.channel.send("why?");
  ...
}

每次向聊天发送消息时都会执行函数体。重要的是要防止机器人触发自身,导致无限循环。

在这里我添加了一个条件,以便:机器人仅在原始消息(恰好)为 why 时才执行某些操作。

您当然可以做一些更复杂的事情,例如检查发件人、更多消息变体等。