mirror of
				https://github.com/aydenjahola/discord-multipurpose-bot.git
				synced 2025-11-04 00:01:41 +00:00 
			
		
		
		
	action items: make target channel be part of server settings model
This commit is contained in:
		
							parent
							
								
									5a79b539b2
								
							
						
					
					
						commit
						618332cfcd
					
				
					 3 changed files with 27 additions and 12 deletions
				
			
		| 
						 | 
					@ -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({
 | 
					      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,
 | 
					        ephemeral: true,
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@ module.exports = {
 | 
				
			||||||
      userTaskMap.get(user).push(task);
 | 
					      userTaskMap.get(user).push(task);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Generate initial task list message
 | 
					    // initial message content
 | 
				
			||||||
    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,8 +85,7 @@ module.exports = {
 | 
				
			||||||
      messageContent += "\n";
 | 
					      messageContent += "\n";
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Fetch the specific channel to send the action items message
 | 
					    const targetChannelId = serverSettings.actionItemsTargetChannelId;
 | 
				
			||||||
    const targetChannelId = "1164670538006933505";
 | 
					 | 
				
			||||||
    const targetChannel = await interaction.guild.channels.fetch(
 | 
					    const targetChannel = await interaction.guild.channels.fetch(
 | 
				
			||||||
      targetChannelId
 | 
					      targetChannelId
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
| 
						 | 
					@ -97,14 +96,12 @@ 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);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
| 
						 | 
					@ -122,7 +119,6 @@ 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`;
 | 
				
			||||||
| 
						 | 
					@ -132,14 +128,12 @@ 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,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,14 @@ 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) {
 | 
				
			||||||
| 
						 | 
					@ -67,6 +75,9 @@ 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
 | 
				
			||||||
| 
						 | 
					@ -82,6 +93,9 @@ 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 }
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
| 
						 | 
					@ -95,7 +109,13 @@ 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) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ 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);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue