import { SlashCommandBuilder } from "discord.js"; import { DebugBuilder } from "../../modules/debugger.mjs"; import { addSource } from "../../rss-manager/sourceManager.mjs"; const log = new DebugBuilder("server", "discordBot.command.rssAdd"); // Exporting data property that contains the command structure for discord including any params export const data = new SlashCommandBuilder() .setName("rss-add") .setDescription("Add RSS Source") .addStringOption((option) => option .setName("title") .setDescription("The title of the RSS feed") .setRequired(true), ) .addStringOption((option) => option .setName("link") .setDescription("The link to the RSS feed") .setRequired(true), ) .addStringOption((option) => option .setName("category") .setDescription('The category for the RSS feed *("ALL" by default")*') .setRequired(false), ); // Exporting other properties export const example = "/rss-add [title] [https://domain.com/feed.xml] [category]"; // An example of how the command would be run in discord chat, this will be used for the help command export const deferInitialReply = false; // If we the initial reply in discord should be deferred. This gives extra time to respond, however the method of replying is different. /** * Function to give the user auto-reply suggestions * @param {any} nodeIo The nodeIO server for manipulation of sockets * @param {any} interaction The interaction object */ // TODO - Setup autocorrect for the category /* export async function autocomplete(nodeIo, interaction) { const focusedValue = interaction.options.getFocused(); const choices = []; const filtered = choices.filter(choice => choice.name.startsWith(focusedValue)); log.DEBUG(focusedValue, choices, filtered); await interaction.respond(filtered); } */ /** * The function to run when the command is called by a discord user * @param {any} nodeIo The nodeIO server for manipulation of sockets * @param {any} interaction The interaction object */ export const execute = async (nodeIo, interaction) => { try { var title = interaction.options.getString("title"); var link = interaction.options.getString("link"); var category = interaction.options.getString("category"); if (!category) category = "ALL"; await interaction.reply( `Adding ${title} to the list of RSS sources, please wait...`, ); await addSource( title, link, category, interaction.guildId, interaction.channelId, (err, result) => { log.DEBUG("Result from adding entry", result); if (result) { interaction.editReply( `Successfully added ${title} to the list of RSS sources`, ); } else { interaction.editReply( `${title} already exists in the list of RSS sources`, ); } }, ); } catch (err) { log.ERROR(err); await interaction.editReply(err.toString()); } };