加入后将角色添加到不和谐成员中

时间:2020-09-07 13:05:02

标签: javascript node.js discord.js

当他们加入我的纷争时,给成员一个角色/等级是我的问题,我只有各种各样的代码声明,到目前为止,它们都没有帮助我。我尝试过的一些代码来自Stackoverflow。

我最后的尝试是这样:

client.on('GuildMemberAdd', member => {
    console.log('User: ' + member.user.username + ' has joined the server!');
    var role = member.guild.roles.cache.find(role => role.id === "<My role ID>");
    member.roles.add(role);
});

这是我从discord.js文档和Google那里得到的,当我四处寻找解决问题的方法时。

我不知道问题是否在于它无法读取role.id,而必须是名称。 问题在于,与role.name相比,ID是一个更好的解决方案,以防万一角色上的名称应更改,因为ID绑定到了该角色而不依赖于角色的名称。

我确实希望有人可以帮助我解决这个问题。

最好的问候

2 个答案:

答案 0 :(得分:0)

尝试使用ID直接添加角色:

client.on('GuildMemberAdd', member => {
    console.log('User: ' + member.user.username + ' has joined the server!');
    member.roles.add(ROLE_ID);
});

答案 1 :(得分:0)

尽管您可以具有相同的角色名称,但您在多个行会中不能具有相同的角色ID。

尝试使用ID意味着它已锁定到一个特定的ID。

说,该ID属于您的行会,并且加入的成员没有加入您的服务器,但是其他人的加入,则role将返回undefined,因为该角色ID的角色不存在。 br />

如果仅将其用于服务器,则此方法应该起作用,只需确保检查成员是否已加入your服务器。因此,除了您的服务器外,它将使用名称代替

client.on('GuildMemberAdd', member => {
    if (member.guild.id === "<My guild ID>") {
    // <My guild ID> represents an ID of a guild that has a role with the ID <My role ID>
        console.log('User: ' + member.user.username + ' has joined the server!');
        var role = member.guild.roles.cache.find(role => role.id === "<My role ID>");
        member.roles.add(role);
    } else {
        console.log('User: ' + member.user.username + ' has joined ' + member.guild.name + ' server!');
        var role = member.guild.roles.cache.find(role => role.name === "<Whatever>");
        member.roles.add(role);
    }
});

如果您希望他们能够为每个行会保存不同的ID,那么我建议您学习数据库的工作方式并尝试相应地对其进行工作。