import { ChatInputCommandInteraction, EmbedBuilder, SlashCommandBuilder } from "discord.js"; import { MediaWikiClient } from '../mediawiki'; const pageSources = { 'cittadeldank': { url: 'https://wiki.cittadeldank.it', name: 'Città del Dank' } } const pageSourcesAuto = [ 'cittadeldank' ]; const data = new SlashCommandBuilder() .setName('wiki') .setDescription('Mostra la pagina wiki di un argomento') .addStringOption(o => o.setName('p') .setDescription('Il nome della pagina') .setRequired(true) ) .addStringOption(o => o.setName('source') .setDescription('Dove guardare') .addChoices([ {name: 'Città del Dank', value: 'cittadeldank'}, {name: 'Automatico', value: 'auto'} ]) .setRequired(false) ); async function fetchPageFromSite(siteId: string, pageName: string) { const { name: siteName, url: siteUrl } = pageSources[siteId]; const mwClient = new MediaWikiClient(siteUrl); const pageData = await mwClient.getPage(pageName); return pageData; } async function execute (interaction: ChatInputCommandInteraction) { await interaction.deferReply(); let siteChoice = interaction.options.getString('source') ?? 'auto'; const pageName = interaction.options.getString('p'); let pageData = null; if (siteChoice === 'auto') { for (let site of pageSourcesAuto) { pageData = await fetchPageFromSite(site, pageName); if (pageData) break; } } else { pageData = await fetchPageFromSite(siteChoice, pageName); } if (pageData) { const pageEmbed = new EmbedBuilder() .setTitle(pageData.title) .setURL(pageData.url) .setDescription(pageData.content) .setFooter({ text: `Informazioni da ${pageData.origin}` }); await interaction.followUp({ embeds: [pageEmbed] }); } else { await interaction.followUp({ content: `Pagina **${pageName}** non trovata` }); } } export default { data, execute };