gpt4 book ai didi

node.js - 类型错误 : Cannot read property 'user' of undefined

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:24 24 4
gpt4 key购买 nike

我不明白为什么

当我尝试从 OnDiscordReady() 函数访问 this.client 时,它返回未定义。机器人

错误信息


/home/xcomegax/NCerberus/services/discordS.js:21
Logger.log(`Discord client logged in as ${this.client.user.tag}`);
^

TypeError: Cannot read property 'user' of undefined
at Client.OnDiscordReady (/home/xcomegax/NCerberus/services/discordS.js:21:63)
at Client.emit (events.js:203:15)
at WebSocketConnection.triggerReady (/home/xcomegax/NCerberus/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:125:17)
at WebSocketConnection.checkIfReady (/home/xcomegax/NCerberus/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:141:61)
at GuildCreateHandler.handle (/home/xcomegax/NCerberus/node_modules/discord.js/src/client/websocket/packets/handlers/GuildCreate.js:13:31)
at WebSocketPacketManager.handle (/home/xcomegax/NCerberus/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:105:65)
at WebSocketConnection.onPacket (/home/xcomegax/NCerberus/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (/home/xcomegax/NCerberus/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:296:17)
at WebSocket.onMessage (/home/xcomegax/NCerberus/node_modules/ws/lib/event-target.js:120:16)
at WebSocket.emit (events.js:198:13)
at Receiver.receiverOnMessage (/home/xcomegax/NCerberus/node_modules/ws/lib/websocket.js:789:20)
at Receiver.emit (events.js:198:13)
at Receiver.dataMessage (/home/xcomegax/NCerberus/node_modules/ws/lib/receiver.js:413:14)
at Receiver.getData (/home/xcomegax/NCerberus/node_modules/ws/lib/receiver.js:352:17)
at Receiver.startLoop (/home/xcomegax/NCerberus/node_modules/ws/lib/receiver.js:138:22)
at Receiver._write (/home/xcomegax/NCerberus/node_modules/ws/lib/receiver.js:74:10)

我正在尝试修复调试的:

const EventEmitter = require('events');
const Logger = require('./loggerS');
const Discord = require('discord.js');
require('dotenv').config();

class discordS extends EventEmitter{

constructor(){
super();
this.client = new Discord.Client();
this.client.on('ready',this.OnDiscordReady);
this.client.on('message',this.OnDiscordMessage);
this.client.login(process.env.DiscordAuthToken);
}

OnDiscordMessage(msg){
if(msg.author == this.client.author) return;
}

OnDiscordReady(){
Logger.log(`Discord client logged in as ${this.client.user.tag}`);
}

}

module.exports = new discordS();

除了我无法访问 this.client 对象之外,一切似乎都正常。机器人登录然后发出“就绪”信号,然后一切都不起作用

我尝试在构造函数中使用 Object.assign(this, client : new Discord.Client()) 而不仅仅是 this.client =

但这没有任何帮助。

我在这里缺少什么?

最佳答案

您的类方法有自己的 this 作用域。这就是为什么 this.client.user 未定义,因为这个 this 不是类的 this。要纠正它,您可以在所使用的各个函数的构造函数内 .bind(this) ,或者您可以简单地使用箭头函数来获取类本身的词法 this

const EventEmitter = require('events');
const Logger = require('./loggerS');
const Discord = require('discord.js');
require('dotenv').config();

class discordS extends EventEmitter{

constructor(){
super();
this.client = new Discord.Client();
this.client.on('ready',this.OnDiscordReady);
this.client.on('message',this.OnDiscordMessage);
this.client.login(process.env.DiscordAuthToken);
}

OnDiscordMessage = (msg) => { //arrow function
if(msg.author == this.client.author) return;
}

OnDiscordReady =() => { //arrow function
Logger.log(`Discord client logged in as ${this.client.user.tag}`);
}

}

module.exports = new discordS();

关于node.js - 类型错误 : Cannot read property 'user' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58387582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com