【问题标题】:Count messages from a channel计算来自频道的消息
【发布时间】:2021-09-09 02:34:06
【问题描述】:

我想清理我所有的频道,我马上就到了。 问题是,它非常非常长......

message.guild.channels.cache.forEach(c => {
                if (c.isText()) {
                    let CompteurMessage = 0;
                    let CompteurSuppression;
                    c.messages.fetch().then(messages => {
                        messages.forEach(msg => {
                            msg.delete();
                        });
                    });

                    c.send(`Your server is the best, ${message.author}.`);
                }
            });

你知道如何更快,例如计算频道中的消息数量吗?

编辑: 现在,我克隆了频道,但它们改变了位置......

c.clone().then((clone) => {
                        clone.send(`Love ${message.author}.`);
                        const originalPosition = c.position;

                        c.delete();
                        clone.setPosition(originalPosition);
                    });

3 号和 4 号频道改变了位置。

谢谢

【问题讨论】:

  • 也许在服务器端对它们进行计数并查询您的服务器以获取计数?
  • 您受到速率限制,重复的大量 API 调用是 API 滥用,将导致您的客户端被暂停使用 Discord API
  • 您最终可能会遇到 14 天或更早的消息,这些消息无法被 API 删除。
  • 为什么不删除频道,并使用相同的名称、主题和权限覆盖重新创建它。这将产生相同的结果,但对 API 的调用更少。

标签: javascript node.js discord discord.js bots


【解决方案1】:

有两种方法可以做到这一点。

克隆

您可以使用 TextChannel.clone 克隆 TextChannel。 这会阻止您使用 BulkDelete 的 14 天限制。

const newChannel = await message.channel.clone();
message.channel.delete();

newChannel.send('The channel has been purged.');

批量删除

您可以非常轻松地删除过去 14 天内的所有消息。

await message.channel.messages.fetch();
const messageCount = message.channel.messages.cache.map(x => x).length;
message.channel.bulkDelete(messageCount, true);

注意:由于是深夜,这不是最优雅的解决方案,但这应该可以帮助您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多