Der Grund der Wert von client.user.lastmessage
null
gleich ist, weil Sie gerade den Bot starten und Es wurden keine Nachrichten gesendet, bevor Sie den Befehl 'test'
ausführen.
Um dies zu umgehen, würde ich prüfen, ob es Null ist (falls es nicht ist) und in der ist, verwenden Sie einen messagecolleter und warten Sie auf Ihre Nachricht gesendet werden.
if (client.user.lastMessage == null) {
// Set the collector for the same channel
// Ensure the id is the same
var myID = client.user.id;
// Create collector and wait for 5 seconds (overkill but you never know with bad internet/lots of traffic)
const collector = new Discord.MessageCollector(msg.channel, m => m.author.id === myID, { time: 5000 });
collector.on('collect', message => {
console.log(message.content);
collector.stop("Got my message");
});
} else {
console.log(client.user.lastMessage.content);
}
Genauer Code Block I getestet mit:
client.on('message', msg => {
if (msg.content === '$ping') {
msg.reply("Pong!")
if (client.user.lastMessage == null) {
const collector = new Discord.MessageCollector(msg.channel, m => m.author.id === client.user.id, { time: 10000 });
collector.on('collect', message => {
console.log(message.content);
collector.stop("Got my message");
})
} else {
console.log(client.user.lastMessage.content);
}
}
}
Dieser Fehler bedeutet, dass 'client.user.lastMessage' nicht definiert ist. Das bedeutet, dass es möglicherweise keine lastMessage gab (weil sich die Nachricht technisch immer noch senden lässt, da nodeJS nicht blockiert) oder das lastMessage-Attribut falsch ist – dGRAMOP
So wartet node.js nicht auf einen Thread beenden, bevor Sie mit dem nächsten Befehl fortfahren? Wenn ja, habe ich versucht, setTimeout() 'zu verwenden, um 3 Sekunden zu warten, bevor es die Nachricht in der Konsole protokolliert. Gibt es eine Möglichkeit zu erkennen, wann die Nachricht tatsächlich gesendet wird, bevor sie weiter ausgeführt wird? – Meh
Rückrufe. Überlädt sendMessage (String) einen Callback-Parameter? – dGRAMOP