javascript - 如何在 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");
});
好的,我的格式有点奇怪
解决方案
您可以使用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
在异步函数中使用。
推荐阅读
- go - 从 VSCode 中启动 GO 应用程序的所有包中的所有测试
- hyperledger-fabric - 在 Hyperledger Fabric v2.1 中,在测试网络存储库示例中 - 通道创建错误
- vb.net - 每当尝试删除记录时,我都会遇到问题
- excel - 双击单元格时VBA设置的单元格部分粗体随机变化
- php - PHP 无法从 XML 标记中获取内部文本
- java - Spring Application 上下文在 ApplicationContextAware 类中为空
- r - openxlsx 中的换行符
- c++ - 在 Linux 上以编程方式获取准确的 CPU 缓存层次结构信息
- elasticsearch - ElasticSearch:是否可以按分数加权进行“加权平均聚合”?
- oracle - 调用 Stored Proc 时参数的数量或类型错误