2017-12-23 21 views
0

Ich versuche einen Bot zu machen, der vorhergehende Bot-Nachrichten im Kanal abruft und sie dann löscht. Ich habe diesen Code zur Zeit, dass alle Nachrichten im Kanal löscht, wenn !clearMessages eingegeben wird:Bot-Nachrichten von Bots holen Discord.js

if (message.channel.type == 'text') { 
    message.channel.fetchMessages().then(messages => { 
     message.channel.bulkDelete(messages); 
     messagesDeleted = messages.array().length; // number of messages deleted 

     // Logging the number of messages deleted on both the channel and console. 
     message.channel.send("Deletion of messages successful. Total messages deleted: "+messagesDeleted); 
     console.log('Deletion of messages successful. Total messages deleted: '+messagesDeleted) 
    }).catch(err => { 
     console.log('Error while doing Bulk Delete'); 
     console.log(err); 
    }); 
} 

Ich würde den Bot möge nur Nachrichten holt aus allen Bot-Nachrichten in diesem Kanal, und dann diese Nachrichten löschen.

Wie würde ich das tun?

Antwort

1

Jede Message hat eine author property, die eine User darstellt. Jede User hat eine bot property, die angibt, ob der Benutzer ein Bot ist.

diese Informationen verwenden, können wir Nachrichten herauszufiltern, die nicht Bot-Nachrichten mit messages.filter(msg => msg.author.bot) sind:

if (message.channel.type == 'text') { 
    message.channel.fetchMessages().then(messages => { 
     const botMessages = messages.filter(msg => msg.author.bot); 
     message.channel.bulkDelete(botMessages); 
     messagesDeleted = botMessages.array().length; // number of messages deleted 

     // Logging the number of messages deleted on both the channel and console. 
     message.channel.send("Deletion of messages successful. Total messages deleted: " + messagesDeleted); 
     console.log('Deletion of messages successful. Total messages deleted: ' + messagesDeleted) 
    }).catch(err => { 
     console.log('Error while doing Bulk Delete'); 
     console.log(err); 
    }); 
} 
+0

Vielen Dank André! Auch eine kurze Frage. Ich möchte auch Nachrichten löschen, die mit! /./> beginnen (diese Nachrichten können von Benutzern nicht nur Bots sein) also habe ich versucht, die Zeile mit den const BotMessages zu bearbeiten: 'const botMessages = messages.filter (msg => msg.author.bot && msg.content.startsWith ("!" || "." || ">")); 'aber das hat nicht funktioniert. Kannst du bitte darauf hinweisen, wo ich falsch liege und wie ich das beheben kann? Danke vielmals. –

+0

Ein weiteres Problem, das mir aufgefallen ist, ist, dass der Bot die Nachricht nicht löscht, wenn nur eine Bot-Nachricht vorhanden ist, und einen DiscordAPIError mit der Aussage, dass Sie mindestens 2-100 Nachrichten zum Löschen bereitstellen müssen. Gibt es da eine Arbeit? –

+0

Ich werde eine neue Frage dazu aufschlagen. –