diff --git a/commands/freeday.js b/commands/freeday.js new file mode 100644 index 0000000..d6d2cdc --- /dev/null +++ b/commands/freeday.js @@ -0,0 +1,140 @@ +//https://date.nager.at/api/v3/IsTodayPublicHoliday/pl?offset=0 & https://date.nager.at/api/v3/NextPublicHolidays/country_two_letter_code +function returnFreeDay(country) { + //if 200, return true + //if 204, return false + //if 400, return 'Invalid country code' + var url = `https://date.nager.at/api/v3/IsTodayPublicHoliday/${country}`; + return fetch(url) + .then(response => { + if (response.status === 200) { + return true; + } + else if (response.status === 204) { + return false; + } + else { + return 'Invalid country code'; + } + }); +} +function returnNextFreeDay(country) { + /* + [ + { + "date": "2024-05-30", + "localName": "Boże Ciało", + "name": "Corpus Christi", + "countryCode": "PL", + "fixed": false, + "global": true, + "counties": null, + "launchYear": null, + "types": [ + "Public" + ] + }, + { + "date": "2024-08-15", + "localName": "Wniebowzięcie Najświętszej Maryi Panny", + "name": "Assumption Day", + "countryCode": "PL", + "fixed": false, + "global": true, + "counties": null, + "launchYear": null, + "types": [ + "Public" + ] + }, + {*/ + //show only 3 next holidays + var url = `https://date.nager.at/api/v3/NextPublicHolidays/${country}`; + return fetch(url) + .then(response => response.json()) + .then(data => data); +} + +module.exports = { + name: 'freeday', + description: 'Check if today is a public holiday in a specific country or get the next public holidays', + help: 'Check if today is a public holiday in a specific country or get the next public holidays', + options: [ + { + name: 'country', + description: 'Country to check for public holidays, two letter code e.g. US, GB, CA, DE, FR, etc.', + type: 3, + required: true, + } + ], + slash: true, + text: true, + admin: false, + requireKick: false, + requireBan: false, + canBeUsedInDm: true, + premium: false, + contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'], + integration_types: [0, 1], + executeSlash: async interaction => { + try { + var toReturn = ''; + const country = interaction.options.get('country').value.toUpperCase(); + const nextFreeDay = await returnNextFreeDay(country); + const isFreeDay = await returnFreeDay(country); + if (nextFreeDay.length === 0) { + interaction.reply('Invalid country code or no public holidays for the specified country.'); + } + else + { + var nextFreeDayString = 'Date \tName\n'; + nextFreeDay.slice(0, 3).forEach(holiday => { + nextFreeDayString += `${holiday.date} \t${holiday.name}\n`; + }); + toReturn += nextFreeDayString; + } + if (isFreeDay === true) { + toReturn += 'Today is a public holiday in the specified country.'; + } + else if (isFreeDay === false) { + toReturn += 'Today is not a public holiday in the specified country.'; + } + else { + toReturn += isFreeDay; + } + interaction.reply(toReturn); + } catch (error) { + interaction.reply('Invalid country code or no public holidays for the specified country.'); + } + }, + execute: async (message, args) => { + try { + const country = args[0].toUpperCase(); + const nextFreeDay = await returnNextFreeDay(country); + if (nextFreeDay.length === 0) { + message.channel.send('Invalid country code or no public holidays for the specified country.'); + } + else + { + var nextFreeDayString = 'Date \tName\n'; + nextFreeDay.slice(0, 3).forEach(holiday => { + nextFreeDayString += `${holiday.date} \t${holiday.name}\n`; + }); + message.channel.send(nextFreeDayString); + } + const isFreeDay = await returnFreeDay(country); + if (isFreeDay === true) { + message.channel.send('Today is a public holiday in the specified country.'); + } + else if (isFreeDay === false) { + message.channel.send('Today is not a public holiday in the specified country.'); + } + else { + message.channel.send(isFreeDay); + + } + + } catch (error) { + message.channel.send('Invalid country code or no public holidays for the specified country.'); + } + } +}; \ No newline at end of file diff --git a/commands/longweekends.js b/commands/longweekends.js index 7c606e9..8962e86 100644 --- a/commands/longweekends.js +++ b/commands/longweekends.js @@ -1,4 +1,4 @@ -//https://date.nager.at/api/v3/LongWeekend/year/country_two_letter_code +//https://date.nager.at/api/v3/LongWeekend/year/country_two_letter_code function returnLongWeekends(year, country) { //check if year is -1 or 0 or +1 var currentYear = new Date().getFullYear();