WIP: Implementing /nag, /unnag, /checkin
This commit is contained in:
79
commands/calendar/nag/nag.ts
Normal file
79
commands/calendar/nag/nag.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import {
|
||||
ChatInputCommandInteraction,
|
||||
Client,
|
||||
SlashCommandBuilder,
|
||||
} from "discord.js";
|
||||
import { Sequelize, literal } from "sequelize";
|
||||
|
||||
import { Nag, CheckIn, Settings } from "./common";
|
||||
import { Chrono } from "chrono-node";
|
||||
|
||||
const data = new SlashCommandBuilder()
|
||||
.setName("nag")
|
||||
.setDescription("Let Blitzcrank nag you every day about something")
|
||||
.addStringOption((option) =>
|
||||
option
|
||||
.setRequired(true)
|
||||
.setName("text")
|
||||
.setDescription("What you have to do every day"),
|
||||
)
|
||||
.addStringOption((option) =>
|
||||
option
|
||||
.setName("failText")
|
||||
.setDescription("Custom message to be broadcast on failure"),
|
||||
)
|
||||
.addBooleanOption((option) =>
|
||||
option
|
||||
.setName("mentionHere")
|
||||
.setDescription("Whether to DM you or @ a channel")
|
||||
.setRequired(false),
|
||||
);
|
||||
|
||||
function lateCheckedInUsers() {
|
||||
return Nag.findAll({
|
||||
include: [CheckIn],
|
||||
where: literal(
|
||||
"checkInTime <= datetime('now', '-1 day', 'start of day', '+9 hours')",
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
async function initialize(settings: Settings) {}
|
||||
|
||||
async function execute(interaction: ChatInputCommandInteraction) {
|
||||
const text = interaction.options.getString("text");
|
||||
if (text === null || text === undefined) {
|
||||
await interaction.reply("Nag can't have a blank `text`, try again.");
|
||||
return;
|
||||
}
|
||||
const nag = await Nag.create({
|
||||
userId: interaction.user.id,
|
||||
text: text,
|
||||
failText: interaction.options.getString("failText"),
|
||||
mentionHere: interaction.options.getBoolean("mentionHere") ?? false,
|
||||
});
|
||||
await nag.save();
|
||||
const chrono = new Chrono();
|
||||
const checkIn = chrono.parseDate("today at 9AM");
|
||||
if (!checkIn) {
|
||||
await interaction.reply(
|
||||
"Internal error while saving your nag. Tell Drew the bot is broken!!!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
await CheckIn.create({
|
||||
nagId: nag.id,
|
||||
checkIn: checkIn,
|
||||
});
|
||||
await interaction.reply(
|
||||
`I'll check every day at 9AM if you've completed '${text}'. If not, I'll nag you! Use /checkin to prevent a shameful callout, and /unnag to cancel.`,
|
||||
);
|
||||
}
|
||||
|
||||
export default function (settings: Settings) {
|
||||
return {
|
||||
data,
|
||||
execute,
|
||||
initialize: async () => await initialize(settings),
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user