discord.js - 从提及 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;
}
}
})
这似乎不起作用。
解决方案
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
以匹配使某人成为您的管理员的任何条件。
推荐阅读
- c# - 包含自引用子项的查询表
- python - Discord.py 如何让我的机器人在没有“播放”的情况下显示活动
- c# - 如何使更改立即出现在用户界面中?
- google-cloud-dataflow - Apache Beam 中的顺序执行 - Java SDK 2.18.0
- coldfusion - Coldfusion 10 CFchart 标签正在合并条形图
- sql - 更新缺失值
- java - 构建失败:org.codehaus.groovy.control.MultipleCompilationErrorsException
- css - 在引导模式中显示按钮和标题
- python - 正则表达式消除除一个之外的所有主题标签
- java - Spring Predicate JpaSpecificationExecutor IN (Select) 表达式