node.js - discord.js 的新手,机器人在加入我的服务器时读取错误的文本来验证特定用户
问题描述
所以我试着做一个小机器人来验证特定的用户组访问保留的频道。机器人应该询问密码,当答案与问题相符时,机器人会回复自己并显示错误消息。我该如何修复此代码?
我试过使用
if(message.author.bot){return;}
但由于某种原因它不起作用
这是我的代码:
client.on('guildMemberAdd', member => {
const channel = member.guild.channels.find(ch => ch.name === 'vaayil');
channel.send("type in the secret code");
client.on('message', message =>{
if(message.author.bot){return;}
if(message.content === `secret`){
channel.send("verified");
}
if(message.content !== `secret`){
channel.send("not verified");
}
});
});
解决方案
像这样嵌套事件通常是不好的做法。
但是,您可以避免这样做,并让您在编写这个机器人时更轻松。在 Discord.js 中,您可以使用TextChannel.awaitMessages()
等待通过特定过滤器的消息,然后对这些消息执行某些操作。
例子:
const secretCode = 'sloths';
client.on('guildMemberAdd', async member => {
const channel = member.guild.channels.find(c => c.name === 'vaayil');
if (!channel) return console.log('Can\'t find channel.');
try {
await channel.send(`What\'s the secret code, ${member}?`);
const filter = m => m.author.id === member.id;
const messages = await channel.awaitMessages(filter, { max: 1 });
const message = messages.first(); // (The only message in the Collection)
if (message.content === secretCode) {
await channel.send('That\'s right!');
// Do something...
} else {
await channel.send('Nice try, but wrong.');
// Do something...
} catch(err) {
console.error(err);
}
});
推荐阅读
- javascript - 带有 let 的 for 循环如何详细工作?
- python - 将多个文本文件转换为 csv 以创建标记数据集
- r - 具有 map2_df 的 2 个数据集之间的差异在函数中没有给出所需的结果,但在单独运行时可以正常工作
- php - Microsoft Graph API:将请求文件内容放入二进制流,上传到 SharePoint 文件夹
- php - Laravel 变形过滤器
- informix - Informix 12.10 查找当前运行查询的完成百分比
- python - 在python中从excel中查找连续值的开始索引和最后一行索引
- python - 二叉搜索树中的最小元素
- html - 在 ejs-calendar 中禁用日期选择器
- python - 如何使用 pyautogui 在当前工作目录中保存文件?