Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
FROM node:23-bullseye-slim AS base
WORKDIR /usr/src/application

# Clone source files
COPY --chown=node:node commands/ commands/
COPY --chown=node:node src/ src/
COPY --chown=node:node deploy-commands.js .
COPY --chown=node:node index.js .
COPY --chown=node:node package.json .
COPY --chown=node:node entrypoint.sh /entrypoint.sh
#COPY --chown=node:node .env .

ENV OAB_TOKEN=null
ENV OAB_GUILD=null
ENV OAB_CLIENT=null

# Setting up Yarn
RUN yarn set version stable

FROM base AS builder
RUN yarn install
RUN yarn node ./deploy-commands.js

FROM base AS runner
RUN yarn workspaces focus --all --production
RUN chmod +x /entrypoint.sh
RUN chown node:node /usr/src/application

USER node
ENTRYPOINT ["/entrypoint.sh"]
80 changes: 34 additions & 46 deletions commands/utility/addjob.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,52 +6,38 @@ module.exports = {
data: new SlashCommandBuilder()
.setName('addjob')
.setDescription('Adds job to CSV file with the chosen values.')
.addStringOption(option =>
option
.setName('scene_id')
.setDescription('Scene ID')
.setRequired(true))
.addStringOption(option =>
option
.setName('description')
.setDescription('Description')
.setRequired(true))
.addStringOption(option =>
option
.setName('attachments')
.setDescription('Attached files')
.setRequired(true))
.addStringOption(option =>
option
.setName('attributes')
.setDescription('Attributes')
.setRequired(true))
.addStringOption(option =>
option
.setName('required_roles')
.setDescription('Required roles')
.setRequired(true))
.addStringOption(option =>
option
.setName('deadline')
.setDescription('Deadline')
.setRequired(true))
.addStringOption(option =>
.addStringOption((option) => option.setName('scene_id').setDescription('Scene ID').setRequired(true))
.addStringOption((option) =>
option.setName('description').setDescription('Description').setRequired(true)
)
.addStringOption((option) =>
option.setName('attachments').setDescription('Attached files').setRequired(true)
)
.addStringOption((option) =>
option.setName('attributes').setDescription('Attributes').setRequired(true)
)
.addStringOption((option) =>
option.setName('required_roles').setDescription('Required roles').setRequired(true)
)
.addStringOption((option) => option.setName('deadline').setDescription('Deadline').setRequired(true))
.addStringOption((option) =>
option
.setName('status')
.setDescription('Status')
.setRequired(true)
.addChoices(Job.getAvailableStatuses()))
.setDefaultMemberPermissions(PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel),
.addChoices(Job.getAvailableStatuses())
)
.setDefaultMemberPermissions(
PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel
),

async execute(interaction) {

// Pipe all inputs through Job class so the setters can validate the input
const pipe_job = new Job(
interaction.options.getString('scene_id'),
Expand All @@ -60,14 +46,16 @@ module.exports = {
interaction.options.getString('attributes'),
interaction.options.getString('required_roles'),
interaction.options.getString('deadline'),
interaction.options.getString('status'));
interaction.options.getString('status')
);

if (fs.existsSync('jobs.v0.csv')) {
fs.appendFileSync('jobs.v0.csv', pipe_job.getCSVString().concat(',N/A,N/A\n'));
}
else {

fs.appendFileSync('jobs.v0.csv', 'SceneId,Description,Attachments,Attributes,RequiredRoles,Deadline,Status,Assignee,Work\n');
} else {
fs.appendFileSync(
'jobs.v0.csv',
'SceneId,Description,Attachments,Attributes,RequiredRoles,Deadline,Status,Assignee,Work\n'
);
fs.appendFileSync('jobs.v0.csv', pipe_job.getCSVString().concat(',N/A,N/A\n'));
}

Expand All @@ -81,4 +69,4 @@ module.exports = {
* Deadline: ${pipe_job.getDeadline()}
* Status: ${pipe_job.getStatus()}`);
},
};
};
26 changes: 16 additions & 10 deletions commands/utility/alljobs.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ module.exports = {
data: new SlashCommandBuilder()
.setName('alljobs')
.setDescription('Displays all jobs.')
.setDefaultMemberPermissions(PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel),
.setDefaultMemberPermissions(
PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel
),

async execute(interaction) {
const jobs = parse(fs.readFileSync('jobs.v0.csv'));
Expand All @@ -23,14 +25,18 @@ module.exports = {
// Are we at the header?
if (i[0] == 'SceneId') {
// Create formatted header
table = table.concat('__Scene ID, Description, Attachments, Attributes, Required roles, Deadline, Status, Assignee, Work__\n');
table = table.concat(
'__Scene ID, Description, Attachments, Attributes, Required roles, Deadline, Status, Assignee, Work__\n'
);
continue;
}

// Create row
table = table.concat(`${i[0]}, "${i[1]}", ${i[2]}, ${i[3]}, ${i[4]}, ${i[5]}, ${i[6]}, ${i[7]}, ${i[8]}\n`);
table = table.concat(
`${i[0]}, "${i[1]}", ${i[2]}, ${i[3]}, ${i[4]}, ${i[5]}, ${i[6]}, ${i[7]}, ${i[8]}\n`
);
}

interaction.reply(table);
},
};
};
26 changes: 13 additions & 13 deletions commands/utility/deletejob.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ module.exports = {
data: new SlashCommandBuilder()
.setName('deletejob')
.setDescription('Deletes the specified job.')
.addStringOption(option =>
option
.setName('scene_id')
.setDescription('Scene ID whose job to delete')
.setRequired(true))
.setDefaultMemberPermissions(PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel),
.addStringOption((option) =>
option.setName('scene_id').setDescription('Scene ID whose job to delete').setRequired(true)
)
.setDefaultMemberPermissions(
PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel
),

async execute(interaction) {
const scene_id = interaction.options.getString('scene_id').toUpperCase();
Expand All @@ -38,4 +38,4 @@ module.exports = {

interaction.reply(`The job for scene ${scene_id} has been deleted.`);
},
};
};
24 changes: 11 additions & 13 deletions commands/utility/displayjob.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,16 @@ module.exports = {
data: new SlashCommandBuilder()
.setName('displayjob')
.setDescription('Displays the specified job.')
.addStringOption(option =>
option
.setName('scene_id')
.setDescription('Scene ID')
.setRequired(true))
.setDefaultMemberPermissions(PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel),
.addStringOption((option) => option.setName('scene_id').setDescription('Scene ID').setRequired(true))
.setDefaultMemberPermissions(
PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel
),

async execute(interaction) {
const scene_id = interaction.options.getString('scene_id');
Expand All @@ -39,4 +37,4 @@ module.exports = {
}
}
},
};
};
70 changes: 26 additions & 44 deletions commands/utility/editjob.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,48 +3,30 @@ const { parse } = require('csv/sync');
const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
const Job = require('../../src/jobsManager.js');


module.exports = {
data: new SlashCommandBuilder()
.setName('editjob')
.setDescription('Edits the specified job.')
.addStringOption(option =>
option
.setName('scene_id')
.setDescription('Scene ID whose job to edit')
.setRequired(true))
.addStringOption(option =>
option
.setName('description')
.setDescription('Description'))
.addStringOption(option =>
option
.setName('attachments')
.setDescription('Attached files'))
.addStringOption(option =>
option
.setName('attributes')
.setDescription('Attributes'))
.addStringOption(option =>
option
.setName('required_roles')
.setDescription('Required roles'))
.addStringOption(option =>
option
.setName('deadline')
.setDescription('Deadline'))
.addStringOption(option =>
option
.setName('status')
.setDescription('Status')
.addChoices(Job.getAvailableStatuses()))
.setDefaultMemberPermissions(PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel),
.addStringOption((option) =>
option.setName('scene_id').setDescription('Scene ID whose job to edit').setRequired(true)
)
.addStringOption((option) => option.setName('description').setDescription('Description'))
.addStringOption((option) => option.setName('attachments').setDescription('Attached files'))
.addStringOption((option) => option.setName('attributes').setDescription('Attributes'))
.addStringOption((option) => option.setName('required_roles').setDescription('Required roles'))
.addStringOption((option) => option.setName('deadline').setDescription('Deadline'))
.addStringOption((option) =>
option.setName('status').setDescription('Status').addChoices(Job.getAvailableStatuses())
)
.setDefaultMemberPermissions(
PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel
),

async execute(interaction) {
const scene_id = interaction.options.getString('scene_id').toUpperCase();
Expand Down Expand Up @@ -76,11 +58,9 @@ module.exports = {
for (let i = 0; i < current_scene.length; i++) {
if (new_scene[i] === null || new_scene[i] === undefined) {
scene.push(current_scene[i]);
}
else if (i === 0) {
} else if (i === 0) {
scene.push(scene_id);
}
else if (new_scene[i] !== current_scene[i]) {
} else if (new_scene[i] !== current_scene[i]) {
scene.push(new_scene[i]);
}
}
Expand All @@ -90,12 +70,14 @@ module.exports = {
if (scene_id === jobs[i][0]) {
let current_jobs = fs.readFileSync('jobs.v0.csv').toString().split('\n');
current_jobs.splice(i, 1);
current_jobs = current_jobs.concat(`${scene[0]},"${scene[1]}",${scene[2]},${scene[3]},${scene[4]},${scene[5]},${scene[6]},${scene[7]},${scene[8]}`);
current_jobs = current_jobs.concat(
`${scene[0]},"${scene[1]}",${scene[2]},${scene[3]},${scene[4]},${scene[5]},${scene[6]},${scene[7]},${scene[8]}`
);
const new_jobs = current_jobs.join('\n');

fs.writeFileSync('jobs.v0.csv', new_jobs);
}
}
}
},
};
};
24 changes: 11 additions & 13 deletions commands/utility/getjob.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,16 @@ module.exports = {
data: new SlashCommandBuilder()
.setName('getjob')
.setDescription('Gets you the specified job.')
.addStringOption(option =>
option
.setName('scene_id')
.setDescription('Scene ID')
.setRequired(true))
.setDefaultMemberPermissions(PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel),
.addStringOption((option) => option.setName('scene_id').setDescription('Scene ID').setRequired(true))
.setDefaultMemberPermissions(
PermissionFlagsBits.SendMessages |
PermissionFlagsBits.AttachFiles |
PermissionFlagsBits.ReadMessageHistory |
PermissionFlagsBits.AddReactions |
PermissionFlagsBits.UseApplicationCommands |
PermissionFlagsBits.SendPolls |
PermissionFlagsBits.ViewChannel
),

async execute(interaction) {
const scene_id = interaction.options.getString('scene_id');
Expand All @@ -43,4 +41,4 @@ If you find yourself unable to meet the deadline, send the following message: "I
}
}
},
};
};
Loading