R. *_*lie 7 javascript roles node.js discord.js
我为服务器制作了一个简单的引用机器人,但管理员只希望mod +人能够添加引号以避免垃圾邮件.我去了文档并做了一切,但我不能让它工作.这就是我所拥有的:
//other code
else if (command === "addquote" && arg) {
let adminRole = message.guild.roles.find("name", "Admin");
let modRole = message.guild.roles.find("name", "Mod");
if(message.member.roles.has(adminRole) || message.member.roles.has(modRole)){
const hasArr = arr.some((el) => {
return el.toLowerCase().replace(/\s/g, '') === arg.toLowerCase().replace(/\s/g, '');
});
if(hasArr){
message.channel.send(arg.replace(/\s+/g,' ').trim() + " is already a Quote");
} else {
fs.appendFileSync('./Quotes.txt', '\r\n' + arg);
message.channel.send("Quote added: " + arg);
arr.push(arg);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这非常挑剔.有时,如果用户具有mod角色,它将起作用,大多数时候它不会.如果我做
console.log(message.memeber.roles.has(adminRole));
console.log(message.memeber.roles.has(modRole));
Run Code Online (Sandbox Code Playgroud)
两者都输出为假,但会起作用吗?老实说,我现在还不知道.
R. *_*lie 21
discord.js api 已更新,并且有更好的方法,因为.exists()已被弃用。
if (message.member.roles.cache.some(role => role.name === 'Whatever')) {}
这比.find()因为.find()返回角色对象(或未定义),然后将其转换为布尔值要好。该.some()方法默认返回一个布尔值。
Wri*_*ght 15
message.member.roles是一个集合.而不是获取角色对象,然后寻找它,只需直接在集合中查找角色.试试这个:
else if (command === "addquote" && arg) {
if(message.member.roles.find(r => r.name === "Admin") || message.member.roles.find(r => rname === "Mod")){
//Rest of your code
}
Run Code Online (Sandbox Code Playgroud)
注意,角色名称必须是您在查找中添加的名称,包括角色名称中的任何表情符号.
小智 13
这对我的 12.2.0 版有用
if(message.member.roles.cache.find(r => r.name === "Admin")) {
// Your code
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用r.id来检查角色 ID
小智 5
Discord.js 版本:v12(稳定)。
如果您有role ID,您可以.roles使用 来检查 GuildMember 对象上的集合是否包含它.has()。如果您不知道 ID 并且想要检查诸如“Mod”角色之类的内容,您可以使用.some().
member.roles.cache.has('role-id-here');
// returns true if the member has the role
member.roles.cache.some(role => role.name === 'Admin');
// returns true if any of the member's roles is exactly named "Admin"
Run Code Online (Sandbox Code Playgroud)
示例如果;
const roleById = member.roles.cache.has('123456...');
//or if you want in message
const rolebyIdMessage = message.member.roles.cache.has('12346....');
if(member.roles.cache.has(roleById) return message.reply("Member With Role!");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33365 次 |
| 最近记录: |