Search code examples
javascriptnode.jsdiscord.js

Cant use any functions [Type error] Discord.js


The error:

TypeError: Cannot read properties of undefined (reading 'add') line 40

I looked everywhere like even in the discord API but nothing. If there is anything I can do better in my code tell me.

If it's necessary I use VSC and node.js.

The member is a variable and used in if() in the code but it doesn't work.

const { Client , GatewayIntentBits} = require('discord.js')
require('dotenv/config')
var not_stable = "⭕"
var working = "🔛"
var done = "✅"
var failed = "❌"


const client = new Client({
    intents:[
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
        GatewayIntentBits.GuildMembers,
    ],
})

client.on("ready", () => {
    console.log("Bot is ready :D");
})

client.on("messageCreate", message => {

    if(message.author == client.user) {
        return;
    }
    
    var member = message.mentions.users.first();
    var channel = message.channel;
    var bug_channel = message.guild.channels.cache.find(r => r.id === "1030971519754588200");
    var sup = message.guild.roles.cache.find(r => r.name == "Suporter")
    var ping_sup = "<@&"+sup.id+"> "

    if (message.content == "op <@"+member.id+">") {
        if (member != undefined) {
            let role = message.guild.roles.cache.find(r => r.id === "1030196677472178298");
            try {
                console.log(member)
                member.roles.add(role); //my problem is at the add its not defined
            } 
            catch(error) {
                bug_channel.send(ping_sup+"Error while: \n"+error);
            }
            message.reply("BETA");
            message.react(not_stable);
        }

        if (member === undefined) {
            message.reply("There is no user in your command");
            message.react(failed);
        }
    }   
    
    if (message.content === "ping") {
        message.reply("PAMINHING pong");
        message.react(done);
    }

    if (message.content === "timeout <@"+member.id+">") {
        if (member === undefined) {
            message.reply("Please do it manually");
            message.react(failed)
        }
        else {
            member.timeout(5 * 60 * 1000, 'Time to take a break');
            message.reply("Timed out for 5min");
            message.react(done);
        }
    }

    if (message.content === "ids") {
        message.reply("This is under construction and doesn't work");
    }
})

client.login(process.env.TOKEN);

The error is always that noting after member. is recognised and I don't find the solution I'm new to js. ya thx for ya help :D


Solution

  • It's because your member variable is not a GuildMember, but a User. You try to get the roles of a User, but only GuildMembers have roles.

    To fix this, you can use message.mentions.members.first() instead as message.mentions.members returns a GuildMember:

    var member = message.mentions.members.first();