Discord.js 赋予角色的命令

Discord.js command that gives a role

所以我正在尝试创建一个命令,您可以在其中键入 $test,它会为您提供一个 "Test" 角色。这是我当前的代码,但我不断收到错误消息:"Cannot read property 'addRole' of undefined"

const Discord = require("discord.js");
const { send } = require("process");
const { clear } = require("console");
const client = new Discord.Client();
var prefix = "$";

client.login("token");

//TEST COMMAND
client.on("message", message => {

    if (message.content.startsWith(prefix + "test")) {
        message.channel.send("You have been given `Need to be tested` role! You will be tested shortly!")
        client.channels.get("701547440310059059").send(` please test ${message.author}!`)
        const member = message.mentions.members.first();
        let testRole = message.guild.roles.find(role => role.id == "609021049375293460")
        member.addRole(testRole)
        
    }})
    
    
client.on('ready',()=>{
    console.log(`[READY] Logged in as ${client.user.tag}! ID: ${client.user.id}`);
    let statuses = [
        "  status "
    ]
    setInterval(function(){
            let status = statuses[Math.floor(Math.random() * statuses.length)];
            client.user.setActivity(status, {type:"WATCHING"})
    
        }, 3000) //Seconds to Random
});

请告诉我如何轻松地做到这一点。

在discord.jsv12中,GuildMember没有功能.addRole,需要使用GuildMemberRoleManager's.add,从服务器获取角色时还需要添加 .cache ,如下所示:

const member = message.mentions.members.first();
        let testRole = message.guild.roles.cache.find(role => role.id == "609021049375293460")
        member.roles.add(testRole)

好的,您遇到错误 Cannot read property 'addRole' of undefined

这意味着成员变量未定义,这可能是您没有提及成员造成的。

在这一行中,你输入了const member = message.mentions.members.first();,这意味着当你运行这个命令时,你必须提到要添加角色的人。

希望对您有所帮助。

在最新版本的discord.js中你可以试试下面的代码:

       // Where '799617378904178698' is your role id
       message.guild.roles.fetch('799617378904178698')
            .then(role => {
                    console.log(`The role color is: ${role.color}`);
                    console.log(`The role name is: ${role.name}`);
                    let member = message.mentions.members.first();
                    member.roles.add(role).catch(console.error);
                })
            .catch(console.error);

在您尝试添加某些 角色时有效。你应该这样称呼它:

(prefix)commandName @member

找到另一种解决方案,以防您想将任何角色赋予任何用户(机器人除外)

main.js(或 index.js 无论你有什么):

const Discord = require('discord.js');
const client = new Discord.Client(); 
const prefix = '+';
const fs = require("fs");

client.commands = new Discord.Collection()
const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    client.commands.set(command.name, command);
}

client.once('ready', () => {
    console.log('Bot is online');
}); 

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).split(/ +/);
    console.log(args);

    const command = args.shift().toLowerCase();

    if (command == 'giveany') {
        const role = args[1].slice(3, args[1].length - 1);
        client.commands.get('giveany').execute(message, args, role);
    }
});

client.login('token');

giveany.js :

module.exports = {
    name: 'giveany',
    description: 'adds any role to a member',
    execute(message, args, role) {
        console.log(role);
        message.guild.roles.fetch(role)
            .then(r => {
                console.log(`The role color is: ${r.color}`);
                console.log(`The role name is: ${r.name}`);
                let member = message.mentions.members.first();
                if (member != undefined) {
                    console.log('member=' + member);
                    member.roles.add(r).catch(console.error);
                } else {
                    message.channel.send('You cannot give a role to a user that is either bot or undefined');
                }
            }).catch( (error) => {
                console.error(error);
                message.channel.send('Could not find given role: ' + args[1]);
            });
    }
}

呼叫:+giveany @Username @Role