poi-plugin-senka-calc
Version:
Ranking point calculator for poi
105 lines (79 loc) • 2.57 kB
JavaScript
;
exports.__esModule = true;
exports.reducerFactory = void 0;
var _util = require("../lib/util");
var _magic = require("../lib/magic");
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getUpdatedSenkaHistory(state, user) {
const rankNo = user.api_mxltvkpyuklh;
const encryptedSenka = user.api_wuhnhojjxmke;
const senka = _magic.magicManager.decryptSenka(rankNo, encryptedSenka);
const timeNo = (0, _util.getRankDateNo)();
const lastState = (0, _util.removeKeysGreaterThan)(state, timeNo);
return { ...lastState,
[timeNo]: senka
};
}
const reducerFactory = anchor => {
return (state = {}, payload) => {
const {
type
} = payload;
switch (type) {
case '@@poi-plugin-senka-calc/initialize':
{
const {
archive
} = payload;
switch (anchor) {
case 5:
return archive.rank5;
case 20:
return archive.rank20;
case 100:
return archive.rank100;
case 501:
return archive.rank501;
default:
return archive.rankUser;
}
}
case '@@Response/kcsapi/api_req_ranking/mxltvkpyuklh':
{
const startOfRecord = _momentTimezone.default.tz('Asia/Tokyo').startOf('month').add(3, 'hours');
const now = _momentTimezone.default.tz('Asia/Tokyo'); // the ranking api still returns data of former month, skip recording
if (now.isBefore(startOfRecord)) {
return state;
}
const {
body
} = payload;
const userList = body.api_list;
const page = body.api_disp_page;
_magic.magicManager.updateMagicNum(userList);
const {
nickname
} = _magic.magicManager;
for (const user of userList) {
if (anchor === 'user') {
if (user.api_mtjmdcwtvhdr === nickname) {
return getUpdatedSenkaHistory(state, user);
}
} else {
if (page === Math.ceil(anchor / 10)) {
const user = userList[(anchor - 1) % 10];
return getUpdatedSenkaHistory(state, user);
}
}
}
return state;
}
default:
{
return state;
}
}
};
};
exports.reducerFactory = reducerFactory;