javascript - 一条等待消息后发送多条等待消息
问题描述
我在请求你的帮助。我正在尝试发送一条等待回复的消息,然后当用户在时间限制内回答时,它会发送另一条类似这样的消息。我不知道你是否理解我。如果您需要更多信息,请不要回答。
真挚地。
我当前的代码:
const filter = m => m.author.id === message.author.id && m.author.id !== bot.user.id
// CHOISIR LE NOM
message.reply("S'il vous plaît choisissez un nom pour le tournoi.").then(r => r.delete(10000));
message.channel.awaitMessages(filter, {
max: 1,
time: 10000
}).then(collected => {
if(collected.first().content === "stop" || collected.first().content === "cancel"){
return message.reply("Création du tournoi annulé.")
}
let tournamentname = collected.first().content;
db.collection("tournois").findOneAndUpdate({"tournamentInformations.status": "active"}, {
$set: {
"tournamentInformations.tournamentName": tournamentname
}}, {upsert: true}, function(err,doc) { if (err) { throw err; } });
message.channel.send(":white_check_mark: | Vous avez défini le nom du tournoi à "+tournamentname);
}).catch(err => {
console.log(err)
})
// CHOISIR L'ORGANISATEUR
message.reply("S'il vous plaît choisissez le nom de l'organisateur.").then(r => r.delete(10000));
message.channel.awaitMessages(filter, {
max: 1,
time: 10000
}).then(collected => {
if(collected.first().content === "stop" || collected.first().content === "cancel"){
return message.reply("Création du tournoi annulé.")
}
let organisateur = collected.first().content;
db.collection("tournois").findOneAndUpdate({"tournamentInformations.status": "active"}, {
$set: {
"tournamentInformations.organizedBy": organisateur
}}, {upsert: true}, function(err,doc) { if (err) { throw err; } });
message.channel.send(":white_check_mark: | Vous avez défini l'organisateur à "+organisateur);
}).catch(err => {
console.log(err)
})
解决方案
您似乎需要.awaitMessages
和.then
排序 - 我强烈建议您在发布至少 30 分钟之前用谷歌搜索您的问题,并事先积极搜索官方 Discord.js 文档。
我可以提供一个简单的例子:
message.channel.send('First question').then(async (first) => {
message.channel.awaitMessages(filter, { maxMatches: 1, time: 60000, errors: ['time']}).then(async (collected) => {
await first.delete()
await collected.first().delete()
}).then(async () => {
message.channel.send('Question 2').then(async (second) => {
message.channel.awaitMessages(filter, { maxMatches: 1, time: 60000, errors: ['time']}).then(async (collected) => {
await second.delete()
await collected.first().delete()
}).catch(collected => {
message.channel.send('Your answer timed out')
})
}).catch(collected => {
message.channel.send('Your answer timed out')
})
它的作用(草率地,当我复制并粘贴此片段并从我自己的代码中对其进行编辑时,它可能缺少标记)是发送第一条消息'First question'
并允许 60 秒的响应时间范围。如果有答案,它会删除问题提示以及答案(您可以根据需要存储答案),然后继续对第二个问题执行相同的操作,依此类推。如果 60 秒的时间范围到期,它将结束序列并告诉用户他们的时间已用完。
希望这会有所帮助,如果有帮助,请将其标记为正确。
(PS如果你熟悉函数,所有这些都可以推到一个紧凑和简化你的代码,我只是为你提供了这样的例子,以免混淆你)
推荐阅读
- azure-devops - 在 Azure Devops 的另一个 Readme.md 中包含 markdown 文件
- arithmetic-expressions - 如何使用java从方程中找到缺失值?
- c# - ListView 中的数据绑定:并非所有列都得到更新
- go - 如何获取 s3 分段上传失败的部分列表
- css - Ant.Design 标签对齐
- arrays - 我可以使用 for-in 循环更新全局数组,并在循环外使用更新后的数组吗?(迅速)
- php - 在 prestashop 模块中加载供应商包类。(Prestashop 1.6)
- node.js - 读取大型 JSON 文件的最佳方式
- xml - strip - 使用 xml /xsd 文件解决 dtd 错误 SSIS
- hyperledger-fabric - 为 1.4.2 版本安装示例、二进制文件和 Docker 映像失败 - 使用 baseos 和 javaenc 结构映像(bootstrap.sh 脚本中的错误?)