Node.js Discord Bot:TypeError:无法读取未定义的属性“ message”

时间:2018-12-12 21:09:57

标签: javascript node.js mongodb discord discord.js

我仍在学习discord.js,但我正努力将不和谐的消息发送功能从一个.js文件传递到另一个。在下面,我去除了所有复杂的内容,只保留了准系统,希望有人能理解并提供指导! 这个想法是,(最终)在'true'上有新更新时,它将消息“ hello world”发送到所有不和谐的服务器。现在出于调试目的,我使用我的开发人员不和谐频道进行了调试。 一切都通过nf run npm start

运行

Hello.js

const Discord = require('discord.js');
const client = new Discord.Client();
const disconfig = require("./config/default.json");

// new function
function message(message) {
     const messageInfoEmbed = new Discord.RichEmbed()
        .addField('Hey:')
        .addField('Testing: ')
       .addField('NoWorries: ')

    return messageInfoEmbed
}

// Function OnUpdate() {
// if (updatedcontent === true) {


exports.wrapper = async(client, message) => {
client.channels.get("519344197078220804").send(message(message));

}
//}
//}

Server.js

const Discord = require('discord.js')
const client = new Discord.Client()
const disconfig = require("./config/default.json");

client.on("ready", () => {
client.user.setActivity(`Serving ${client.guilds.size} servers`);
var sayHello = require('./hello');
sayHello.wrapper(); // "Hello World! Message via Discord"
});
client.on("message", async(message) => {
        if (message.author.bot) return;
        if (message.content.indexOf(disconfig.prefix) !== 0) return;
        const args = 
          message.content.slice(disconfig.prefix.length).trim().split(/ +/g);
        const command = args.shift().toLowerCase();

        if (command === "test?") {


        }
}
client.login(disconfig.token);

错误

UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'channels' of undefined at Object.exports.wrapper (X:\xxx\xxx\xxx\xxx\app\hello.js:20:8)

2 个答案:

答案 0 :(得分:1)

在JavaScript(以及几乎所有其他编程语言)中,内部作用域中的变量声明在外部作用域中具有相同名称的阴影(认为覆盖)声明:

var foo = 3;
var bar = 5;
var f = (foo) => {
  var bar = 1;
  return [foo, bar];
};

var results = f(0);
console.log(results); // [0, 1]

您不会得到[3, 5]。因此,在您的代码中:

exports.wrapper = async(client, message) => { 

表示该函数希望传入客户端。该参数声明遮盖了在文件顶部定义的客户端(这意味着它在函数内部不可见)。因此,当您在其他文件中调用

sayHello.wrapper(); 

不带参数,kaboom。

答案 1 :(得分:1)

改为使用message.guild。应该可以。