简体   繁体   English

TypeError:尝试制作discord bot时无法读取undefined的属性'id'

[英]TypeError: Cannot read property 'id' of undefined when trying to make discord bot

I'm trying to make a simple discord bot, however whenever I run the -setcaps command I get TypeError: Cannot read property 'id' of undefined. 我正在尝试制作一个简单的discord bot,但每当我运行-setcaps命令时,我得到TypeError:无法读取未定义的属性'id'。 I'm not exactly sure what is causing this. 我不确定是什么原因造成的。 I would appreciate whatever help you can provide. 我很感激您提供的任何帮助。 Not exactly sure what to add to this to provide more details, I'm using the latest stable version of node.js and editing with notpad++ 不完全确定要添加到这里以提供更多细节,我使用最新的稳定版本的node.js并使用notpad ++进行编辑 错误 `// Call Packages const Discord = require('discord.js'); `//调用包const discord = require('discord.js'); const economy = require('discord-eco'); const economy = require('discord-eco');

// Define client for Discord
const client = new Discord.Client();
// We have to define a moderator role, the name of a role you need to run certain commands
const modRole = 'Sentinel';

// This will run when a message is recieved...
client.on('message', message => {

    // Variables
    let prefix = '-';
    let msg = message.content.toUpperCase();
    // Lets also add some new variables
    let cont = message.content.slice(prefix.length).split(" "); // This slices off the prefix, then stores everything after that in an array split by spaces.
    let args = cont.slice(1); // This removes the command part of the message, only leaving the words after it seperated by spaces

    // Commands

    // Ping - Let's create a quick command to make sure everything is working!
    if (message.content.toUpperCase() === `${prefix}PING`) {
        message.channel.send('Pong!');
    }

    // Add / Remove Money For Admins
    if (msg.startsWith(`${prefix}SETCAPS`)) {

        // Check if they have the modRole
        if (!message.member.roles.find("name", modRole)) { // Run if they dont have role...
            message.channel.send('**You need the role `' + modRole + '` to use this command...**');
            return;
        }

        // Check if they defined an amount
        if (!args[0]) {
            message.channel.send(`**You need to define an amount. Usage: ${prefix}SETCAPS <amount> <user>**`);
            return;
        }

        // We should also make sure that args[0] is a number
        if (isNaN(args[0])) {
            message.channel.send(`**The amount has to be a number. Usage: ${prefix}SETCAPS <amount> <user>**`);
            return; // Remember to return if you are sending an error message! So the rest of the code doesn't run.
        }

        // Check if they defined a user
        let defineduser = '';
        if (!args[1]) { // If they didn't define anyone, set it to their own.
            defineduser = message.author.id;
        } else { // Run this if they did define someone...
            let firstMentioned = message.mentions.users.first();
            defineduser = firstMentioned.id;
        }

        // Finally, run this.. REMEMBER IF you are doing the guild-unique method, make sure you add the guild ID to the end,
        economy.updateBalance(defineduser + message.guild.id, parseInt(args[0])).then((i) => { // AND MAKE SURE YOU ALWAYS PARSE THE NUMBER YOU ARE ADDING AS AN INTEGER
            message.channel.send(`**User defined had ${args[0]} added/subtraction from their account.**`)
        });

    }

    // Balance & Money
    if (msg === `${prefix}BALANCE` || msg === `${prefix}MONEY`) { // This will run if the message is either ~BALANCE or ~MONEY

        // Additional Tip: If you want to make the values guild-unique, simply add + message.guild.id whenever you request.
        economy.fetchBalance(message.author.id + message.guild.id).then((i) => { // economy.fetchBalance grabs the userID, finds it, and puts the data with it into i.
            // Lets use an embed for This
            const embed = new Discord.RichEmbed()
                .setDescription(`**${message.guild.name} Stash**`)
                .setColor(0xff9900) // You can set any HEX color if you put 0x before it.
                .addField('Stash Owner',message.author.username,true) // The TRUE makes the embed inline. Account Holder is the title, and message.author is the value
                .addField('Stash Contents',i.money,true)


            // Now we need to send the message
            message.channel.send({embed})

        })

    }

});

