从机器人 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 都有一个代表Userauthor 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]

(Discord 机器人)当用户加入 Discord 服务器(discord.js)时,如何发送欢迎消息?

discord.js 机器人加入时的欢迎消息

JS Discord 机器人获取角色

从特定消息中删除特定用户反应 - Discord.js