2017-12-25 6 views
0

Wie würden Sie das Objekt für die letzte Nachricht des Bot erhalten? Ich habe versucht, etwas zu tun, wie:Wie bekomme ich die letzte Nachricht des Clientbenutzers?

if (message.content.split(' ')[0] === 'test') { message.channel.sendMessage('Test') console.log(client.user.lastMessage.content) }

Wenn ich die bedingte auslösen, die Konsole gibt mir eine Fehlermeldung: TypeError: Cannot read property 'content' of undefined

+0

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

+0

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

+0

Rückrufe. Überlädt sendMessage (String) einen Callback-Parameter? – dGRAMOP

Antwort

0

Der Grund der Wert von client.user.lastmessagenull 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); 
     } 
    } 
} 
+0

Ich habe Ihr Code-Snippet ausgeführt, nachdem der Bot eine Nachricht gesendet hat, aber es gibt nie etwas an die Konsole aus. – Meh

+0

@Meh funktioniert das für mich? Sehen Sie sich meine Bearbeitung für den genauen Codeblock an, den ich mit – Monacraft

+0

getestet habe. Ich habe die diskord.js-Bibliothek aktualisiert und es sieht so aus, als ob sie funktioniert. Offensichtlich war die Version, die ich verwendete, von Januar 2017. – Meh

Verwandte Themen