【问题标题】:identifying admins from mentions discordjs从提及 discordjs 中识别管理员
【发布时间】:2019-07-15 17:39:16
【问题描述】:

我想知道我正在使用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


【解决方案1】:
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是关联到公会的类型,是公会中用户的实例,所以具有用户的角色。

然后我检查我的管理员角色之一是否属于用户的角色是否其中一个角色名称在我的adminName 中。

变量adminsGuildMember 的集合。

您可以更改 some 中的函数以匹配任何条件,使某人成为您的管理员。

【讨论】:

  • 这很好用。但是,我的要求发生了变化,为此,我使用的解决方案是创建了一个成员 ID 的 json 对象并将其映射到我想为每个管理员成员获取的数据。不过,我会接受这个答案,因为这提供了必要的解决方案和深刻的见解。
猜你喜欢
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
相关资源
最近更新 更多