首页 > 解决方案 > 从提及 discordjs 中识别管理员

问题描述

我想知道我正在使用的消息中是否有提及,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;
            }
        }
    })

这似乎不起作用。

标签: discord.js

解决方案


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以匹配使某人成为您的管理员的任何条件。


推荐阅读