Compare commits

..

4 commits

3 changed files with 24 additions and 28 deletions

View file

@ -71,18 +71,16 @@ export default {
// Check if the limit of parallel execution has been reached // Check if the limit of parallel execution has been reached
if (command.parallelLimit) { if (command.parallelLimit) {
console.log('Command has a parallel limit'); const doParallelLimit = await ratelimiter.checkParallel(interaction.user, commandName, command);
const doParallelLimit = ratelimiter.checkParallel(interaction.user, commandName, command);
console.log(doParallelLimit.limited);
if (doParallelLimit.limited) { if (doParallelLimit.limited) {
return await interaction.reply({ content: doParallelLimit, ephemeral: true }); return await interaction.reply({ content: doParallelLimit.msg, ephemeral: true });
} }
ratelimiter.addParallel(commandName); ratelimiter.addParallel(commandName);
} }
// Check the ratelimit // Check the ratelimit
const doRateLimit = ratelimiter.check(interaction.user, commandName, command); const doRateLimit = await ratelimiter.check(interaction.user, commandName, command);
if (doRateLimit) { if (doRateLimit) {
return interaction.reply({ content: doRateLimit, ephemeral: true }); return interaction.reply({ content: doRateLimit, ephemeral: true });
@ -109,8 +107,8 @@ export default {
} }
await command.execute(interaction, args, client) await command.execute(interaction, args, client)
.then(() => { .then(async () => {
const hasPrallelLimit = ratelimiter.checkParallel(interaction.user, commandName, command); const hasPrallelLimit = await ratelimiter.checkParallel(interaction.user, commandName, command);
if (hasPrallelLimit) ratelimiter.removeParallel(commandName); if (hasPrallelLimit) ratelimiter.removeParallel(commandName);
}); });
} }

View file

