如何在 Discord.Js 中列出所有具有角色的成员
Posted
技术标签:
【中文标题】如何在 Discord.Js 中列出所有具有角色的成员【英文标题】:How do I list all Members with a Role In Discord.Js 【发布时间】:2018-07-31 13:00:35 【问题描述】:如何使用Discord.js
列出角色中的成员。
我的代码:
client.on("message", message =>
var guild = message.guild;
let args = message.content.split(" ").slice(1);
if (!message.content.startsWith(prefix)) return;
if (message.author.bot) return;
if(message.content.startsWith(prefix + 'go4-add'))
guild.member(message.mentions.users.first()).addRole('415665311828803584');
);
我将如何列出嵌入中具有go4
角色的所有成员。当在频道中输入消息 .go4-list
时,我希望机器人通过嵌入进行响应。
【问题讨论】:
1) 您是在询问基本的 Discord.js 示例,还是对使用Embed
有疑问? 2)为什么你所有的代码都被注释掉了? 3) 您正在尝试创建命令.go4-add
? 4) 您正在尝试向消息中提到的第一个用户添加角色?
【参考方案1】:
要在嵌入中提及用户(这看起来比文本好多了)删除.tag
所以它只是
(m => m.user).join('\n')
【讨论】:
【参考方案2】:我尝试了新手的解决方案,但没有奏效
message.guild.roles.get('415665311828803584').members.map(m=>m.user.tag);
给我一个错误,说 .get 不是一个函数,可能是 discord.js 改变了一些东西,
在角色生效后添加缓存。
message.guild.roles.cache.find(r => r.name === args[0]);
【讨论】:
我也有同样的问题。它说@StoneCoding已经回答了这个问题,但我看不到这个问题的任何cmets......我错过了什么? :) @Junosha 你在看我在手机上的评论吗,因为我在那里也看不到,imgur.com/s8ILsYo 将我的评论添加为 img【参考方案3】:从 Discord v12 开始,您现在必须使用 roles.add()
而不是 addRole()
【讨论】:
【参考方案4】:<Role>.members
返回 collection 的 GuildMembers。只需映射此集合即可获得所需的属性。
根据您的情况,这是一个示例:
message.guild.roles.get('415665311828803584').members.map(m=>m.user.tag);
这将从具有“go4”角色的成员中输出一组用户标签。现在你可以.join(...)
这个数组为你想要的格式了。
另外,guild.member(message.mentions.users.first()).addRole('415665311828803584');
可以缩短为:message.mentions.members.first().addRole('415665311828803584');
下面是一个粗略的示例,说明结果如何:
client.on("message", message =>
if(message.content.startsWith(`$prefixgo4-add`))
message.mentions.members.first().addRole('415665311828803584'); // gets the <GuildMember> from a mention and then adds the role to that member
if(message.content == `$prefixgo4-list`)
const ListEmbed = new Discord.RichEmbed()
.setTitle('Users with the go4 role:')
.setDescription(message.guild.roles.get('415665311828803584').members.map(m=>m.user.tag).join('\n'));
message.channel.send(ListEmbed);
);
正如@Wright 在他的回答中提到的那样,如果成员过多,则会引发错误,因为嵌入最多只能容纳 2048 个字符,因此您可能需要在发送嵌入之前进行一些检查,然后处理超大嵌入通过将它们拆分为多个嵌入消息,或者使用基于反应的页面。
【讨论】:
【参考方案5】:if(message.content.startsWith("//inrole"))
let roleName = message.content.split(" ").slice(1).join(" ");
//Filtering the guild members only keeping those with the role
//Then mapping the filtered array to their usernames
let membersWithRole = message.guild.members.filter(member =>
return member.roles.find("name", roleName);
).map(member =>
return member.user.username;
)
let embed = new discord.RichEmbed(
"title": `Users with the $roleName role`,
"description": membersWithRole.join("\n"),
"color": 0xFFFF
);
return message.channel.send(embed);
不和谐的使用示例:
请注意,如果该角色有很多成员,您可能会收到一条错误消息,提示您已超出可以嵌入的字符数。在这种情况下,您可以决定发送多个嵌入拆分用户。
【讨论】:
const discord = require("discord.js"); const embed = new discord.RichEmbed()
你在说什么? @新手以上是关于如何在 Discord.Js 中列出所有具有角色的成员的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js V12 如何显示具有特定角色的所有成员?