Compare commits

..

No commits in common. "2895dc0f851b35c8b9cb65ef1360e79ab2784483" and "5a79b539b24bba5a1062787fe372257cff6dff00" have entirely different histories.

5 changed files with 13 additions and 52 deletions

View file

@ -59,7 +59,3 @@ make sure to run `/setup` or otherwise the verification process wont work.
## Usage ## Usage
run `/help` command to get list of all avaiable commands, or visit the [commands](./commands/) directory to view them. run `/help` command to get list of all avaiable commands, or visit the [commands](./commands/) directory to view them.
## Dashboard (WIP)
I am currently working on a dashboard to manage the bot as well, currently this is in the `dashboard` branch and still work in progress. if you know how to build discord bot dashboards then please feel free to contribute.

View file

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

View file

@ -64,14 +64,6 @@ module.exports = {
? serverSettings.emailDomains.join(", ") ? serverSettings.emailDomains.join(", ")
: "None"; : "None";
const actionItemsChannel = interaction.guild.channels.cache.get(
serverSettings.actionItemsChannelId
);
const actionItemsTargetChannel = interaction.guild.channels.cache.get(
serverSettings.actionItemsTargetChannelId
);
const settingsEmbed = new EmbedBuilder() const settingsEmbed = new EmbedBuilder()
.setColor("#0099ff") .setColor("#0099ff")
.setTitle("🌟 Current Server Settings 🌟") .setTitle("🌟 Current Server Settings 🌟")
@ -93,19 +85,7 @@ module.exports = {
value: serverSettings.verifiedRoleName || "None", value: serverSettings.verifiedRoleName || "None",
inline: true, inline: true,
}, },
{ name: "📧 Email Domains", value: emailDomains, inline: true }, { name: "📧 Email Domains", value: emailDomains, inline: true }
{
name: "📋 Action Items Channel",
value: actionItemsChannel ? `<#${actionItemsChannel.id}>` : "None",
inline: true,
},
{
name: "🎯 Action Items Target Channel",
value: actionItemsTargetChannel
? `<#${actionItemsTargetChannel.id}>`
: "None",
inline: true,
}
) )
.setTimestamp() .setTimestamp()
.setFooter({ .setFooter({

View file

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

View file

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