UNPKG

gbf-raidfinder

Version:

JavaScript library for tracking Granblue Fantasy raid tweets from Twitter

73 lines 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Twitter = require("@frizz925/twitter"); var deepExtend = require("deep-extend"); var TweetParser = require("gbf-raidfinder-parser"); var BossFilter_1 = require("./BossFilter"); var Constants_1 = require("./Constants"); var SearchBuilder_1 = require("./SearchBuilder"); var Raidfinder = /** @class */ (function () { function Raidfinder(credentials) { credentials = credentials || this.loadCredentialsFromEnv(); this.client = new Twitter(credentials); this.builder = new SearchBuilder_1.default(); } Raidfinder.prototype.loadCredentialsFromEnv = function () { return { access_token_key: process.env.ACCESS_TOKEN, access_token_secret: process.env.ACCESS_TOKEN_SECRET, consumer_key: process.env.CONSUMER_KEY, consumer_secret: process.env.CONSUMER_SECRET }; }; Raidfinder.prototype.stream = function (bosses, callback) { var _this = this; if (!Array.isArray(bosses)) { bosses = [bosses]; } var track = bosses .map(function (boss) { return _this.parameterToFilter(boss); }) .map(function (boss) { return _this.builder.track(boss); }) .join(','); var stream = this.client.stream('statuses/filter', { track: track }); if (!stream) { throw new Error("Can't get the stream emitter!"); } stream.on('data', function (tweet) { if (_this.filter(tweet)) { try { var parsed = _this.parse(tweet); callback(null, parsed, stream); } catch (err) { callback(err, null, stream); } } }); stream.on('error', function (error) { callback(error, null, stream); }); return stream; }; Raidfinder.prototype.filter = function (tweet) { return tweet.source === Constants_1.TWEET_SOURCE && TweetParser.isRaidTweet(tweet.text); }; Raidfinder.prototype.parse = function (tweet) { return TweetParser.parse(tweet.text); }; Raidfinder.prototype.parameterToFilter = function (boss) { if (typeof boss === 'string') { return boss; } var result = { name: {} }; for (var lang in boss) { if (boss.hasOwnProperty(lang)) { deepExtend(result, BossFilter_1.parse(boss[lang])); } } return result; }; return Raidfinder; }()); exports.default = Raidfinder; //# sourceMappingURL=Raidfinder.js.map