[英]How do I list all Members with a Role In Discord.Js
我如何使用Discord.js
列出角色中的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
,我希望機器人使用嵌入進行響應。
<Role>.members
返回GuildMember的集合。 只需映射此集合即可獲得您想要的屬性。
這是根據您的場景的示例:
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(`${prefix}go4-add`)) {
message.mentions.members.first().addRole('415665311828803584'); // gets the <GuildMember> from a mention and then adds the role to that member
}
if(message.content == `${prefix}go4-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 個字符,因此您可能需要在發送嵌入之前進行一些檢查,然后通過拆分來處理超大嵌入將它們放入多個嵌入消息中,或者使用基於反應的頁面。
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});
}
不和諧使用示例:
但請注意,如果該角色有很多成員,您可能會收到錯誤消息,告訴您已超出可以放入嵌入的字符數。 在這種情況下,您可以決定發送多個嵌入來拆分用戶。
我嘗試了新手的解決方案,但沒有用
message.guild.roles.get('415665311828803584').members.map(m=>m.user.tag);
給了我一個錯誤,即 .get 不是一個函數,可能是 discord.js 改變了一些東西,
在角色使其工作后添加緩存。
message.guild.roles.cache.find(r => r.name === args[0]);
從 Discord v12 開始,您現在必須使用roles.add()
而不是addRole()
要在嵌入中提及用戶(這看起來比僅文本好得多)刪除.tag
所以它只是
(m => m.user).join('\n')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.