From 0fbf84b271709582fb328941382f563d15e129eb Mon Sep 17 00:00:00 2001 From: Jacob Janzen Date: Sun, 8 Dec 2024 01:56:35 +0000 Subject: initial commit --- app.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 app.js (limited to 'app.js') diff --git a/app.js b/app.js new file mode 100644 index 0000000..c387daf --- /dev/null +++ b/app.js @@ -0,0 +1,68 @@ +import 'dotenv/config'; +import express from 'express'; +import cron from 'node-cron'; +import { + InteractionType, + InteractionResponseType, + verifyKeyMiddleware, +} from 'discord-interactions'; + +// Create an express app +const app = express(); +// Get port, or default to 3000 +const PORT = process.env.PORT || 3000; + +/** + * Interactions endpoint URL where Discord will send HTTP requests + * Parse request body and verifies incoming requests using discord-interactions package + */ +app.post('/', verifyKeyMiddleware(process.env.PUBLIC_KEY), async function (req, res) { + // Interaction type and data + const { type, data } = req.body; + + /** + * Handle verification requests + */ + if (type === InteractionType.PING) { + return res.send({ type: InteractionResponseType.PONG }); + } + + /** + * Handle slash command requests + * See https://discord.com/developers/docs/interactions/application-commands#slash-commands + */ + if (type === InteractionType.APPLICATION_COMMAND) { + const { name, options } = data; + + if (name === 'schedule_message') { + const message = options[0].value; + const crontab = options[1].value; + const valid = cron.validate(crontab); + + const content = valid ? 'registered message "' + message + '" with cron "' + crontab + '"' : 'invalid cron'; + + if (valid) { + cron.schedule(crontab, () => { + console.log(message); + }); + } + + return res.send({ + type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE, + data: { + content: content, + }, + }); + } + + console.error(`unknown command: ${name}`); + return res.status(400).json({ error: 'unknown command' }); + } + + console.error('unknown interaction type', type); + return res.status(400).json({ error: 'unknown interaction type' }); +}); + +app.listen(PORT, () => { + console.log('Listening on port', PORT); +}); -- cgit v1.2.3