diff --git a/src/configs/twitter.js b/src/configs/twitter.js index f2a20612..5f011350 100644 --- a/src/configs/twitter.js +++ b/src/configs/twitter.js @@ -12,5 +12,8 @@ module.exports = { retweets: false, skipValidAccounts: false, }, + feed_filters: { + date: 3600, + }, }, }; diff --git a/src/services/twitter.js b/src/services/twitter.js index 6c10cce8..edaa7191 100644 --- a/src/services/twitter.js +++ b/src/services/twitter.js @@ -8,6 +8,7 @@ const { HttpStatusError } = require('common-errors'); const { isObject, isString, conforms, merge, find, isNil, } = require('lodash'); +const moment = require('moment'); const Notifier = require('./notifier'); const { transform, TYPE_TWEET } = require('../utils/response'); @@ -45,6 +46,13 @@ function streamFilterOptions(config) { return merge({}, STREAM_FILTERS_DEFAULTS, config.stream_filters); } +function feedFilters(config) { + const FEED_FILTERS_DEFAULTS = { + date: 3600, + }; + return merge({}, FEED_FILTERS_DEFAULTS, config.feed_filters); +} + /** * @property {TwitterClient} client * @property {array} listeners @@ -195,6 +203,7 @@ class Twitter { this.client = new TwitterClient(config); this.listener = null; this.filterOptions = streamFilterOptions(config); + this.feedFilterOptions = feedFilters(config); this.storage = storage; this.logger = logger.child({ namespace: '@social/twitter' }); this._destroyed = false; @@ -405,7 +414,14 @@ class Twitter { const saved = await this.storage .twitterStatuses() .save(tweet); - this.publish(saved); + + const tweetDate = moment(tweet.date); + const now = moment(); + const diff = now.diff(tweetDate, 'seconds'); + + if (diff <= this.feedFilterOptions.date) { + this.publish(saved); + } return saved; } catch (err) { this.logger.warn({ err }, 'failed to save tweet');