monkeytype/backend/dao/bot.js

72 lines
1.8 KiB
JavaScript
Raw Normal View History

2021-06-07 21:15:09 +08:00
const MonkeyError = require("../handlers/error");
const { mongoDB } = require("../init/mongodb");
async function addCommand(command, arguments) {
2021-08-03 23:03:31 +08:00
return await mongoDB().collection("bot-commands").insertOne({
command,
arguments,
executed: false,
requestTimestamp: Date.now(),
});
}
async function addCommands(commands, arguments) {
if (commands.length === 0 || commands.length !== arguments.length) {
return [];
}
const normalizedCommands = commands.map((command, index) => {
return {
command,
arguments: arguments[index],
executed: false,
requestTimestamp: Date.now(),
};
});
return await mongoDB()
.collection("bot-commands")
.insertMany(normalizedCommands);
}
2021-06-07 21:15:09 +08:00
class BotDAO {
static async updateDiscordRole(discordId, wpm) {
return await addCommand("updateRole", [discordId, wpm]);
2021-06-07 21:15:09 +08:00
}
static async linkDiscord(uid, discordId) {
return await addCommand("linkDiscord", [discordId, uid]);
}
2022-01-08 22:40:46 +08:00
static async unlinkDiscord(uid, discordId) {
return await addCommand("unlinkDiscord", [discordId, uid]);
}
static async awardChallenge(discordId, challengeName) {
return await addCommand("awardChallenge", [discordId, challengeName]);
}
static async announceLbUpdate(newRecords, leaderboardId) {
if (newRecords.length === 0) {
return [];
}
const leaderboardCommands = Array(newRecords.length).fill("sayLbUpdate");
const leaderboardCommandsArguments = newRecords.map((newRecord) => {
return [
newRecord.discordId ?? newRecord.name,
newRecord.rank,
leaderboardId,
newRecord.wpm,
newRecord.raw,
newRecord.acc,
newRecord.consistency,
];
});
return await addCommands(leaderboardCommands, leaderboardCommandsArguments);
2021-09-14 21:54:03 +08:00
}
2021-06-07 21:15:09 +08:00
}
module.exports = BotDAO;