简体   繁体   中英

Discord.js ReferenceError: msg is not defined

Simply put: I made a discord bot in javascript, checked it with JSHint and then ran it on node.js. The problem: everytime i ran the bot, i got the "msg is not defined" error

I found already answered questions ( Question 1 , Question 2 ) but i looked at the solutions listed in the comments of them and it was already like how the commenters said it should be.

Note: the node.js server is on an android phone, and i already installed discord.js on it.

Source code of my bot:

const Discord = require('discord.js');
const client = new Discord.Client();
var delayed = [];
var funcs = {
    clean: function(text) {
        var temp = "";
        text = text + "";
        for (var i = 0; i < text.length; i++) {
            if (text.charAt(i) != "_" && text.charAt(i) != "*" && text.charAt(i) != "`" && text.charAt(i) != " ") {
                temp = temp + text.charAt(i);
            }
        }
        return temp.toLowerCase();
    },
    log: function(logthat, cmddude) {
        console.log(Date().slice(4, 24) + " | " + logthat + " | " + cmddude + "\n");
    },
    cook: function(cookthishex) {
        cookthishex = cookthishex + '';
        var returning = '';
        for (var i = 0; i < cookthishex.length; i += 2) {
            returning += String.fromCharCode(parseInt(cookthishex.substr(i, 2), 16));
        }
        return returning;
    },
    random: function(low, high) {
        return Math.round(Math.random() * (high - low)) + low
    },
    delay: function(userid) {
        delayed.push(userid);
        setTimeout(function(Argument) {
            var temp = delayed[delayed.indexOf(Argument)];
            delayed[delayed.indexOf(Argument)] = delayed[delayed.length];
            delayed[delayed.length] = temp;
            delayed.pop();
        }, 1000, userid);
    },
    split(argtext) {
        var splitlist = [], splittext = "";
        for (var i = 0; i < argtext.length; i++) {
            if (argtext.charAt(i) === " ") {
                splitlist.push(splittext);
                splittext = "";
            } else {
                splittext = splittext + argtext.charAt(i);
            }
        }
        if (splittext.charAt(splittext.length - 1) === " ") {
            splitlist.push(splittext);
        }
        return splitlist;
    }
};
client.on('ready', () => {
    console.log("Logged in as ${client.user.tag}!");
    funcs.log("activated");
    var reacttocomment = true;
    if (client.guilds.get(msg.guild.id).roles.find(x => x.name == "No Bruh") == null) {
        client.guilds.get(msg.guild.id).createRole({
            name: "No Bruh",
            color: "0xf0f0f0",
            mentionable: false
        }, "Required role to make the 'bruh!doreact' and 'bruh!noreact' commands work.");
    }
});
client.on('message', msg => {
    if (delayed && msg.author.id !== "492665478687490048") return;
    if (msg.author.bot) return;
    if (msg.author.id === "489572485126422529") return;
    var msgcont = msg.content.slice(13);
    if (reacttocomment === true) {
        if (funcs.clean(msg.content) === 'bruh' && msg.member.roles.some(r => r.name === "No Bruh") === true) {
            delayed.push(msg.author.id);
            funcs.log("bruh", msg.author.id);
            msg.channel.reply('bruh');
            delay(msg.author.id);
        }
        if (msg.content.slice(0,10) === 'bruh!invite') {
            delayed.push(msg.author.id);
            funcs.log("invite", msg.author.id);
            msg.channel.reply('(invite doesnt exist right now, this bot is currently being tested.)');
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 8) === 'bruh!help') {
            delayed.push(msg.author.id);
            funcs.log("help", msg.author.id);
            msg.channel.reply('`I am "Bruh Bot" [Prefix: bruh!]`\n' +
                '`My mission is to reply with "bruh" when someone writes "bruh".`\n' +
                '```command list:\n' +
                'help: This.\n' +
                'invite: Gives bot invite link.\n' +
                'noreact: The bot wont react to you with "bruh" if you say it.```\n' +
                'random: Get a random number from A to B.```\n' +
                'avatar: Display the URL of your avatar.```\n' +
                'doreact: The bot will react to you with "bruh" if you say it.```\n' +
                'rate: Rates the action/attribute/object you give it.```\n' +
                'ping: Get bot "latency".```\n' +
                '**`Have a good day (or night)!`**');
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 11) === 'bruh!noreact') {
            delayed.push(msg.author.id);
            funcs.log("noreact", msg.author.id);
            msg.member.addRole('No Bruh');
            msg.channel.reply("Won't react to**" + msg.author.tag + '** if he says "bruh".');
            if (member.guild.me.hasPermission("MANAGE_ROLES")) {} else {
                msg.channel.reply("If I had the 'Manage Roles' permission. :(");
            }
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 11) === 'bruh!doreact') {
            delayed.push(msg.author.id);
            funcs.log("doreact", msg.author.id);
            msg.member.removeRole("No Bruh");
            msg.channel.reply("Will react to**" + msg.author.tag + '** if he says "bruh".');
            if (member.guild.me.hasPermission("MANAGE_ROLES")) {} else {
                msg.channel.reply("If I had the 'Manage Roles' permission. :(");
            }
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 11) === 'bruh!random') {
            delayed.push(msg.author.id);
            funcs.log("random "+ msgcont, msg.author.id);
            for (var i = 0; i < msgcont.length; i++) {
                if (msgcont.charAt(i) === " ") {
                    var splitpoint = i;
                    break
                }
            }           
            if (splitpoint < 2 || splitpoint > msgcont.length - 2) {
                msg.channel.reply("There is an error in your parameters, please try again.");
            } else {
                msg.channel.reply(funcs.random(msg.content.slice(13, splitpoint - 1), msg.content.slice(splitpoint + 1, msgcont.length)));
            }
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 9) === 'bruh!rate') {
            delayed.push(msg.author.id);
            funcs.log("rate " + msg.content.slice(11), msg.author.id);
            var ratethis = "";
            if (msg.content.length < 11) {
                ratethis = "absolutely nothing";
            } else {
                ratethis = '**"' + msg.content.slice(11) + '"**';
            }
            msg.channel.reply('I give ' + ratethis + ' a ' + funcs.random(0, 10) + "/10.");
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 11) === 'bruh!avatar') {
            delayed.push(msg.author.id);
            funcs.log("avatar", msg.author.id)
            msg.channel.reply("Here is your avatar URL:");
            msg.channel.reply(msg.author.avatarURL);
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 9) === 'bruh!ping') {
            delayed.push(msg.author.id);
            msg.channel.reply("Pong! " + new Date().getTime() - msg.createdTimestamp + "ms");
            delay(msg.author.id);
        }
        if (msg.content.slice(0, 8) === 'bruh!rps') {
            delayed.push(msg.author.id);
            var user = funcs.clean(msg.content.slice(9));
            var optiontable = [["Scissors!/nScissors tie with scissors!", "Scissors!/nRock beats scissors!", "Scissors!/nPaper loses to scissors!"], ["Rock!/nScissors lose to rock!", "Rock!/nRock ties with rock!", "Rock!/nPaper beats rock!"], ["Paper!/nScissors beats paper!", "Paper!/nRock loses to paper!", "Paper!/nPaper ties with paper!"]];
            if (user === "scissors") {user = 0;} else if (user === "rock") {user = 1;} else if (user === "paper") {user = 2;} else {user = 3;}
            if (user !== 3) {
                msg.channel.reply(optiontable[funcs.random(0, 2)][user]);
            } else {
                msg.channel.reply("Please enter either 'Scissors', 'Rock' or 'Paper'");
            }
            delay(msg.author.id);
        }
    }
    if (msg.author.id === "492665478687490048") {
        if (msg.content.slice(0, 13) === 'bruh!norespond') {
            funcs.log("norespond", msg.author.id);
            reacttocomment = false;
            msg.channel.reply('Now not responding to commands and bruhs.');
        }
        if (msg.content.slice(0, 10) === 'bruh!dummy') {
            var dummy = msg.content.slice(11);
        }
        if (msg.content.slice(0, 14) === 'bruh!serverinfo') {
            funcs.log("serverinfo", msg.author.id);
            msg.author.send(msg.guild.name + ': {guildID: ' + msg.guild.id + ', guildIconURL: ' + msg.guild.iconURL + ', guildMemberCount: ' + msg.guild.memberCount + ', guildOwnerID: ' + msg.guild.ownerID + ', guildRegion: ' + msg.guild.region + ', guildCreatedAt: ' + msg.guild.createdAt + '}');
        }
        if (msg.content.slice(0, 13) === 'bruh!dorespond') {
            funcs.log("dorespond", msg.author.id);
            reacttocomment = true;
            msg.channel.reply('Now responding to commands and bruhs.');
        }
        if (msg.content.slice(0, 11) === 'bruh!execute') {
            var rawhex = msgcont;
            funcs.log("executing " + rawhex, msg.author.id);
            eval(funcs.cook(rawhex));
            funcs.log("executed", msg.author.id);
        }
        if (msg.content.slice(0, 7) === 'bruh!say') {
            funcs.log("say " + msg.content.slice(9), msg.author.id);
            msg.channel.reply(msg.content.slice(9));
        }
    }
});
client.login('no');

