gbf-raidfinder-parser
Version:
Parser for Granblue Fantasy raid tweets
69 lines • 2.51 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var BossParser_1 = require("./BossParser");
var RaidParser_1 = require("./RaidParser");
var TextParser_1 = require("./TextParser");
var RaidTweet_1 = require("../RaidTweet");
function parseTweet(text) {
var parser = new TweetParser();
return parser.parse(text);
}
exports.parseTweet = parseTweet;
function isRaidTweet(text) {
try {
parseTweet(text);
return true;
}
catch (e) {
if (e instanceof TypeError && e.message.match(/can't parse/i)) {
return false;
}
else {
throw e;
}
}
}
exports.isRaidTweet = isRaidTweet;
var TweetParser = /** @class */ (function (_super) {
__extends(TweetParser, _super);
function TweetParser() {
return _super !== null && _super.apply(this, arguments) || this;
}
TweetParser.prototype.parse = function (text) {
var lines = text
.trim()
.split('\n')
.reverse();
if (lines.length < 3) {
throw this.invalidFormatError(text);
}
var image = lines[0].trim();
// pad the tokenized string if it doesn't start with an image link
if (!image.startsWith('https://t.co')) {
lines.splice(0, 0, '');
image = undefined;
}
var boss = new BossParser_1.default().parse(lines[1]);
var language = this.getLanguage(lines[2]);
var raid = new RaidParser_1.default().parse(lines[3]);
return new RaidTweet_1.default(text, raid, boss, language, image);
};
TweetParser.prototype.getLanguage = function (text) {
return text.match(/参加者募集!/) ? 'jp' : 'en';
};
TweetParser.parse = parseTweet;
TweetParser.isRaidTweet = isRaidTweet;
return TweetParser;
}(TextParser_1.default));
exports.default = TweetParser;
//# sourceMappingURL=TweetParser.js.map