action items: make target channel be part of server settings model

This commit is contained in:
Ayden Jahola 2024-10-29 09:12:44 +00:00
parent 5a79b539b2
commit 618332cfcd
No known key found for this signature in database
GPG key ID: 71DD90AE4AE92742
3 changed files with 27 additions and 12 deletions

View file

@ -29,11 +29,11 @@ module.exports = {
});
}
const actionItemChannelId = serverSettings.actionItemsChannelId;
const actionItemsChannelId = serverSettings.actionItemsChannelId;
if (interaction.channelId !== actionItemChannelId) {
if (interaction.channelId !== actionItemsChannelId) {
return interaction.reply({
content: `This command can only be used in the <#${actionItemChannelId}> channel.`,
content: `This command can only be used in the <#${actionItemsChannelId}> channel.`,
ephemeral: true,
});
}
@ -75,7 +75,7 @@ module.exports = {
userTaskMap.get(user).push(task);
}
// Generate initial task list message
// initial message content
let messageContent = `📝 **Action Items:**\n\n`;
userTaskMap.forEach((tasks, user) => {
messageContent += `👤 **Assigned to:** ${user}\n`;
@ -85,8 +85,7 @@ module.exports = {
messageContent += "\n";
});
// Fetch the specific channel to send the action items message
const targetChannelId = "1164670538006933505";
const targetChannelId = serverSettings.actionItemsTargetChannelId;
const targetChannel = await interaction.guild.channels.fetch(
targetChannelId
);
@ -97,14 +96,12 @@ module.exports = {
});
}
// Send the action items message to the specified channel
const actionMessage = await targetChannel.send({
content: messageContent + `✅ React with a checkmark to complete tasks!`,
});
await actionMessage.react("✅");
// Create reaction collector
const filter = (reaction, user) => {
return reaction.emoji.name === "✅" && userTaskMap.has(user);
};
@ -122,7 +119,6 @@ module.exports = {
const nextTaskIndex = completedTasks.size;
completedTasks.add(nextTaskIndex);
// Update message content
let updatedMessageContent = `📝 **Action Items:**\n\n`;
userTaskMap.forEach((userTasks, assignedUser) => {
updatedMessageContent += `👤 **Assigned to:** ${assignedUser}\n`;
@ -132,14 +128,12 @@ module.exports = {
updatedMessageContent += "\n";
});
// Edit the message to reflect the completion
await actionMessage.edit({
content:
updatedMessageContent +
`✅ React with a checkmark to complete tasks!`,
});
// Notify the user about the completion
await interaction.followUp({
content: `${user} has completed task **${tasks[nextTaskIndex]}**!`,
ephemeral: true,

View file

@ -42,6 +42,14 @@ module.exports = {
"Select the allowed channel for action items. (Optional)"
)
.setRequired(false)
)
.addChannelOption((option) =>
option
.setName("actionitemstargetchannel")
.setDescription(
"Select the target channel where action items are going to be sent. (Optional)"
)
.setRequired(false)
),
async execute(interaction) {
@ -67,6 +75,9 @@ module.exports = {
.map((domain) => domain.trim());
const actionitemschannel =
interaction.options.getChannel("actionitemschannel");
const actionitemstargetchannel = interaction.options.getChannel(
"actionitemstargetchannel"
);
try {
// Store the channel IDs instead of names
@ -82,6 +93,9 @@ module.exports = {
actionItemsChannelId: actionitemschannel
? actionitemschannel.id
: null,
actionItemsTargetChannelId: actionitemstargetchannel
? actionitemstargetchannel.id
: null,
},
{ upsert: true, new: true }
);
@ -95,7 +109,13 @@ module.exports = {
**Allowed Email Domains**: ${emailDomains.join(", ")}\n
**Action Item Channel**: ${
actionitemschannel ? `<#${actionitemschannel.id}>` : "None"
}`,
}\n
**Action Item Target Channel**: ${
actionitemstargetchannel
? `<#${actionitemstargetchannel.id}>`
: "None"
}
`,
ephemeral: true,
});
} catch (error) {

View file

@ -8,6 +8,7 @@ const ServerSettingsSchema = new mongoose.Schema({
generalChannelId: { type: String, required: false },
emailDomains: { type: [String], required: false },
actionItemsChannelId: { type: String, required: false },
actionItemsTargetChannelId: { type: String, required: false },
});
const ServerSettings = mongoose.model("ServerSettings", ServerSettingsSchema);