gpt4 book ai didi

javascript - 如何让 Discord 机器人等待我的消息?

转载 作者:行者123 更新时间:2023-12-04 08:26:12 24 4
gpt4 key购买 nike

我正在制作一个简单的不和谐机器人,这是我第一次这样做。我希望 Discord 机器人在继续之前等待我的消息,但我似乎无法让它工作。
如何让 Discord 机器人在继续之前等待?另外,我知道我的“抛出新错误”可能不是非常正确;我不确定还有什么方法可以阻止运行。
任何帮助是极大的赞赏!非常感谢!
代码:

const Discord = require('discord.js');

module.exports = class NewgameCommand extends BaseCommand {
constructor() {
super('newgame', 'managment', []);
}

async run(client, message, args) {
if (!message.member.roles.cache.some((r) => r.name === "staff")) {
return message.channel.send("Only staff members can set up games!");
}
const gameEmbed = new Discord.MessageEmbed()
.setTitle('New MvM Mondays Game!')
.setDescription('Add description here.')
.setColor("#FF0000")
.setTimestamp();
const twoCitiesMissionsDisplayed = "\`\`\`\n1 - 👑Empire Escalation\n2 - 🚇Metro Malice\n3 - 🤬Hamlet Hostility\n4 - 🥊Bavarian Botbash\`\`\`";
const twoCitiesMissionsArray = ['Empire Escalation', 'Metro Malice', 'Hamlet Hostility', 'Bavarian Botbash'];
const numOfMissions = [1, 2, 3, 4];
message.channel.send("What Two Cities mission?");
message.channel.send(twoCitiesMissionsDisplayed);
message.channel.awaitMessages(m => m.author.id == message.author.id,
{max: 1, time: 30000}).then(collected => {
const chosenMission = collected.first().content;
if (!numOfMissions.includes(chosenMission)) {
message.channel.send("You chose an invalid number!");
throw new Error("Chose invalid mission number");
}
}).catch(() => {
message.channel.send('No answer after 30 seconds, operation canceled.');
throw new Error("Took too long to respond.");
});
message.channel.send("Default classes? (yes/no)");
message.channel.awaitMessages(m => m.author.id == message.author.id,
{max: 1, time: 30000}).then(collected => {
const classesAnswer = collected.first().content;
if (!numOfMissions.includes(collected.first().content)) {
message.channel.send("All you had to do was say \"yes\" or \"no\"...");
throw new Error("Didn't say \"yes\" or \"no\"");
}
}).catch(() => {
message.channel.send('No answer after 30 seconds, operation canceled.');
throw new Error("Took too long to respond.");
});
}
}
我在 Discord 中看到的:
What I see in Discord

最佳答案

我们可以使用 awaitMessages promise 的 catch 块检测超时。然后,我们可以让它在超时后发出错误。这是一个例子。

function filter(m){
if(m.author.id != message.author.id) return false;
if (!numOfMissions.includes(chosenMission)) {
m.channel.send('You chose an invalid number!');
return false;
}
return true;
}
message.channel.awaitMessages(filter, { max: 1, time: 30000, errors: ['time'] })
.then(collected => {
const chosenMission = collected.first().content;
message.channel.send(`You chose the ${chosenMission} mission`);
})
.catch(() => {
message.channel.send('No answer after 30 seconds, operation canceled.');
});
如您所见,我在过滤器中包含了有效数字检查。这可以允许即使输入了无效号码,消息收集器也不会结束。
此外,我还包括了 errors: ['time']awaitMessages() 的选项中功能。这告诉函数在时间到时抛出错误(在本例中为 30 秒),错误将导致代码落在 catch 中。块的 promise 。

关于javascript - 如何让 Discord 机器人等待我的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65248799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com