80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
import { ChatInputCommandInteraction, EmbedBuilder, SlashCommandBuilder } from "discord.js";
|
|
import { MediaWikiClient, SectionObject } 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, siteName);
|
|
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.summary)
|
|
.setFooter({
|
|
text: `Informazioni da ${pageData.origin}`
|
|
});
|
|
|
|
if (pageData.image) {
|
|
pageEmbed.setThumbnail(pageData.image);
|
|
}
|
|
|
|
await interaction.followUp({
|
|
embeds: [pageEmbed]
|
|
});
|
|
} else {
|
|
await interaction.followUp({
|
|
content: `Pagina **${pageName}** non trovata`
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
export default { data, execute };
|