Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查提及是否是用户不一致_Javascript_Discord_Discord.js - Fatal编程技术网

Javascript 检查提及是否是用户不一致

Javascript 检查提及是否是用户不一致,javascript,discord,discord.js,Javascript,Discord,Discord.js,我想做一个简单的踢功能,踢一个球员提到。 但是我首先要检查一个提及是否是一个用户。我不知道怎么做 let member = message.mentions.members.first(); if ("member.something") { // if member is a user in the server. member.kick().then((member) => { channel.send(`${member} has been kicked! :wave:`

我想做一个简单的踢功能,踢一个球员提到。 但是我首先要检查一个提及是否是一个用户。我不知道怎么做

let member = message.mentions.members.first();
if ("member.something") { // if member is a user in the server.
  member.kick().then((member) => {
    channel.send(`${member} has been kicked! :wave:`)
  });
} else {
  channel.send(`Error: ${member} can't be kicked!`)
}

以下是我能想到的选项:

检查用户是否不是机器人

检查该成员是否可踢

要首先检查成员是否存在,请签出:

您可以通过多种方式实现这一点。 您可以检查有哪些权限,以禁止其他人踢他们(例如,踢_成员)。看起来是这样的:

let member = message.mentions.members.first();
if (member.hasPermission("KICK_MEMBERS)) return message.channel.send("That member can also kick!")
你还可以检查他们是否扮演了某个不允许被踢的角色。(可以是主持人角色,也可以是受保护的角色)

最后(据我所知),你可以检查他们是否可以踢。但是,如果他们上面的人想踢他们,他们就会踢。 所以,如果,比如说管理员,正在测试或做其他事情,如果kickable=true,它只会踢用户

if (member.kickable) {
member.kick()
} else {
message.channel.send("This member is above you!)"
}
如果您只想检查他们是否是实际用户,请在顶部插入以下行:

if (!member.bot) {
//If they're a user
} else {
//If they're a bot
}
很明显,你可以用这个做很多有趣的事情。但这些是基础。
希望我能帮上一点忙,很抱歉这么晚才回复,我只是浏览了一下论坛,发现了这个未回答的问题。

我尝试了member.kickable,但当我尝试踢一个未知的名字(服务器中不存在的玩家)时,它不会发送我所做的错误消息,它只会给出一个类型错误消息并关闭bot:
如果(member.kickable){^TypeError:无法读取未定义的属性'kickable'
,我刚刚意识到,当我踢现有玩家时,它成功地踢了他们,但踢消息没有发送。它会发送此错误:
(节点:4328)未经处理的PromisejectionWarning:TypeError:无法读取member.kick.then(C:\Users\User\projects\bot\index.js:17:29)中未定义的属性“send”
@Destinations我添加了一个问题的链接,可以帮助您首先确定用户是否存在。第二个问题是变量
channel
未定义,您是否能够成功使用channel.send()?任何非机器人程序的成员。
//Get role by ID (Allows you to later change its name, ID will remain the same)
let modRole = message.guild.roles.get("MODROLE_ID");
if (member.role.has(modRole.id)) return message.channel.send("This member is a moderator")

//Find role by name. Means if you change the name of this, you need to change code too.
let protectedRole = message.guild.roles.find(r => r.name === "Protected from kicking")
if (member.role.has(protectedRole.id)) return message.channel.send("This member is protected")
if (member.kickable) {
member.kick()
} else {
message.channel.send("This member is above you!)"
}
if (!member.bot) {
//If they're a user
} else {
//If they're a bot
}