【问题标题】:Discord.js ReferenceError: msg is not definedDiscord.js ReferenceError:未定义味精
【发布时间】:2022-01-31 05:28:59
【问题描述】:

已解决 TLDR 编辑:我很愚蠢,并试图在 ready 事件中获取“消息”,所以是的,看看你复制和粘贴的代码对小伙子们有什么作用!

简单地说:我用 javascript 制作了一个不和谐的机器人,用 JSHint 检查它,然后在 node.js 上运行它。 问题:每次运行机器人时,我都会收到“未定义味精”错误

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

注意:node.js 服务器在安卓手机上,我已经在上面安装了 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');

【问题讨论】:

  • 你的代码中没有变量message,还有其他文件吗?
  • 或者你能发布整个错误
  • 听起来你没有运行你粘贴在这里的代码...检查一下,尝试添加一些console.log,看看它是否在你启动机器人时运行。
  • @Nicolas 修复了这个问题,很抱歉在这里输入了错误的名称。
  • @Klaycon 在问题中列出的源代码中,我取出了大部分代码并保留在“导致问题”的部分。 node.js 在我删除了 90% 的代码后说了同样的话,所以我想我可以使用较小的。

标签: javascript node.js discord.js


【解决方案1】:

您的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,这两个变量都未在该范围内定义(您可能希望从 ready 事件中删除哪个消息?)。如果您的机器人只会在一个公会中,请考虑明确获取公会:

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 &amp;&amp; msg.author.id !== 492665478687490048) return;

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

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

【讨论】:

  • 感谢您告诉我msg.author.id 是一个字符串,不知道!
  • @SAMUELGAMING 不客气,如果我的回答解决了您问题中的错误,请随时接受它,让人们知道问题已结束 :)
  • Taureon(来自未来的 SAMUELGAMING)在这里!我做蠢事的原因是因为我想让我的机器人检查它所在的每个服务器是否都创建了 no bruh 角色!我现在脑筋大了,所以我现在知道如何正确地做 lmao
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 2020-09-19
  • 2021-06-03
  • 2020-11-15
  • 2020-09-08
  • 2021-12-27
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多