2017-08-04 302 views
0

我正在使用Discord bot,並且最近一直在閱讀API。我想爲我的機器人添加一個命令,它將完全清除文本通道,並且只允許有權限管理消息的人員。Discord.js:刪除主持人的留言命令

這是到目前爲止我的代碼:

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); 
     } 
    } 

}); 

我得到它看起來像這樣的錯誤:

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) 

回答

4

對於初學者來說,你不能批量刪除的郵件超過14天,所以如果您嘗試使用14天以上的消息清除頻道,但無法使用批量刪除,您必須一次刪除一個頻道(while for循環),我假設您知道這是它的文檔。其次,message.channel.fetchMessages()返回Promise,表示在您訪問時尚未準備好。您必須使用async/await或只需.then。例如:

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.")})       
     } 
    } 

});