gbf-roomfinder-parse
Version:
:package: `gbf-roomfinder-parse` --- <p align="right"> <a href="https://npmjs.org/package/gbf-roomfinder-parse"> <img src="https://img.shields.io/npm/v/gbf-roomfinder-parse.svg?style=flat-square"> </a> <a href="https://travis-ci.org/59naga/gbf-r
95 lines (78 loc) • 2.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _htmlEntities = require('html-entities');
var entities = new _htmlEntities.XmlEntities();
// マッチした文字列を返す。なければ初期値
function extract(str, regexp) {
var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var targetIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
var matched = str.match(regexp) || [];
return matched[targetIndex] || defaultValue;
}
function extractRaid() {
var tweet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var lines = tweet.split('\n').slice();
lines.splice(1, 1);
var nextLine = function nextLine() {
return lines.shift() || '';
};
var id = extract(nextLine(), /(\w+)(?: :Room ID|:ルームID)$/);
// '募集対象:誰でもOK' -> '誰でもOK'
// '誰でもOK' or 'Anyone' -> ''
var only = nextLine().replace(/^募集対象(:・目的)?:/, '').replace(/^(誰でもOK|Anyone)$/, '');
var readyCheck = !extract(nextLine(), /^(Ready Check Disabled|承認なし)/, false);
var max = extract(nextLine(), /^(?:Limit: |参戦人数:)(\d+)( players|人)/, 30) | 0;
var over = extract(nextLine(), /^(?:Rank: |Rank )(\d+)(\+| 以上)/, 0) | 0;
var optionalLine = lines[0] || '';
var repeat = extract(optionalLine, /^(?:Repeating Quest: |連続クエスト設定:)(\d+)( times|回連続)/, 0) | 0;
if (repeat) {
nextLine();
}
var title = entities.decode(lines.join('\n'));
return {
type: 'raid',
id: id,
only: only,
readyCheck: readyCheck,
max: max,
over: over,
repeat: repeat,
title: title
};
}
function extractCoop() {
var tweet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var lines = tweet.split('\n').slice();
lines.splice(1, 1);
var nextLine = function nextLine() {
return lines.shift() || '';
};
var id = extract(nextLine(), /(\w+)(?: :Room ID|:ルームID)$/);
var only = nextLine().replace(/^募集対象・目的:/, '').replace(/^(誰でもOK|Anyone)$/, '');
var over = extract(nextLine(), /^(?:Rank: |Rank )(\d+)( or Higher| 以上)/, 0) | 0;
var title = entities.decode(lines.join('\n'));
return {
type: 'coop',
id: id,
only: only,
over: over,
title: title
};
}
// ツイートからルーム情報を抽出する
function extractRoomData() {
var tweet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
if (tweet.match(/(マルチバトル参加者募集!|Join my Granblue Fantasy raid room!)/)) {
return extractRaid(tweet);
}
return extractCoop(tweet);
}
var entries = extractRoomData;
entries.extract = extract;
entries.extractRaid = extractRaid;
entries.extractCoop = extractCoop;
exports.default = entries;
module.exports = exports['default'];
//# sourceMappingURL=index.js.map