禁止/踢命令使用时崩溃

时间:2019-03-01 14:28:17

标签: javascript discord discord.js

因此,我正在制作一个公共的不和谐机器人,但是我的脚本的一部分遇到了麻烦。我的踢/禁令命令是$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");
    });
  }
});

我不希望我的机器人不断崩溃以致破坏他人的使用,任何人都可以帮忙吗?

2 个答案:

答案 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");
        });
    }
});