Discord.js ReferenceError:未定义msg

时间:2019-12-03 17:02:53

标签: javascript node.js discord.js

简而言之:我用JavaScript制作了一个discord机器人,并用JSHint对其进行了检查,然后在node.js上运行了它。 问题:每次我运行漫游器时,都会收到“未定义msg”错误

我发现已经回答了问题(Question 1Question 2),但我查看了他们评论中列出的解决方案,就像评论者说的那样。

注意:node.js服务器在Android手机上,并且我已经在其上安装了discord.js。

我的机器人的源代码:

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');

1 个答案:

答案 0 :(得分:0)

您的ready事件:

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.");
    }
});

使用两个变量messagemsg都没有在该范围内定义(您可能希望从准备事件中删除哪个消息?)。如果您的漫游器仅在一个公会中,请考虑显式获取公会:

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.");
    }
});

请注意,在代码中的多个位置,您将用户ID与数字文字进行了比较,例如在这里:

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

但是,msg.author.id是一个字符串,而不是数字-这是有充分的理由的,因为JavaScript无法正确处理这么大的数字。由于精度损失,它们将不可预测地四舍五入,并且由于您指定了严格的类型检查!==,因此无论如何比较都将失败。进行比较时,将您的ID指定为字符串:

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