2017-08-04 301 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.")})       
     } 
    } 

});