diff --git a/commands/npm.js b/commands/npm.js new file mode 100644 index 0000000..837bfb5 --- /dev/null +++ b/commands/npm.js @@ -0,0 +1,39 @@ +var libFlayer = require("../libFlayer.js"); + +module.exports = { + name: 'npm', + description: 'NPM', + async execute(message, args) { + try { + if (args.length < 1) { + message.reply(`Please use in !npm [npm-package] - ex !npm axios`); + return; + } + var question = encodeURIComponent(args.join(" ")); + + var returnData = await libFlayer.getNPM(question); + if (returnData.length > 1) { + let npmList = ``; + message.reply(`Please use exact name:`); + returnData.forEach(npmResult => { + npmList += `- ${npmResult.name}\n`; + }); + message.reply(`Use !npm with exact name to match: \n` + npmList); + } else { + message.reply( + ` + Name: **${returnData[0].name}** - *${returnData[0].description}* + Version: **${returnData[0].version}** + Date: **${returnData[0].date}** + NPM: **${returnData[0].links.npm}** + Homepage: **${returnData[0].links.homepage}** + ` + ); + } + + + } catch (err) { + message.reply(err.toString()); + } + } +}; \ No newline at end of file diff --git a/index.js b/index.js index e286c47..e2e300c 100644 --- a/index.js +++ b/index.js @@ -1,14 +1,28 @@ const fs = require('fs'); const path = require('node:path'); -const { prefix } = require('./config.json'); +const { + prefix +} = require('./config.json'); require('dotenv').config(); token = process.env.TOKEN; -const { Routes } = require('discord-api-types/v9'); -const { quotes } = require('./quotes.json'); +const { + Routes +} = require('discord-api-types/v9'); +const { + quotes +} = require('./quotes.json'); //const Discord = require('discord.js');Client, Collection, Intents -const { Client, Collection, Intents, MessageActionRow, MessageButton } = require('discord.js'); +const { + Client, + Collection, + Intents, + MessageActionRow, + MessageButton +} = require('discord.js'); //const client = new Discord.Client(); -const client = new Client({ intents: [Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILDS] }); +const client = new Client({ + intents: [Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILDS] +}); const PORT = process.env.PORT || 3000; const express = require("express"); const server = express(); @@ -18,12 +32,12 @@ var libTrivia = require("./libTrivia.js"); let linkFlayerMap = []; -server.all("/",(req, res) => { +server.all("/", (req, res) => { var htmlOutput = "LinkFlayer Bot is Ready - Sources loading
"; var sources = libFlayer.getSources(); sources.forEach(source => { - htmlOutput +=` + htmlOutput += `
Title: ${source.title}
@@ -36,21 +50,21 @@ server.all("/",(req, res) => {
- ` - }); - res.send(htmlOutput); + ` + }); + res.send(htmlOutput); }); function keepAlive() { - server.listen(PORT, () => { + server.listen(PORT, () => { console.log("Keep Alive Server Running"); try { - libFlayer.loadFeeds(); - libFlayer.feedArray = libFlayer.getFeeds(); - } catch (error) { - console.log(error); - } + libFlayer.loadFeeds(); + libFlayer.feedArray = libFlayer.getFeeds(); + } catch (error) { + console.log(error); + } }) } @@ -77,7 +91,7 @@ for (const file of commandFiles) { } */ client.on('ready', () => { - console.log(`Logged in as ${client.user.tag}!`); + console.log(`Logged in as ${client.user.tag}!`); }); client.on('interactionCreate', async interaction => { @@ -85,8 +99,11 @@ client.on('interactionCreate', async interaction => { if (!interaction.isSelectMenu()) return; let aaa = interaction.values[0]; - await interaction.channel.send({ content: 'You picked something', ephemeral: true }); - + await interaction.channel.send({ + content: 'You picked something', + ephemeral: true + }); + try { //await command.execute(interaction); } catch (error) { @@ -113,13 +130,9 @@ client.on('message', message => { console.log("Link Flayer Bot Activating"); keepAlive(); -client.login(token); //Load Client Discord Token +client.login(token); //Load Client Discord Token try { -libFlayer.loadFeeds(); + libFlayer.loadFeeds(); } catch (error) { console.log(error); - } - - - - +} \ No newline at end of file diff --git a/libFlayer.js b/libFlayer.js index e5ec49f..dc74c55 100644 --- a/libFlayer.js +++ b/libFlayer.js @@ -124,8 +124,8 @@ exports.loadFeeds = function () { base(userTable) .select().firstPage(function (err, records) { - try { - records.forEach(function (record) { + records.forEach(function (record) { + try { console.log('Retrieved title: ', record.get('title')); console.log('Retrieved link:', record.get('link')); console.log('Retrieved category:', record.get('category')); @@ -144,6 +144,7 @@ exports.loadFeeds = function () { foundMatch = true; } }); + if (!foundMatch) { feeds.push(feedData); } @@ -159,48 +160,47 @@ exports.loadFeeds = function () { linkFlayerCats.push(record.get('category')); } - - }); - } catch (error) { - console.log(error); - } - + } catch (error) { + console.log(error); + } + }); feeds.forEach(feedBlock => { (async () => { + try { + const feed = parser.parseURL(feedBlock.link, function (err, feed) { + if (err) { + console.log(err + " " + feedBlock.link); + //return; + } - const feed = parser.parseURL(feedBlock.link, function (err, feed) { - if (err) { - console.log(err + " " + feedBlock.link); - //return; - } + if (feed != undefined && feed.items != undefined) { + feed.items.forEach(item => { + var foundFeed = false; + linkFlayerMap.forEach(linkFlay => { + if (linkFlay.link == item.link) { + foundFeed = true; + } + }); - if (feed != undefined && feed.items != undefined) { - feed.items.forEach(item => { - var foundFeed = false; - linkFlayerMap.forEach(linkFlay => { - if (linkFlay.link == item.link) { - foundFeed = true; + if (!foundFeed) { + var linkData = { + title: `${unescape(item.title)}`, + link: `${unescape(item.link)}`, + category: `${unescape(feedBlock.category)}` + } + linkFlayerMap.push(linkData); } + }); + } else { + console.log('error parsing :' + feedBlock.link); + } - if (!foundFeed) { - var linkData = { - title: `${unescape(item.title)}`, - link: `${unescape(item.link)}`, - category: `${unescape(feedBlock.category)}` - } - linkFlayerMap.push(linkData); - } - - }); - } - else { - console.log('error parsing :' + feedBlock.link); - } - - }) - + }) + } catch (error) { + console.log(error); + } })().then(); }); return; @@ -219,7 +219,7 @@ exports.weatherAlert = async function (state) { await axios.get(answerURL) .then(response => { - response.data.features.forEach(feature => { + response.data.features.forEach(feature => { answerData.push(feature); }) @@ -290,6 +290,30 @@ exports.getSlang = async function (question) { return slangData; } +exports.getNPM = async function (question) { + + var answerURL = `https://www.npmjs.com/search/suggestions?q=${question}`; + console.log(answerURL); + let returnData = []; + + await axios.get(answerURL) + .then(response => { + console.log(response.data); + + if (response.data.length != 0) { + response.data.forEach(npmResult => { + returnData.push(npmResult); + }); + } + + return returnData; + }) + .catch(error => { + console.log(error); + }); + return returnData; +} + exports.getStock = async function (stock) { var answerURL = `https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=${stock}&interval=5min&apikey=${stockKey}`;