【问题标题】:.bulkDelete() count messages deleted.bulkDelete() 计数删除的消息
【发布时间】:2018-02-02 03:17:58
【问题描述】:

我已经知道如何使用 Discord.JS 的 .bulkDelete() 但我将如何计算已删除的消息?

抱歉这个简短的问题,如果您想了解更多信息,请发表评论,我会添加它。

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    查看 bulkDelete 的来源它没有返回值

    https://github.com/hydrabolt/discord.js/blob/4520c801d370708bc1d914bfa2d9b61729dbdf1e/src/structures/interfaces/TextBasedChannel.js#L354

     /**
       * Bulk delete given messages that are newer than two weeks.
       * <warn>This is only available when using a bot account.</warn>
       * @param {Collection<Snowflake, Message>|Message[]|number} messages Messages or number of messages to delete
       * @param {boolean} [filterOld=false] Filter messages to remove those which are older than two weeks automatically
       * @returns {Promise<Collection<Snowflake, Message>>} Deleted messages
       */
      bulkDelete(messages, filterOld = false) {
        if (!isNaN(messages)) return this.fetchMessages({ limit: messages }).then(msgs => this.bulkDelete(msgs, filterOld));
        if (messages instanceof Array || messages instanceof Collection) {
          let messageIDs = messages instanceof Collection ? messages.keyArray() : messages.map(m => m.id);
          if (filterOld) {
            messageIDs = messageIDs.filter(id =>
              Date.now() - Snowflake.deconstruct(id).date.getTime() < 1209600000
            );
          }
          return this.client.api.channels[this.id].messages['bulk-delete']
            .post({ data: { messages: messageIDs } })
            .then(() =>
              this.client.actions.MessageDeleteBulk.handle({
                channel_id: this.id,
                ids: messageIDs,
              }).messages
            );
        }
        throw new TypeError('MESSAGE_BULK_DELETE_TYPE');
      }
    

    您所能做的就是重新创建批量删除函数,或者使用您自己的函数扩展您正在使用的对象,以返回可用于批量删除的文件数。

    类似于(未经测试):

    findEglibleForDeletion(messages, filterOld = false) {
    if (!isNaN(messages)) return this.fetchMessages({ limit: messages }).length;
    if (messages instanceof Array || messages instanceof Collection) {
      let messageIDs = messages instanceof Collection ? messages.keyArray() : messages.map(m => m.id);
      if (filterOld) {
        messageIDs = messageIDs.filter(id =>
          Date.now() - Snowflake.deconstruct(id).date.getTime() < 1209600000
        );
      }
      return messageIDs.length;
    }
    throw new TypeError('MESSAGE_BULK_DELETE_TYPE');
    

    }

    【讨论】:

    • 您好,谢谢!我应该把它放在 TextBasedChannel.js 中吗?如果我应该;我收到“(节点:3631)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):TypeError:message.channel.findEgibleForDeletion不是函数”的错误。感谢您的快速回复顺便说一句! :D
    • 你把它放在基于文本的频道类里了吗?如果是这样,它应该与批量删除相同。你清除缓存了吗?
    猜你喜欢
    • 2021-01-26
    • 2019-02-18
    • 2018-06-05
    • 2018-06-29
    • 2021-02-10
    • 2019-12-13
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多