首页 > 解决方案 > 向机器人发送一个命令,该机器人发送一条被编辑的消息

问题描述

我正在尝试制作一个在给出命令时编辑消息的机器人。我花了 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("")
  
  });

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

标签: javascriptmessageedit

解决方案


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


对 discord 进行 api 调用的频率也有速率限制。

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

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?");
  ...
}

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

在这里,我添加了一个条件:只有当原始消息是 (exactly) 时,机器人才会执行某些操作why

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


推荐阅读