Discord.js-命令10秒钟后,如果您不键入任何内容,它将告诉您运行时间

时间:2020-11-01 21:10:49

标签: discord.js

我正在尝试在js中执行bot,当用户执行以下命令时:!mugg @someone // someone是另一个用户提及的内容。 它会说:The Mugger正在接近$ {user},然后在10秒后如果被抢劫的用户不键入!killmugger,他将收到消息The Mugger mugged $ {user},但如果他这样做,他将得到信息:抢劫者没有抢劫$ {user}。 这就是我尝试做的事情:(我尝试过使用if和role)

    bot.on("message", (message) => {
      let args = message.content.substring(PREFIX.length).split(" ");
      bot.user.setActivity("!mugg @someone");

      switch (args[0]) {
        case "mug":
          const user = message.mentions.members.first();
          let Role = message.guild.roles.cache.get("772195872133742634");

          if (user) {
            const member = message.guild.member(user);

            if (member) {
              message.reply(`The Mugger is approaching ${user}`);
              user.roles.add("Role");
            } else {
              message.reply("That user isn't in this server.");
            }
          } else {
            message.reply("You need to mention a user");
          }
          setTimeout(function () {
            if (!message.mentions.roles.has("772195872133742634")) {
              message.channel.send(`The Mugger mugged ${user}`);
              user.roles.remove(Role);
            }
          }, 10000);
          break;

        case "killmugger":
          const user1 = message.mentions.members.first();
          let Role1 = message.guild.roles.cache.get("772195872133742634");

          if (!message.mentions.roles.has("772195872133742634")) {
            message.channel.send(`The Mugger not mugged ${user1}`);
            user1.roles.remove(Role1);
          }
      }
    });

1 个答案:

答案 0 :(得分:0)

欢迎

就像@Saddy提到的那样,您可以使用awaitMessages,通过以下方式,您无需验证用户是否具有所需的角色。

 message.channel.send(`The Mugger mugged ${user}`);

 //filter where m is message and the author needs to be the user you mentioned and the content needs to be equal to killmugger or you can change it to !killmugger
 const filter = m => m.author.id == user!.id && m.content.toLowerCase() == "killmugger"
 //awaitMessage function max: maximum messages, time: in milliseconds and the errors in this case we just need time to make sure that after 
 //10s it will return the message if he doesn't write killmuger in time
 message.channel.awaitMessages(filter, { max: 1, time: 10000, errors: ['time'] }).then(m => {
  return console.log("He got it in time")
   }).catch(() => {
  return message.channel.send(`The Mugger not mugged ${user1}`);
   })