因此,我正在制作一个公共的不和谐机器人,但是我的脚本的一部分遇到了麻烦。我的踢/禁令命令是$ban @user
完成的,必须在ping中完成。由于这是公开的,所以我真的想解决这个问题。我不希望一个人搞砸并使它崩溃以使所有服务器崩溃。如果某人没有进行$ban user
ping操作,则会使漫游器崩溃。这是我的代码:
client.on("message", (message) => {
if (message.content.startsWith("$kick")) {
if (!message.member.roles.find("name", "MODS"))
return;
// Easy way to get member object though mentions.
var member = message.mentions.members.first();
// Kick
member.kick().then((member) => {
// Successmessage
message.channel.send(":wave: " + member.displayName + " has been successfully kicked :point_right: ");
}).catch(() => {
// Failmessage
message.channel.send("Access Denied");
});
}
});
我不希望我的机器人不断崩溃以致破坏他人的使用,任何人都可以帮忙吗?
答案 0 :(得分:1)
我认为您输入$ban user
时会发生什么(没有提及),后来分配var member = message.mentions.members.first();
时它会为您提供null(因为未提及任何人)。尝试确保message.mentions.members
不为空。
干杯:)
答案 1 :(得分:1)
由于您没有抓住此用例,因此您的代码在没有提及的情况下崩溃了。
添加一个简单的捕获(例如带有回报)应该对您有用:
client.on("message", (message) => {
if (message.content.startsWith("$kick")) {
if(!message.member.roles.find("name", "MODS"))
return;
// Easy way to get member object though mentions.
var member= message.mentions.members.first();
// No mentions catch
if (member === undefined) return;
// Kick
member.kick().then((member) => {
// Successmessage
message.channel.send(":wave: " + member.displayName + " has been successfully kicked :point_right: ");
}).catch(() => {
// Failmessage
message.channel.send("Access Denied");
});
}
});