gbf-raidfinder
Version:
JavaScript library for tracking Granblue Fantasy raid tweets from Twitter
73 lines • 2.7 kB
JavaScript
;
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