client.login('TOKEN HIDDEN')`

I'm not sure if this was causing your error but let's give it a try. 我不确定这是否会导致您的错误,但让我们试一试。 I edited the check if the user mentioned someone. 我编辑了支票,如果用户提到某人。

// Call Packages
const Discord = require('discord.js');
const economy = require('discord-eco');

// Define client for Discord
const client = new Discord.Client();
// We have to define a moderator role, the name of a role you need to run certain commands
const modRole = 'Sentinel';

// This will run when a message is recieved...
client.on('message', message => {

    // Variables
    let prefix = '-';
    let msg = message.content.toUpperCase();
    // Lets also add some new variables
    let cont = message.content.slice(prefix.length).split(" "); // This slices off the prefix, then stores everything after that in an array split by spaces.
    let args = cont.slice(1); // This removes the command part of the message, only leaving the words after it seperated by spaces

    // Commands

    // Ping - Let's create a quick command to make sure everything is working!
    if (message.content.toUpperCase() === `${prefix}PING`) {
        message.channel.send('Pong!');
    }

    // Add / Remove Money For Admins
    if (msg.startsWith(`${prefix}SETCAPS`)) {

        // Check if they have the modRole
        if (!message.member.roles.find("name", modRole)) { // Run if they dont have role...
            message.channel.send('**You need the role `' + modRole.name + '` to use this command...**');
            return;
        }

        // Check if they defined an amount
        if (!args[0]) {
            message.channel.send(`**You need to define an amount. Usage: ${prefix}SETCAPS <amount> <user>**`);
            return;
        }

        // We should also make sure that args[0] is a number
        if (isNaN(args[0])) {
            message.channel.send(`**The amount has to be a number. Usage: ${prefix}SETCAPS <amount> <user>**`);
            return; // Remember to return if you are sending an error message! So the rest of the code doesn't run.
        }

        // Check if they defined a user
        let defineduser = '';
        let user = message.mentions.users.first() || msg.author;
        defineduser = user.id

        // Finally, run this.. REMEMBER IF you are doing the guild-unique method, make sure you add the guild ID to the end,
        economy.updateBalance(defineduser + message.guild.id, parseInt(args[0])).then((i) => { // AND MAKE SURE YOU ALWAYS PARSE THE NUMBER YOU ARE ADDING AS AN INTEGER
            message.channel.send(`**User defined had ${args[0]} added/subtraction from their account.**`)
        });

    }

    // Balance & Money
    if (msg === `${prefix}BALANCE` || msg === `${prefix}MONEY`) { // This will run if the message is either ~BALANCE or ~MONEY

        // Additional Tip: If you want to make the values guild-unique, simply add + message.guild.id whenever you request.
        economy.fetchBalance(message.author.id + message.guild.id).then((i) => { // economy.fetchBalance grabs the userID, finds it, and puts the data with it into i.
            // Lets use an embed for This
            const embed = new Discord.RichEmbed()
                .setDescription(`**${message.guild.name} Stash**`)
                .setColor(0xff9900) // You can set any HEX color if you put 0x before it.
                .addField('Stash Owner', message.author.username, true) // The TRUE makes the embed inline. Account Holder is the title, and message.author is the value
                .addField('Stash Contents', i.money, true)


            // Now we need to send the message
            message.channel.send({
                embed
            })

        })

    }

});

client.login('TOKEN HIDDEN')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Discord 机器人类型错误:无法读取未定义的属性“id” - Discord Bot TypeError: Cannot read property 'id' of undefined 我正在尝试为我的 discord 机器人发出轮询命令,但它一直给我错误:“TypeError: Cannot read property 'push' of undefined” - I'm trying to make a poll command for my discord bot, but it keeps giving me the error: “TypeError: Cannot read property 'push' of undefined” 类型错误:每当我在不和谐的情况下向我的机器人输入 PM 时,都无法读取未定义的属性“id” - TypeError: Cannot read property 'id' of undefined whenever i type a PM to my bot on discord JavaScript TypeError:无法读取未定义的属性&#39;startsWith&#39;-Discord Bot - JavaScript TypeError: Cannot read property 'startsWith' of undefined - discord bot TypeError:无法读取未定义 discord 机器人的属性“发送” - TypeError: Cannot read property 'send' of undefined discord bot discord 机器人错误类型错误:无法读取未定义的属性“名称” - discord bot error TypeError: Cannot read property 'name' of undefined handlePromiseRejectionWarning:TypeError:无法读取未定义的属性“添加”(Discord Bot) - handledPromiseRejectionWarning: TypeError: Cannot read property 'add' of undefined (Discord Bot) TypeError:无法读取未定义的属性“获取” - Discord 机器人 - TypeError: Cannot read property 'get' of undefined - Discord bot 写入 discord bot 时出现“类型错误:无法读取未定义的属性‘发送’” - "TypeError: Cannot read property 'send' of undefined" while writing discord bot TypeError:制作我的不和谐机器人时无法读取未定义的属性“forEach” - TypeError: Cannot read property 'forEach' of undefined when making my discord bot
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM