Files
xiao/commands/events/neko-atsume-password.js
T
2025-09-13 00:02:49 -04:00

74 lines
2.1 KiB
JavaScript

const Command = require('../../framework/Command');
const request = require('node-superfetch');
const { stripIndents } = require('common-tags');
const moment = require('moment');
require('moment-duration-format');
const { tomorrow } = require('../../util/Util');
const { GOLD_FISH_EMOJI_ID, GOLD_FISH_EMOJI_NAME, SILVER_FISH_EMOJI_ID, SILVER_FISH_EMOJI_NAME } = process.env;
const locales = ['en', 'jp'];
module.exports = class NekoAtsumePasswordCommand extends Command {
constructor(client) {
super(client, {
name: 'neko-atsume-password',
aliases: ['neko-atsume', 'neko-password', 'neko-atsume-pswd', 'neko-pswd'],
group: 'events',
description: 'Responds with today\'s Neko Atsume password.',
details: `**Locales:** ${locales.join(', ')}`,
credit: [
{
name: 'Neko Atsume: Kitty Collector',
url: 'http://nekoatsume.com/en/',
reason: 'API, Original Game'
}
],
args: [
{
key: 'locale',
type: 'string',
default: 'en',
oneOf: locales,
parse: locale => locale.toLowerCase()
}
]
});
}
async run(msg, { locale }) {
const data = await this.fetchPassword(locale);
return msg.say(stripIndents`
The current Neko Atsume password is **${data.password}**.
It will expire in **${moment.duration(data.expires - data.date).format('hh:mm:ss', { trim: false })}**.
${data.gold} ${this.goldFishEmoji} ${data.silver} ${this.silverFishEmoji}
`);
}
async fetchPassword(locale) {
const { text } = await request
.get(`http://hpmobile.jp/app/nekoatsume/neko_daily${locale === 'jp' ? '' : `_${locale}`}.php`);
const data = text.split(',');
const date = new Date();
date.setUTCHours(9);
return {
password: data[1],
silver: data[2],
gold: data[3],
date,
expires: tomorrow(9)
};
}
get goldFishEmoji() {
return GOLD_FISH_EMOJI_ID && GOLD_FISH_EMOJI_NAME
? `<:${GOLD_FISH_EMOJI_NAME}:${GOLD_FISH_EMOJI_ID}>`
: 'Gold Fish';
}
get silverFishEmoji() {
return SILVER_FISH_EMOJI_ID && SILVER_FISH_EMOJI_ID
? `<:${SILVER_FISH_EMOJI_NAME}:${SILVER_FISH_EMOJI_ID}>`
: 'Silver Fish';
}
};