@ -303,7 +303,7 @@ export default {
const isOptOut = await db.optout.findOne({ where: { userID: message.author.id } }); const isOptOut = await db.optout.findOne({ where: { userID: message.author.id } });
const timestamp = new Date(); const timestamp = new Date();
console.log(`[${timestamp.toISOString()}] \x1b[33m${ isOptOut ? 'A user' : `${userTag} (${userID})`}\x1b[0m launched command \x1b[33m${commandName}\x1b[0m using slash`); console.log(`[${timestamp.toISOString()}] \x1b[33m${ isOptOut ? 'A user' : `${userTag} (${userID})`}\x1b[0m launched command \x1b[33m${commandName}\x1b[0m using prefix`);
// Owner only check // Owner only check
@ -333,18 +333,16 @@ export default {
// Check if the limit of parallel execution has been reached // Check if the limit of parallel execution has been reached
if (command.parallelLimit) { if (command.parallelLimit) {
console.log('Command has a parallel limit'); const doParallelLimit = await ratelimiter.checkParallel(message.author, commandName, command);
const doParallelLimit = ratelimiter.checkParallel(message.author, commandName, command);
console.log(doParallelLimit.limited);
if (doParallelLimit.limited) { if (doParallelLimit.limited) {
return await message.reply({ content: doParallelLimit, ephemeral: true }); return await message.reply({ content: doParallelLimit.msg, ephemeral: true });
} }
ratelimiter.addParallel(commandName); ratelimiter.addParallel(commandName);
} }
// Check the ratelimit // Check the ratelimit
const doRateLimit = ratelimiter.check(message.author, commandName, command); const doRateLimit = await ratelimiter.check(message.author, commandName, command);
if (doRateLimit) { if (doRateLimit) {
return message.reply({ content: doRateLimit, ephemeral: true }); return message.reply({ content: doRateLimit, ephemeral: true });
@ -434,8 +432,8 @@ export default {
} }
await command.execute(message, args, client) await command.execute(message, args, client)
.then(() => { .then(async () => {
const hasPrallelLimit = ratelimiter.checkParallel(message.author, commandName, command); const hasPrallelLimit = await ratelimiter.checkParallel(message.author, commandName, command);
if (hasPrallelLimit) ratelimiter.removeParallel(commandName); if (hasPrallelLimit) ratelimiter.removeParallel(commandName);
}); });
} }

View file

@ -10,14 +10,16 @@ export default {
removeParallel, removeParallel,
checkParallel, checkParallel,
}; };
function check(user, commandName, commands) { async function check(user, commandName, commands) {
const userID = user.id; const userID = user.id;
const userTag = user.username; const userTag = user.username;
// Don't apply the rate limit to bot owner // Don't apply the rate limit to bot owner
if (userID === ownerId) { if (NODE_ENV !== 'development') {
if (user.id === ownerId) {
return false; return false;
} }
}
if (!ratelimit[userID]) { if (!ratelimit[userID]) {
ratelimit[userID] = {}; ratelimit[userID] = {};
@ -38,13 +40,11 @@ function check(user, commandName, commands) {
const hours = Math.floor(minutes / 60); const hours = Math.floor(minutes / 60);
const dateString = `${hours > 0 ? ` ${Math.floor(hours)} hours` : ''}${minutes > 0 ? ` ${Math.floor(minutes % 60)} minutes` : ''}${seconds > 0 ? ` ${Math.floor(seconds % 60)} seconds` : ''}`; const dateString = `${hours > 0 ? ` ${Math.floor(hours)} hours` : ''}${minutes > 0 ? ` ${Math.floor(minutes % 60)} minutes` : ''}${seconds > 0 ? ` ${Math.floor(seconds % 60)} seconds` : ''}`;
const isOptOut = db.optout.findOne({ where: { userID: userID } }); const isOptOut = await db.optout.findOne({ where: { userID: userID } });
if (isOptOut) {
console.log(`A user is rate limited on \x1b[33m${commandName}\x1b[0m for${dateString}.`); const timestamp = new Date();
} console.log(`[${timestamp.toISOString()}] \x1b[33m${ isOptOut ? 'A user' : `${userTag} (${userID})`}\x1b[0m is rate limited on \x1b[33m${commandName}\x1b[0m for${dateString}.`);
else {
console.log(`\x1b[33m${userTag} (${userID})\x1b[0m is rate limited on \x1b[33m${commandName}\x1b[0m for${dateString}.`);
}
return `You are being rate limited. You can try again in${dateString}.`; return `You are being rate limited. You can try again in${dateString}.`;
} }
} }
@ -58,7 +58,7 @@ function check(user, commandName, commands) {
return false; return false;
} }
function addParallel(commandName) { async function addParallel(commandName) {
// console.log(`[ADD] Adding parallel to ${commandName}`); // console.log(`[ADD] Adding parallel to ${commandName}`);
if (!parallelLimit[commandName]) parallelLimit[commandName] = 0; if (!parallelLimit[commandName]) parallelLimit[commandName] = 0;
@ -69,7 +69,7 @@ function addParallel(commandName) {
parallelLimit[commandName] = prevNumber + 1; parallelLimit[commandName] = prevNumber + 1;
} }
function removeParallel(commandName) { async function removeParallel(commandName) {
// console.log(`[REMOVE] Removing parallel to ${commandName}`); // console.log(`[REMOVE] Removing parallel to ${commandName}`);
// This shouldn't be possible // This shouldn't be possible
@ -83,7 +83,7 @@ function removeParallel(commandName) {
// console.log(`[REMOVE] current parallel limit: ${JSON.stringify(parallelLimit)}`); // console.log(`[REMOVE] current parallel limit: ${JSON.stringify(parallelLimit)}`);
} }
function checkParallel(user, commandName, command) { async function checkParallel(user, commandName, command) {
// Don't apply the rate limit to bot owner // Don't apply the rate limit to bot owner
if (NODE_ENV !== 'development') { if (NODE_ENV !== 'development') {
if (user.id === ownerId) { if (user.id === ownerId) {