从机器人 Discord.js 获取机器人消息
Posted
技术标签:
【中文标题】从机器人 Discord.js 获取机器人消息【英文标题】:Fetch bot messages from bots Discord.js 【发布时间】:2018-06-05 17:19:50 【问题描述】:我正在尝试制作一个机器人来获取频道中以前的机器人消息,然后将它们删除。我目前有这段代码可以在输入!clearMessages
时删除频道中的所有消息:
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);
);
我希望机器人仅从该频道中的所有机器人消息中获取消息,然后删除这些消息。
我该怎么做?
【问题讨论】:
【参考方案1】:每个Message
都有一个代表User
的author
property。每个User
都有一个bot
property,用于指示用户是否是机器人。
使用该信息,我们可以过滤掉不是带有messages.filter(msg => msg.author.bot)
的机器人消息的消息:
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);
);
【讨论】:
非常感谢安德烈!也是一个快速的问题。我还想删除以 !/./> 开头的消息(这些消息不仅可以来自用户),因此我尝试使用 const botMessages 将行编辑为:const botMessages = messages.filter(msg => msg.author.bot && msg.content.startsWith("!" || "." || ">"));
,但这不起作用。你能指出我哪里出错了,我该如何解决这个问题?非常感谢。
我注意到的另一个问题是,当只有 1 条机器人消息时,机器人不会删除该消息并出现 DiscordAPIError,表示您必须提供至少 2-100 条消息才能删除。有解决办法吗?
我将为此提出一个新问题。
想关注@qttqtt后续问题的朋友可以关注here。以上是关于从机器人 Discord.js 获取机器人消息的主要内容,如果未能解决你的问题,请参考以下文章
从 discord.js 中的消息中获取 Emoji url
如何查找机器人在特定频道中发送的消息? [discord.js]