Files
revanced-bots/apps/bot-discord/src/utils/trainAISelectMenu.js

78 lines
2.0 KiB
JavaScript

import {
ActionRowBuilder,
StringSelectMenuBuilder,
ComponentType
} from 'discord.js';
export default async function trainAISelectMenu(
interaction,
config,
helper
) {
const options = [];
for (const { label } of config.responses) {
options.push({
label: label,
description: `The ${label} label.`,
value: label.toLowerCase()
});
}
const row = new ActionRowBuilder().addComponents(
new StringSelectMenuBuilder()
.setCustomId('select')
.setPlaceholder('Nothing selected')
.addOptions(options)
);
let interactedMessage;
if (!interaction.isMessageContextMenuCommand()) {
try {
const channel = await interaction.client.channels.fetch(interaction.message.reference.channelId);
const message = await channel.messages.fetch(interaction.message.reference.messageId);
interactedMessage = message.content.toLowerCase();
} catch (e) {
interaction.reply({
content: 'The message that you wanted to train the bot with was deleted.',
ephemeral: true
})
}
} else {
interactedMessage = interaction.targetMessage.content.toLowerCase()
}
const reply = await interaction.reply({
content: 'Please select the corresponding label to train the bot.',
components: [row],
ephemeral: true
});
const collector = reply.createMessageComponentCollector({
componentType: ComponentType.StringSelect,
time: 15000
});
const voteId = interaction.targetMessage ? interaction.targetMessage.id :
interaction.message.reference.messageId;
collector.on('collect', (i) => {
i.message.edit({ content: 'Sent training data to server.', components: [] });
const existingVote = interaction.client.trainingVotes.get(voteId);
if (existingVote) clearTimeout(existingVote);
interaction.client.trainingVotes.set(voteId,
setTimeout(() => {
helper.sendTrainData(interactedMessage, i.values[0]);
if (!interaction.isMessageContextMenuCommand()) {
interaction.message.edit({ components: [] });
}
interaction.client.trainingVotes.delete(voteId);
}, 10_000)
);
});
}