【发布时间】:2023-03-10 07:48:02
【问题描述】:
在过去的 2 天里,我一直在尝试让 unban 命令工作,但我还没有找到一个简单的解决方案,我不断收到诸如“.find()”不是函数之类的错误,或者无法定义“id”。而且我只是没有得到我需要做的事情。 PS:在代码方面我是个菜鸟。 还值得一提的是,我已经经历了这段代码的许多变体,并且到此结束,可能以前的代码迭代更接近实际的解决方案。
const Discord = require('discord.js');
const client = new Discord.Client();
const prefix = "+";
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('message', msg => {
const { content } = msg;
if (!content.startsWith(prefix)) return;
const args = content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
switch(command) {
case "ping" : {
let latency = Date.now() - msg.createdTimestamp;
let latencyOfAPI = Math.round(client.ws.ping);
msg.reply("This is the latency between the message and the response: " + latency + "." + "\nThis is the API latency: " + latencyOfAPI + ".");
break;
}
case "pong" : {
msg.reply("ping");
break
}
case "ban" : {
const user = msg.mentions.members.first();
if (user) {
msg.guild.members.ban(user);
msg.reply("The user " + user + " has been banned.")
} else {
return msg.reply("There is no one to ban.").catch(console.error);
}
break
}
case "unban" : {
const user = client.users.cache.find(user => user.username == "").id;
let banList = msg.guild.fetchBans();
if(banList = 0) {
return msg.reply("This user isn't in the community, or he is not banned.");
} else {
banList.find(user)
msg.guild.members.unban(user);
msg.reply("User " + user + " has been unbanned.")
}
break
}
}
});
client.login('.....');
【问题讨论】:
-
用户可能不一定在客户端用户缓存中。此外,使用 == 进行值比较,使用 === 进行值和类型比较。 = 用于分配变量。
-
另外,fetchBans() 返回一个承诺。你应该
await承诺在做任何事情之前得到解决。 -
确实,=== 在很多情况下更好。
-
话虽如此,在这种特殊情况下,等待 fetchBans 会给出一个集合。使用 banList.size 检查该公会中的禁令数量。 banList 保证不等于 0,因为它们的类型不同。
-
我现在只收到“SyntaxError:await 仅在异步函数和模块的顶层主体中有效”,我很困惑,如果我听起来好像我什么都不知道,对不起。
标签: javascript node.js visual-studio-code discord discord.js