我有一个建议渠道,我做了它,所以用户只允许在其中发布链接,机器人能够对他们发布的内容做出反应。我已经对链接做了自动反应,但是我无法让机器人删除不是链接。所以我希望删除其他所有不是链接的内容。
bot.on('message', message => {
// whenever a message is sent
if (bot.id === '514484773171757061') {
return;
}
if (message.channel.id === "508606903740268545" ){
if (message.content.includes('playrust.io/')) {
message.react('✅').then( () =>{
message.react('❌')});
} else if (message.delete()) {
message.channel.sendMessage('Message has been Deleted ' + message.author)
}
}
});
它很好用,但不是很好。它删除了不是链接百万次的消息并发送了数百万次通知:/我想问题是else if
部分
我认为问题是你正在创造一种无限循环。在您的代码中,首先检查消息发送是否在特定通道中,然后检查它是否包含链接。如果不是,则向同一频道发送消息,说“我没找到链接”。
当您发送此消息时,您的机器人会再次被触发,因为已发送新消息。它检查它是否在特定通道中,如果它包含链接,它不包含,因此循环重复。
它可以通过一个简单的语句来修复,这也是创建机器人时非常好的做法。要修复它,您需要包含一些代码,用于检查机器人是否已发送消息。看下面的例子:
bot.on('message', message => {
// Ignore messages from all bots
if (message.author.bot) return;
/* All your other code here */
client.id
不是一件事,所以它需要
if (message.author.bot) return;
然后而不是
else if (message.delete()) {
message.channel.send('Message has been Deleted ' + message.author)
}
使用
else {
message.delete(5000)
message.channel.send('Message has been Deleted ' + message.author)
}
结果是:
bot.on('message', message => {
// whenever a message is sent
if (message.author.bot) return;
if (message.channel.id === "508606903740268545" ){
if (message.content.includes('playrust.io/')) {
message.react('✅').then( () =>{
message.react('❌')});
} else {
message.delete(5000)
message.channel.send('Message has been Deleted ' + message.author)
}
}
});