如何向用户添加角色,而无需他先发送任何消息?

时间:2021-06-18 15:39:29

标签: javascript node.js discord.js

我已经搜索了答案,但只找到了如何将服务器角色分配给发送消息或调用命令的人。

如何在服务器上找到特定用户并为其分配角色,而无需他们发送任何消息或做任何事情?

我尝试了一些无效的方法:

// the server bot is in
const server = client.guilds.cache.get("my server id here");

// trying to find specific user on the server
let myusr = server.members.cache.get("id", "user id here"); 

任何建议/解决方案?

编辑:这是我到目前为止的代码:

const { Client } = require('discord.js');
const client = new Client();

client.on('ready', () => {
    console.log(client.user.tag);
    
    // grabbing the server
    const guild = client.guilds.cache.get("my server's id");

    // calling a function and passing my server to it
    setUsrRole(guild);
});

function setUsrRole(server) {

  // grabbing my user
  let myusr = server.members.fetch("My user id");
  
  // finding my role by name
  let myRole = server.roles.cache.find(myRole => myRole.name === "role name");
  
  // trying to add the role to my user
  myusr.roles.add(myRole);

  // I also tried myusr.addRole(myRole);
};

// Bot login
client.login('my bot token');

1 个答案:

答案 0 :(得分:0)

有多种方法,但我将向您展示两种方法。

client.on('guildMemberAdd', member => {
member.roles.add('someRole');
})

这种方式是,如果您想添加成员加入,但您需要确保在您的不和谐开发者门户中,当您邀请您的机器人时,“机器人”部分中的“服务器成员意图”框被选中。另一种可能基于不同事件的方法在这里:

await client.guilds.fetch(); //cache guilds
const guild = client.guilds.cache.get('someGuild');
await guild.members.fetch(); //should cache users automatically
const member = guild.members.cache.get('someMember');
member.roles.add('someRole');
//MAKE SURE ITS ASYNC

如果这些都不起作用,请发表评论,并告诉我你得到了什么错误。