我想了解我正在使用if(message.mentions.users.first())
做的消息中是否有提及,但是现在在所有提及中,我还想过滤掉管理团队的提及,而不是社区成员的提及。如何实现?
我尝试根据这样的角色过滤用户
let r = [];
message.mentions.users.forEach( user => {
console.log('user' + user)
user.roles.forEach(role => {
console.log('role' + role)
r.push(role);
})
console.log('roles' + r);
var member = false;
for (i in r) {
if (i == 'admin') {
member = true;
}
}
})
这似乎不起作用。
答案 0 :(得分:2)
const adminName = ['<role name>'];
const adminId = ['<role ID>'];
client.on('message', (msg) => {
let admins = msg.mentions.members.filter( (user) => {
return adminId.some(id => user.roles.has(id)) || user.roles.some(r => adminName.includes(r.name));
});
console.log(admins.map(d => d.user.username));
});
在那里,我创建了2个数组,一个数组具有角色ID,另一个数组具有角色名称。您可以使用两个,也可以只使用一个(我更喜欢使用id,因为您可以更改角色名称,但是不能更改id,除非您删除角色)。
然后,我遍历消息中提到的members
。为什么使用members
而不是users
?由于GuildMember
是链接到公会的类型,公会是公会中用户的实例,因此它具有用户的角色。
然后,我检查管理员角色的ID之一是否属于用户或,或者角色名称之一是否位于我的adminName
内部。
变量admins
是GuildMember
的集合。
您可以更改some
内部的功能以匹配使某人成为您管理员的任何条件。