0

SOLVED TLDR EDIT: I am stupid and tried to get "message" in the ready event, so yea, look up what the code that you're copy and pasting does lads!

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');
7
  • 1
    There is no variable message in your code, is there any other files ? Commented Dec 3, 2019 at 17:04
  • 1
    Or could you post the whole error Commented Dec 3, 2019 at 17:05
  • Sounds like you're not running the code you've pasted here... to check, try adding some console.log and see if it runs when you start the bot. Commented Dec 3, 2019 at 17:11
  • @Nicolas fixed that, i am sorry for putting wrong names here. Commented Dec 3, 2019 at 17:36
  • @Klaycon in the source listed in the question, i took out the majority of the code and kept in the part that "caused the problems". node.js said the same thing after i deleted 90% of the code, so i thought i could use the smaller one. Commented Dec 3, 2019 at 17:39

1 Answer 1

1

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 e.g. 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;

Sign up to request clarification or add additional context in comments.

3 Comments

thanks for telling me that msg.author.id is a string, didnt know that!
@SAMUELGAMING you're welcome, if my answer solved the error in your question as well feel free to accept it to let people know the question is closed :)
Taureon (aka SAMUELGAMING from the future) here! the reason I did the dumb thing i did is because I wanted to make my bot check if every server it is in has the no bruh role created! I am larger brained now, so I now know how to do it properly lmao

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.