如何在 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 如何显示具有特定角色的所有成员?

如何向所有具有角色的成员发送消息(discord.js)

如何使用 Discord.js 检查消息作者是不是具有管理员角色?

Discord.js 获取所有具有特定角色的成员

如何在“就绪”时找到所有具有特定角色的成员?不和谐.js

如何设置无法踢出具有更高角色的成员 - Discord.js