69 lines
2.1 KiB
TypeScript
69 lines
2.1 KiB
TypeScript
import { SlashCommandBuilder, ChatInputCommandInteraction } from 'discord.js';
|
|
import {
|
|
format,
|
|
differenceInYears,
|
|
differenceInMonths,
|
|
differenceInDays,
|
|
addYears,
|
|
isToday,
|
|
} from 'date-fns';
|
|
|
|
const BIRTHDAY_TIMESTAMP = 1582576229;
|
|
|
|
// Initialise the command data.
|
|
export const data = new SlashCommandBuilder()
|
|
.setName('birthday')
|
|
.setDescription("Returns ButlerBot's Birthday information.");
|
|
|
|
console.log(`Loaded ${data.name} command.`);
|
|
|
|
/**
|
|
* Responds with ButlerBot's age and the time remaining until the next birthday.
|
|
* @param interaction The interaction that triggered the command.
|
|
* @returns A promise that resolves when the command is finished executing.
|
|
*/
|
|
export async function execute(
|
|
interaction: ChatInputCommandInteraction
|
|
): Promise<void> {
|
|
const today = new Date();
|
|
const birthday = new Date(BIRTHDAY_TIMESTAMP * 1000);
|
|
|
|
const ageYears = differenceInYears(today, birthday);
|
|
const ageMonths = differenceInMonths(today, birthday) % 12;
|
|
const ageDays = differenceInDays(today, addYears(birthday, ageYears)) % 30;
|
|
|
|
let ageMessage = `I am ${ageYears} year`;
|
|
ageMessage += ageYears !== 1 ? 's, ' : ', ';
|
|
ageMessage += `${ageMonths} month`;
|
|
ageMessage += ageMonths !== 1 ? 's ' : ' ';
|
|
ageMessage += `and ${ageDays} day`;
|
|
ageMessage += ageDays !== 1 ? 's ' : ' ';
|
|
ageMessage += 'old!';
|
|
|
|
let birthdayMessage = `I was created on ${format(birthday, 'dd MMMM yyyy')}.`;
|
|
|
|
const nextBirthdayYear =
|
|
today.getMonth() > birthday.getMonth() ||
|
|
(today.getMonth() === birthday.getMonth() &&
|
|
today.getDate() >= birthday.getDate())
|
|
? today.getFullYear() + 1
|
|
: today.getFullYear();
|
|
const nextBirthday = new Date(
|
|
nextBirthdayYear,
|
|
birthday.getMonth(),
|
|
birthday.getDate()
|
|
);
|
|
const countdown = differenceInDays(nextBirthday, today);
|
|
|
|
if (isToday(nextBirthday)) {
|
|
birthdayMessage += " It's my Birthday today!";
|
|
} else if (countdown === 1) {
|
|
birthdayMessage += " It's my Birthday tomorrow!";
|
|
} else {
|
|
birthdayMessage += ` It's my Birthday in ${countdown} days!`;
|
|
}
|
|
|
|
const fullMessage = `${ageMessage} ${birthdayMessage}`;
|
|
await interaction.reply(fullMessage);
|
|
}
|