现在我正在尝试创建一个忽略特定通道中特定命令的Discord bot命令。为了取消忽略用户必须输入命令的频道,他们会收到提示,告诉他们输入"是/否"然后回答是,否,或者如果他们没有输入是/否则告诉他们这样做然后重复。这是我的代码:
if (msg.content === prefix + 'ignore') {
const guildMember = msg.member;
const author = msg.author.id;
if (guildMember.roles.has('309165526427369473')) {
if (ignoredChannels.has(msg.channel.id)) {
msg.reply('Would you like to stop ignoring this channel? (Yes/No)');
client.on('message', msg => {
/* if (author === msg.author.id) {
if (msg.content === 'Yes') {
ignoredChannels.delete(msg.channel.id);
msg.reply('Channel is now not ignored.');
}
else if (msg.content === 'No') {
msg.reply('Channel is still ignored.');
}
else {
msg.reply('You did not type in the correct arguments. Please type "Yes" or "No".');
}
} */
else {}
});
}
else {
ignoredChannels.set(msg.channel.id, msg.channel.name);
msg.reply('Channel is now ignored.');
}
}
else {
msg.reply('You do not have the permissions to do this.');
}
}
在注释代码中,这是每个条件语句的位置。我基本上希望在每个语句中放置});
来结束client.on但当然,这将是不正确的语法。现在我已经尝试在每个条件结束时使用client.removeAllListeners
删除所有侦听器,但这将禁用另一个"消息"我在其他地方放置了接收所有其他命令的代码。我也试过放置removeLisener,但这需要特定的监听器功能和" msg"监听器内置于discord.js。我也不能使用client.once
,因为它在每个条件中都有多个监听器功能。为什么我需要结束client.on是阻止机器人多次响应用户所需的输入(只需要一次),永远不会结束发射器。
答案 0 :(得分:1)
您不应仅为了接收一条确认消息而添加新活动client.on('message')
您应该使用.awaitMessages()
代替。例如:
// Await !vote messages
const filter = m => m.content.startsWith('!vote');
// Errors: ['time'] treats ending because of the time limit as an error
channel.awaitMessages(filter, { max: 4, time: 60000, errors: ['time'] })
.then(collected => console.log(collected.size))
.catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));
从文档中复制
您可以过滤谁是"允许"通过将其添加到过滤器来确认响应。