首页 > 解决方案 > 如何在 discord.js 中创建一个等待消息的循环

问题描述

顺便说一句,我正在尝试制作游戏。

我有一张大地图和一张小地图。

一张小地图专注于 100x100 地图的 5x5 打印,当您发送“was d”之一时,它会根据密钥执行必要的操作。

我的代码是这样的:

message.channel
  .awaitMessages((msg) => msg.author.id == message.author.id, {
    max: 1,
    time: 30000,
  })
  .then((collected) => {
    if (collected.first().content.toLowerCase() == "w") {
      simdiX--;
    } else if (collected.first().content.toLowerCase() == "s") {
      simdiX++;
    } else if (collected.first().content.toLowerCase() == "d") {
      simdiY++;
    } else if (collected.first().content.toLowerCase() == "a") {
      simdiY--;
    } else if (collected.first().content.toLowerCase() == "cancel") {
      message.channel.bulkDelete(2);
      return message.channel.send("Canceled:ok_hand:");
    } else {
      async function del() {
        let ms = await message.channel.send("That's not an option");
        wait(5000);
        ms.delete();
      }
      del();
    }

    tasi(simdiX, simdiY, 5, 5);
    message.channel.bulkDelete(2);
    myPrint(5, 5);
  })
  .catch(() => {
    message.reply("U lost ur chance");
  });

好的,我的格式有点奇怪

标签: javascriptnode.jsloopsdiscorddiscord.js

解决方案


您可以使用TextBasedChannel#createMessageCollector创建一个MessageCollector,它是一个异步迭代。您可以使用for await...of此收集器:

const collector = message.channel.createMessageCollector(
  msg => msg.author.id == message.author.id,
  {time: 30000}
);
for await (const msg of collector) {
  if (msg.content.toLowerCase() == "w") {
    simdiX--;
  }
  // etc...
}
// This will be sent when the collector ends (when time runs out or if you
// manually stop it with collector.stop())
message.reply("U lost ur chance");

请注意,您只能for await...of异步函数中使用。


推荐阅读