javascript - 创建类似菜单的结构 (discord.js)
问题描述
我想创建一个机器人可以执行的项目菜单,然后用户可以选择要执行的操作。
例如:当我说+Menu
机器人显示如下内容时:
1. Time in NY
2. Movies currently running
3. Sports News
然后我想接受用户的输入(1,2 或 3),然后根据他们的选择,机器人将执行任务。但我不确定如何在命令 (+Menu) 之后阅读用户的输入并想寻求帮助。
解决方案
您正在寻找一个message collector
. 在此处查看文档
就我个人而言,我会创建一个嵌入其中的选项,例如
const menuEmbed = new Discord.MessageEmbed()
.setTitle("Menu")
.addFields(
{ name: "1.", value: "Time in NY"},
{ name: "2.", value: "Movies currently running"},
{ name: "3.", value: "Sports News"}
);
message.channel.send(menuEmbed).then(() => {
const filter = (user) => {
return user.author.id === message.author.id //only collects messages from the user who sent the command
};
try {
let collected = await message.channel.awaitMessages(filter, { max: 1, time: 15000, errors: ['time'] });
let choice = collected.first().content; //takes user input and saves it
//do execution here
}
catch(e)
{
return message.channel.send(`:x: Setup cancelled - 0 messages were collected in the time limit, please try again`).then(m => m.delete({ timeout: 4000 }));
};
});
然后使用收集器让用户选择一个选项。
请记住,这是使用async/await
并且必须在async
函数中。