UNPKG

@sugarcube/plugin-twitter

Version:
103 lines (88 loc) 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _dashp = require("dashp"); var _core = require("@sugarcube/core"); var _utils = require("@sugarcube/utils"); var _twitter = require("./twitter"); var _utils2 = require("./utils"); var _assertions = require("./assertions"); const querySource = "twitter_user"; const feedPlugin = async (envelope, { log, cfg, stats }) => { const decisions = (0, _core.createFeatureDecisions)(); const users = _core.envelope.queriesByType(querySource, envelope).map(term => (0, _utils2.parseTwitterUser)(term)); const logCounter = (0, _utils.counter)(envelope.data.length, ({ cnt, total, percent }) => log.debug(`Progress: ${cnt}/${total} units (${percent}%).`), { threshold: 50, steps: 25 }); log.debug(`Fetching the tweets for ${users.join(", ")}`); const fetchTimeline = user => (0, _dashp.flowP)([(0, _dashp.tapP)(() => stats.count("total")), (0, _twitter.feed)(cfg), (0, _dashp.tapP)(rs => { const fetched = rs.length; stats.count("success"); stats.count("fetched", fetched); log.info(`Fetched ${fetched} tweets for ${user}.`); logCounter(); }), // Merge the query into the data unit. results => results.map(r => { const q = envelope.queries.find(({ type, term }) => { const { user: u } = decisions.canNcube() ? r._sc_data : r; return type === querySource && ((0, _utils2.parseTwitterUser)(term) === u.screen_name || (0, _utils2.parseTwitterUser)(term) === u.user_id); }); if (q == null) return r; const { tags, ...query } = q; return Object.assign(r, { _sc_queries: Array.isArray(r._sc_queries) ? r._sc_queries.concat(query) : [query] }, Array.isArray(tags) && tags.length > 0 ? { _sc_tags: Array.isArray(r._sc_tags) ? r._sc_tags.concat(tags) : tags } : undefined); }), (0, _dashp.caughtP)(e => { const reason = (0, _twitter.parseApiErrors)(e); stats.fail({ type: querySource, term: user, reason }); return []; })], user); const results = await (0, _dashp.flatmapP)(fetchTimeline, users); log.info(`Fetched ${results.length} tweets for ${users.length} users.`); return _core.envelope.concatData(results, envelope); }; const plugin = _core.plugin.liftManyA2([_assertions.assertCredentials, feedPlugin]); plugin.desc = "Fetch the tweets of an user."; plugin.source = { name: querySource, desc: "A twitter user name" }; plugin.argv = { "twitter.tweet_count": { default: 200, nargs: 1, desc: "Number of tweets retrived" }, "twitter.retweets": { default: 1, nargs: 1, desc: "Include retweets" } }; var _default = plugin; exports.default = _default;