Skip to content

Commit

Permalink
monthly reset chore
Browse files Browse the repository at this point in the history
  • Loading branch information
bramses committed Aug 26, 2023
1 parent 7df6c21 commit cc7c45c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
3 changes: 3 additions & 0 deletions chores/monthly_reset.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { resetCommandInvocationsChoreWorkflow } from "../invocation.js";

resetCommandInvocationsChoreWorkflow();
28 changes: 23 additions & 5 deletions invocation.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ const addUser = (interaction, invocations) => {
invocations[userName].lifetimeInvocations = 0;
invocations[userName].commandInvocations = {}
invocations[userName].isMember = false;
invocations[userName].monthlyReset = new Date().toISOString().slice(0, 7);
invocations[userName].isComped = false;
invocations[userName].dayOfSignup = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
}

return invocations;
Expand Down Expand Up @@ -51,18 +52,28 @@ const saveInvocations = (invocations) => {
fs.writeFileSync('./invocations.json', JSON.stringify(invocations, null, 2));
}

// if user monthlyReset is today, reset commandInvocations
// if 28 days have passed since user signup date, reset commandInvocations and reset dayOfSignup to today
const resetCommandInvocations = (invocations) => {
const today = new Date().toISOString().slice(0, 7);
const today = new Date().toISOString().slice(0, 10);
const dayReset = 28;
for (const userName in invocations) {
if (invocations[userName].monthlyReset === today) {
const dayOfSignup = invocations[userName].dayOfSignup;
const daysSinceSignup = Math.floor((Date.parse(today) - Date.parse(dayOfSignup)) / 86400000);
if (daysSinceSignup >= dayReset) {
invocations[userName].commandInvocations = {};
invocations[userName].dayOfSignup = today;
}
}

return invocations;
}

export const resetCommandInvocationsChoreWorkflow = () => {
let invocations = loadInvocations();
invocations = resetCommandInvocations(invocations);
saveInvocations(invocations);
}

// load invocations.json
const loadInvocations = () => {
try {
Expand Down Expand Up @@ -104,12 +115,19 @@ export const preWorkflow = async (interaction) => {
}

const checkCommandLimits = async (interaction, invocations) => {


const commandLimits = loadCommandLimits();
const userName = getUserName(interaction);
const userInvocations = invocations[userName];
const isMember = userInvocations.isMember;
const isComped = userInvocations.isComped;
const commandName = interaction.commandName;

if (isComped) {
return true;
}

if (commandName in commandLimits) {
const commandLimit = commandLimits[commandName][isMember ? 'member' : 'free'];
const commandInvocations = userInvocations.commandInvocations[commandName];
Expand Down

0 comments on commit cc7c45c

Please sign in to comment.