const express = require("express");
const { createEventAdapter } = require("@slack/events-api");
const { RTMClient } = require("@slack/rtm-api");
const quizWordPairs = [
["enseñar", /(to\s+)?teach/i],
["trabajar", /(to\s+)?work/i],
["aprender", /(to\s+)?learn/i],
["jugar", /(to\s+)?play/i],
["dormir", /(to\s+)?sleep/i],
["comer", /(to\s+)?eat/i],
["beber", /(to\s+)?drink/i]
];
function getNextWordPair() {
return quizWordPairs[Math.floor(quizWordPairs.length * Math.random())];
}
const rtm = new RTMClient(process.env.SLACK_BOT_TOKEN);
await rtm.start();
const slackEvents = createEventAdapter(process.env.SLACK_SIGNING_SECRET);
async function postSlackMessage(text, channel) {
const start = Date.now();
await rtm.sendMessage(text, channel);
return Date.now() - start;
}
const app = express();
app.get("/", async (req, res) => {
const duration = await postSlackMessage("It works!", "DQAA6NQGG");
res.end(`Sent test message in ${duration}ms.`);
});
app.use("/languagebot-events", slackEvents.requestListener());
const answerRegexByUser = new Map();
slackEvents.on("message", async (event) => {
if (event.bot_id) { // ignore messages from bots (i.e. itself)
return;
}
const answerRegex = answerRegexByUser.get(event.user);
if (answerRegex) {
if (answerRegex.test(event.text)) {
await postSlackMessage("Correct!", event.channel);
answerRegexByUser.delete(event.user);
} else {
await postSlackMessage("Try again!", event.channel);
}
} else {
if (/q+u+i+z+(i+n+g+)?\s*me/i.test(event.text)) {
const wordPair = getNextWordPair();
answerRegexByUser.set(event.user, wordPair[1]);
await postSlackMessage(`What does \`${wordPair[0]}\` mean in Spanish?`, event.channel);
} else {
await postSlackMessage("Say \"quiz me\" to get quizzed!", event.channel);
}
}
});
app.listen(0);