簡體   English   中英

如何列出在 Discord.Js 中具有角色的所有成員

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM