2017-08-04 8 views
0

Ich arbeite an einem Discord-Bot und habe kürzlich die API gelesen. Ich möchte einen Befehl für meinen Bot hinzufügen, der einen Textkanal vollständig löscht und nur Personen mit einer Berechtigung erlaubt, Nachrichten zu verwalten.Discord.js: Nachrichtenbefehl für Moderatoren löschen

Dies ist mein Code so weit:

client.on('message', function(message) { 
    if (message.content == "^clear") { 
     try { 
      if (message.member.hasPermission("MANAGE_MESSAGES")) { 
       messages = message.channel.fetchMessages(); 
       message.channel.bulkDelete(messages); 
      } 
     } catch(e) { 
      message.channel.send("ERROR: ERROR CLEARING CHANNEL."); 
      console.log(e); 
     } 
    } 

}); 

ich eine Fehlermeldung erhalten, die wie folgt aussieht:

TypeError: The messages must be an Array, Collection, or number. 
at TextChannel.bulkDelete (/Users/person/bot/node_modules/discord.js/src/structures/interfaces/TextBasedChannel.js:379:11) 
at Client.<anonymous> (/Users/person/bpt/bot.js:29:33) 
at emitOne (events.js:96:13) 
at Client.emit (events.js:188:7) 
at MessageCreateHandler.handle (/Users/person/bot/node_modules/discord.js/src/client/websocket/packets/handlers/MessageCreate.js:9:34) 
at WebSocketPacketManager.handle (/Users/person/bot/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:102:65) 
at WebSocketConnection.onPacket (/Users/person/bot/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:325:35) 
at WebSocketConnection.onMessage (/Users/person/bot/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:288:17) 
at WebSocket.onMessage (/Users/person/bot/node_modules/discord.js/node_modules/ws/lib/EventTarget.js:103:16) 
at emitTwo (events.js:106:13) 

Antwort

4

Für den Anfang können Sie nicht Massen-Nachrichten löschen, die älter als 14 Tage, so dass, wenn Wenn Sie versuchen, einen Kanal mit Nachrichten zu löschen, die älter als 14 Tage sind, funktioniert das nicht mit dem Massenlöschvorgang. Sie müssten sie einzeln löschen (while/for loop). Ich gehe davon aus, dass Sie dies wissen es ist auf den Dokumenten. Zweitens gibt message.channel.fetchMessages() eine Promise zurück, was bedeutet, dass es zu dem Zeitpunkt, zu dem Sie darauf zugreifen, nicht bereit ist. Sie müssen entweder async/await oder nur .then verwenden. Beispiel:

client.on('message', function(message) { 
    if (message.content == "^clear") { 
     if (message.member.hasPermission("MANAGE_MESSAGES")) { 
      message.channel.fetchMessages() 
       .then(function(list){ 
        message.channel.bulkDelete(list); 
       }, function(err){message.channel.send("ERROR: ERROR CLEARING CHANNEL.")})       
     } 
    } 

});