All checks were successful
DRB Tests / drb_mocha_tests (pull_request) Successful in 31s
- Updated rss discord command name scheme - Implemented new sourceManager for handling feed sources - Added wrappers to delete/get feed sources by title
58 lines
2.4 KiB
JavaScript
58 lines
2.4 KiB
JavaScript
|
|
import { SlashCommandBuilder } from 'discord.js';
|
|
import { DebugBuilder } from "../../modules/debugger.mjs";
|
|
import { removeSource } from '../../rss-manager/sourceManager.mjs'
|
|
import { getAllFeeds, deleteFeedByTitle } from '../../modules/mongo-wrappers/mongoFeedsWrappers.mjs'
|
|
const log = new DebugBuilder("server", "discordBot.command.rssRemove");
|
|
|
|
// Exporting data property that contains the command structure for discord including any params
|
|
export const data = new SlashCommandBuilder()
|
|
.setName('rss-remove')
|
|
.setDescription('Add RSS Source')
|
|
.addStringOption(option =>
|
|
option.setName('title')
|
|
.setDescription('The title of the RSS feed')
|
|
.setRequired(true)
|
|
.setAutocomplete(true))
|
|
|
|
// Exporting other properties
|
|
export const example = "/rss-remove [title]"; // 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
|
|
*/
|
|
|
|
export async function autocomplete(nodeIo, interaction) {
|
|
const focusedValue = interaction.options.getFocused();
|
|
const choices = await getAllFeeds() ?? [];
|
|
log.INFO("RSS Remove Choices:", choices);
|
|
const filtered = choices.filter(choice => choice.title.startsWith(focusedValue));
|
|
log.DEBUG(focusedValue, choices, filtered);
|
|
await interaction.respond(filtered.map(choice => ({ name: choice.title, value: choice.title })));
|
|
}
|
|
|
|
/**
|
|
* 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');
|
|
interaction.reply(`Removing ${title} from the list of RSS sources, please wait...`);
|
|
|
|
const results = await deleteFeedByTitle(title);
|
|
if (!results) {
|
|
log.WARN(`Failed to remove source: ${title}`);
|
|
interaction.editReply(`Failed to remove source: '${title}'`);
|
|
return;
|
|
}
|
|
interaction.editReply(`${title} was successfully removed from the RSS sources.`)
|
|
} catch (err) {
|
|
log.ERROR(err)
|
|
interaction.editReply(err.toString());
|
|
}
|
|
} |