From 187e6bc1f221f5b4a4cb5a2ebe6ddb66780cc2d8 Mon Sep 17 00:00:00 2001 From: Indrajith K L Date: Thu, 13 May 2021 02:57:20 +0530 Subject: *New Feature * Cowin API integration * Command ```!vaccine 110009 25-05-2021``` --- package-lock.json | 13 +++++++++++++ package.json | 1 + src/commands/vaccine.js | 41 ++++++++++++++++++++++++++++++++++++++++ src/configs/commands.config.json | 5 +++++ 4 files changed, 60 insertions(+) create mode 100644 src/commands/vaccine.js diff --git a/package-lock.json b/package-lock.json index 79185b4..98fd954 100644 --- a/package-lock.json +++ b/package-lock.json @@ -214,6 +214,14 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -527,6 +535,11 @@ "progress": "^2.0.3" } }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", diff --git a/package.json b/package.json index 923ed0b..81c04f0 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "dependencies": { "@discordjs/opus": "^0.4.0", "airtable": "^0.10.1", + "axios": "^0.21.1", "discord.js": "^12.5.1", "dotenv": "^8.2.0", "ffmpeg-static": "^4.2.7", diff --git a/src/commands/vaccine.js b/src/commands/vaccine.js new file mode 100644 index 0000000..e1219f2 --- /dev/null +++ b/src/commands/vaccine.js @@ -0,0 +1,41 @@ +const axios = require('axios').default; +const {MessageEmbed} = require('discord.js'); +const instance = axios.create({ + baseURL: 'https://cdn-api.co-vin.in/api/v2', + headers: { + 'accept': '*/*', + 'accept-language': 'en-US', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36' + } + }); +async function getVaccineAvailablity(message, args) { + const [pincode, date] = args; + const url = `/appointment/sessions/public/findByPin?${new URLSearchParams({ pincode, date })}`; + instance.get(url).then(res => { + if (res.data && res.data.sessions) { + const {sessions} = res.data; + if (sessions && sessions.length > 0 ){ + sessions.forEach(async (session) => { + const vaccineMessage = new MessageEmbed() + .setTitle(`${session.name} : ${session.address}`) + .addField('State', session.state_name, true) + .addField('District', session.district_name, true) + .addField('Vaccine', session.vaccine, true) + .addField('Available Capacity', session.available_capacity, true) + .addField('Available SLots', session.slots.join("/"), true) + .setColor("RANDOM"); + message.channel.send(vaccineMessage); + }) + + }else { + message.channel.send(`No Vaccine Available at place with pincode => ${pincode} on ${date}`) + } + } + }).catch(error => message.channel.send(`Error Fetching Data from Cowin`)); +} + +module.exports = { + execute(client, message, args) { + getVaccineAvailablity(message, args); + } +} \ No newline at end of file diff --git a/src/configs/commands.config.json b/src/configs/commands.config.json index 1865374..282de6e 100644 --- a/src/configs/commands.config.json +++ b/src/configs/commands.config.json @@ -19,6 +19,11 @@ "name": "loadout", "description": "Get CoD Mobile User Loadout", "file": "./commands/loadout.js" + }, + { + "name": "vaccine", + "description": "Get Vaccine Availability by Pincode", + "file": "./commands/vaccine.js" } ] } \ No newline at end of file -- cgit v1.2.3