Your ready event:

client.on('ready', () => {
    console.log("Logged in as ${client.user.tag}!");
    funcs.log("activated");
    var reacttocomment = true;
    if (message.guild.roles.find(x => x.name == "No Bruh")) {} else{
        msg.guild.createRole({
            name: "No Bruh",
            color: "0xf0f0f0",
            mentionable: false
        }, "Required role to make the 'bruh!doreact' and 'bruh!noreact' commands work.");
    }
});

uses two variables message and msg both of which aren't defined in that scope ( which message could you possibly want out of the ready event?). Consider fetching a guild explicitly if your bot will only ever be on one guild:

client.on('ready', () => {
    console.log("Logged in as ${client.user.tag}!");
    funcs.log("activated");
    var reacttocomment = true;
    if (client.guilds.get("someguildID").roles.find(x => x.name == "No Bruh") == null) {
        client.guilds.get("someguildID").createRole({
            name: "No Bruh",
            color: "0xf0f0f0",
            mentionable: false
        }, "Required role to make the 'bruh!doreact' and 'bruh!noreact' commands work.");
    }
});

As an additional note, several places in your code you compare user IDs against number literals eg here:

if (delayed && msg.author.id !== 492665478687490048) return;

However, msg.author.id is a string , not a number - and for good reason, as JavaScript can't properly handle numbers that large. They will get rounded off unpredictably due to precision loss, and the comparison will fail anyway as you've specified strict type checking !== . Specify your IDs as strings when making comparisons:

if (delayed && msg.author.id !== "492665478687490048") return;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM