通过提及discordjs识别管理员

时间:2019-07-13 16:18:51

标签: discord.js

我想了解我正在使用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;
            }
        }
    })

这似乎不起作用。

1 个答案:

答案 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内部。

变量adminsGuildMember的集合。

您可以更改some内部的功能以匹配使某人成为您管理员的任何条件。