我正在尝试在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);
}
}
});
答案 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}`);
})