discord-timestamper
Version:
A NPX script for easily converting a set time to discord timestamps.
122 lines (102 loc) • 3.06 kB
text/typescript
// TODO: Add chalk styling.
// TODO: Add the rest of the timestamp collections.
import { input, select } from "@inquirer/prompts";
import chalk from "chalk";
import { getUnixTime, getDaysInMonth } from "date-fns";
console.log("NOTE: Use your LOCAL timezone.");
const month = await input({
message: "Enter the month:",
validate: (value) => {
if (isNaN(Number(value)) || value == "") {
return "You must provide a number.";
}
if (Number(value) < 1 || Number(value) > 12) {
return "The value must be between 1 and 12";
}
return true;
},
});
const daysInMonth = getDaysInMonth(month);
const day = await input({
message: "Enter the day:",
validate: (value) => {
if (isNaN(Number(value)) || value == "") {
return "You must provide a number.";
}
if (Number(value) < 0 || Number(value) > daysInMonth) {
return `The value must be between 0 and ${daysInMonth}.`;
}
return true;
},
});
const year = await input({ message: "Enter the year:" });
const hour = await input({
message: `Enter the hour ${chalk.blue("(24 hours):")}`,
validate: (value) => {
if (isNaN(Number(value)) || value == "") {
return "You must provide a number.";
}
if (Number(value) < 0 || Number(value) > 24) {
return `The value must be between 0 and 24.`;
}
return true;
},
});
const minute = await input({
message: "Enter the minute:",
validate: (value) => {
if (isNaN(Number(value)) || value == "") {
return "You must provide a number.";
}
if (Number(value) < 0 || Number(value) > 60) {
return `The value must be between 0 and 60.`;
}
return true;
},
});
const second = await input({
message: "Enter the second:",
validate: (value) => {
if (isNaN(Number(value)) || value == "") {
return "You must provide a number.";
}
if (Number(value) < 0 || Number(value) > 60) {
return `The value must be between 0 and 60.`;
}
return true;
},
});
const monthToNumber = Number(month) - 1;
const dayToNumber = Number(day);
const yearToNumber = Number(year);
const hourToNumber = Number(hour);
const minutesToNumber = Number(minute);
const secondToNumber = Number(second);
const completeDate = new Date(
yearToNumber,
monthToNumber,
dayToNumber,
hourToNumber,
minutesToNumber,
secondToNumber
);
type timestampType = "default" | "relative";
const timestampSelection: timestampType = await select({
message: "Select the timestamp formatting",
choices: [
{ name: "default", value: "default", description: "Default Timestamp." },
{
name: "relative",
value: "relative",
description: "Relative to current time timestamp.",
},
],
});
switch (timestampSelection) {
case "default":
console.log(`<t:${getUnixTime(completeDate)}>`);
break;
case "relative":
console.log(`<t:${getUnixTime(completeDate)}:R>`);
}