如何在收集器中获取变量的值
How to get value of a variable in a collector
我遇到了一个问题,我确定这与 async/await 有关。所以我试图通过编写这段代码来实现的是,我之前创建了一个带有两个按钮的嵌入,“已批准”和“已拒绝”(这部分代码未包含在上面)。
所以我想要得到的是,如果用户按下批准按钮,approveChoice 变量将设置为“已批准”,否则 - “拒绝”。我做了这个 if (await approvalChoice != "approved") return;
所以如果这个值没有被批准,代码将停止执行。
但即使使用“await”,“approvalChoice”变量也是undefined(最后一行代码)
let senderID = interaction.member.user.id;
const filter = i => (i.customId === `approved_${senderID}` || i.customId === `denied_${senderID}`) && i.user.id === interaction.member.user.id;
const collector = interaction.channel.createMessageComponentCollector({ filter, time: 60000 });
let approvalChoice;
collector.on('collect', async i => {
if (i.customId === `approved_${senderID}`) {
await i.update({ content: 'Operation approved.', components: [] });
approvalChoice = "approved";
collector.stop();
} else if (i.customId === `denied_${senderID}`) {
await i.update({ content: 'Operation cancelled.', components: [] });
approvalChoice = "denied";
collector.stop();
}
});
await collector.on('end', async (collected) => {
if (approvalChoice == "approved") {
await interaction.editReply({content: "_**Processing...**_"});
} else {
await interaction.deleteReply();
}
});
if (await approvalChoice != "approved") return;
因为代码不会停在那里等待收集器结束然后继续执行。
您可以将按下按钮后应该执行的所有内容放在 collector.on('end')
部分,或者使用 awaitMessageComponent
而不是对象形成的收集器。后者包装了普通收集器,您可以等待它以防止您的代码在用户按下按钮之前继续执行。
我遇到了一个问题,我确定这与 async/await 有关。所以我试图通过编写这段代码来实现的是,我之前创建了一个带有两个按钮的嵌入,“已批准”和“已拒绝”(这部分代码未包含在上面)。
所以我想要得到的是,如果用户按下批准按钮,approveChoice 变量将设置为“已批准”,否则 - “拒绝”。我做了这个 if (await approvalChoice != "approved") return;
所以如果这个值没有被批准,代码将停止执行。
但即使使用“await”,“approvalChoice”变量也是undefined(最后一行代码)
let senderID = interaction.member.user.id;
const filter = i => (i.customId === `approved_${senderID}` || i.customId === `denied_${senderID}`) && i.user.id === interaction.member.user.id;
const collector = interaction.channel.createMessageComponentCollector({ filter, time: 60000 });
let approvalChoice;
collector.on('collect', async i => {
if (i.customId === `approved_${senderID}`) {
await i.update({ content: 'Operation approved.', components: [] });
approvalChoice = "approved";
collector.stop();
} else if (i.customId === `denied_${senderID}`) {
await i.update({ content: 'Operation cancelled.', components: [] });
approvalChoice = "denied";
collector.stop();
}
});
await collector.on('end', async (collected) => {
if (approvalChoice == "approved") {
await interaction.editReply({content: "_**Processing...**_"});
} else {
await interaction.deleteReply();
}
});
if (await approvalChoice != "approved") return;
因为代码不会停在那里等待收集器结束然后继续执行。
您可以将按下按钮后应该执行的所有内容放在 collector.on('end')
部分,或者使用 awaitMessageComponent
而不是对象形成的收集器。后者包装了普通收集器,您可以等待它以防止您的代码在用户按下按钮之前继续执行。