【问题标题】:Discord.js: Add role to message senderDiscord.js:向消息发送者添加角色
【发布时间】:2021-08-05 06:07:12
【问题描述】:

我正在尝试制作一个 discord.js 机器人,当用户键入:+rolename 时,它​​会为用户添加一个角色。

这是我想出的:

const { Client } = require("discord.js");
const { config } = require("dotenv");
const fs = require('fs');

const client = new Client({
    partials: ['MESSAGE', 'CHANNEL', 'REACTION']
});

config({
    path: __dirname + "/.env"
});

client.on("ready", () => {
    console.log(`Hi, ${client.user.username} is now online!`);
    client.user.setStatus('online');
    client.user.setActivity('me getting developed', { type: "WATCHING"})
        .then(() => console.log('bot status set'))
        .catch(console.error);
});

client.on("message", (message) => {
    if (message.content.startsWith("+")) {
        var args = message.content.split(' ');
        if (args.length == 1) {
            console.log(`message is created -> ${message}`);
            const { guild } = message;

            var passrole = args[0];
            var roleid = passrole.substring(1);
                
            var role = message.guild.roles.cache.find((role) => {
                return role.name == roleid;
            });
            
            console.log('role found')
            var authoruser = message.author.id;
            if (!role) {
                message.reply('this role does not exist')
                console.log('role does not exist')
                return;          
            }

            console.log(target)
            authoruser.roles.add(role)
                            
            console.log("role added")
        } else {
            message.reply('invalid argument length passed')
            return;
        }
    } else {
        return;
    }
});

client.login(process.env.TOKEN);

运行代码时出现以下错误:

TypeError: 无法读取未定义的属性“添加”

当我使用此代码并键入 +test @DiscordName#0001 时,不会发生这种情况:

const { Client } = require("discord.js");
const { config } = require("dotenv");
const fs = require('fs');

const client = new Client({
    partials: ['MESSAGE', 'CHANNEL', 'REACTION']
});

config({
    path: __dirname + "/.env"
})

client.on("ready", () => {
    console.log(`Hi, ${client.user.username} is now online!`);
    client.user.setStatus('online');
    client.user.setActivity('me getting developed', { type: "WATCHING"})
        .then(presence => console.log('bot status set'))
        .catch(console.error);
});

client.on("message", (message) => {
    let target = message.mentions.members.first();
    if (message.content.startsWith("+")) {
        var args = message.content.split(' ');
        if(args.length == 2){
            console.log(`message is created -> ${message}`);
            const { guild } = message;

            var passrole = args[0]
            var roleid = passrole.substring(1);
                
            var role = message.guild.roles.cache.find((role) => {
                return role.name == roleid;
            })
            
            console.log('role found')
            if (!role) {
                message.reply('role does not exist')
                console.log('role does not exist')
                return;          
            }

            console.log(target)
            target.roles.add(role)
                            
            console.log("role added")
        } else {
            message.reply('invalid argument length passed')
            return;
        }
    } else {
        return;
    }
});

client.login(process.env.TOKEN);

我的问题是:如何将角色添加到消息作者。

提前致谢

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    问题在于您的 authoruser 是用户 ID(= 字符串)而不是成员。您不能向用户添加角色。此外,如果您获得角色的 id 而不是角色的名称,您可以使用角色的 id 添加角色。

    client.on("message", message =>{
        if (message.content.startsWith("+")) {
            var args = message.content.split(' ');
            if (args.length !== 1) {
                message.reply('invalid argument count passed');
                return;
            }
    
            if (!message.member ||!message.guild) {
                message.reply('can only be used in guilds');
                return;
            }
    
            console.log(`message is created -> ${message}`);
            const { guild } = message;
    
            var passrole = args[0];
    
            var roleid = passrole.substring(1);
            
            // If you get the role's id then you won't need this
            var role = message.guild.roles.cache.find((role) => role.name == roleid);
                
            if (!role) {
                message.reply('this role does not exist');
                console.log('role does not exist');
                return;          
            }
    
            console.log('role found');
            console.log(target);
    
            message.member.roles.add(role);
            // If you get the role's id use this:
            message.member.roles.add(roleid);
    
            console.log('role added');
    });
    

    【讨论】:

    • 它再次抛出同样的错误:TypeError: Cannot read property 'add' of undefined
    • 更新了我的答案
    • 又更新了,拿到角色的id就不用先拿到角色了
    猜你喜欢
    • 2021-05-20
    • 2019-12-04
    • 2019-07-26
    • 2021-02-06
    • 1970-01-01
    • 2019-02-15
    • 2020-08-06
    • 2020-12-10
    • 2020-10-08
    相关资源
    最近更新 更多