UNPKG

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
'use strict'; 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