From 1f1e7531af37ba4adc3c5791da5af2cf1c1cb3b9 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Mon, 28 Mar 2022 16:12:10 -0600 Subject: [PATCH] misc: Add gimg and fimg --- package.json | 1 + pnpm-lock.yaml | 89 +++++++++++++++++++++++++++++++++++++++++++++ src/modules/misc.js | 68 ++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+) diff --git a/package.json b/package.json index ca17c29..e3e0d03 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "colorcolor": "^1.1.1", "dumpy": "github:Cynosphere/dumpy.js", "eris": "^0.16.1", + "google-images": "^2.1.0", "jimp": "^0.16.1", "murmurhash": "^2.0.0", "node-fetch": "^2.6.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6a29b7..d735c38 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ specifiers: dumpy: github:Cynosphere/dumpy.js eris: ^0.16.1 eslint: ^7.26.0 + google-images: ^2.1.0 jimp: ^0.16.1 murmurhash: ^2.0.0 node-fetch: ^2.6.1 @@ -17,6 +18,7 @@ dependencies: colorcolor: 1.1.1 dumpy: github.com/Cynosphere/dumpy.js/5fc22353cdcb97084bab572266390e780d9f7a7b eris: 0.16.1 + google-images: 2.1.0 jimp: 0.16.1 murmurhash: 2.0.0 node-fetch: 2.6.1 @@ -621,6 +623,11 @@ packages: engines: {node: '>=6'} dev: true + /capture-stack-trace/1.0.1: + resolution: {integrity: sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==} + engines: {node: '>=0.10.0'} + dev: false + /caseless/0.12.0: resolution: {integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=} dev: false @@ -709,6 +716,13 @@ packages: resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} dev: false + /create-error-class/3.0.2: + resolution: {integrity: sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=} + engines: {node: '>=0.10.0'} + dependencies: + capture-stack-trace: 1.0.1 + dev: false + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -787,6 +801,10 @@ packages: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} dev: false + /duplexer3/0.1.4: + resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} + dev: false + /ecc-jsbn/0.1.2: resolution: {integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=} dependencies: @@ -1055,6 +1073,11 @@ packages: wide-align: 1.1.3 dev: false + /get-stream/3.0.0: + resolution: {integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=} + engines: {node: '>=4'} + dev: false + /getpass/0.1.7: resolution: {integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=} dependencies: @@ -1123,6 +1146,30 @@ packages: type-fest: 0.20.2 dev: true + /google-images/2.1.0: + resolution: {integrity: sha1-EnSuQEgll4Jk06T48tUmuI0L8Cw=} + engines: {node: '>= 4'} + dependencies: + got: 6.7.1 + dev: false + + /got/6.7.1: + resolution: {integrity: sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=} + engines: {node: '>=4'} + dependencies: + create-error-class: 3.0.2 + duplexer3: 0.1.4 + get-stream: 3.0.0 + is-redirect: 1.0.0 + is-retry-allowed: 1.2.0 + is-stream: 1.1.0 + lowercase-keys: 1.0.1 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + unzip-response: 2.0.1 + url-parse-lax: 1.0.0 + dev: false + /graceful-fs/4.2.6: resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} dev: false @@ -1253,6 +1300,21 @@ packages: is-extglob: 2.1.1 dev: true + /is-redirect/1.0.0: + resolution: {integrity: sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=} + engines: {node: '>=0.10.0'} + dev: false + + /is-retry-allowed/1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: false + + /is-stream/1.1.0: + resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} + engines: {node: '>=0.10.0'} + dev: false + /is-typedarray/1.0.0: resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} dev: false @@ -1358,6 +1420,11 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true + /lowercase-keys/1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: false + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -1710,6 +1777,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prepend-http/1.0.4: + resolution: {integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=} + engines: {node: '>=0.10.0'} + dev: false + /prettier/2.3.0: resolution: {integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==} engines: {node: '>=10.13.0'} @@ -2107,6 +2179,11 @@ packages: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true + /timed-out/4.0.1: + resolution: {integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=} + engines: {node: '>=0.10.0'} + dev: false + /timm/1.7.1: resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} dev: false @@ -2158,11 +2235,23 @@ packages: engines: {node: '>=8'} dev: true + /unzip-response/2.0.1: + resolution: {integrity: sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=} + engines: {node: '>=4'} + dev: false + /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 + /url-parse-lax/1.0.0: + resolution: {integrity: sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=} + engines: {node: '>=0.10.0'} + dependencies: + prepend-http: 1.0.4 + dev: false + /utif/2.0.1: resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} dependencies: diff --git a/src/modules/misc.js b/src/modules/misc.js index 25bc8e7..054b78e 100644 --- a/src/modules/misc.js +++ b/src/modules/misc.js @@ -3,6 +3,9 @@ const CATEGORY = "misc"; const fetch = require("node-fetch"); const {hastebin, safeString, parseHtmlEntities} = require("../lib/utils.js"); +const GoogleImages = require("google-images"); + +const imagesClient = new GoogleImages(hf.apikeys.gimg, hf.apikeys.google); const yt = new Command("youtube"); yt.addAlias("yt"); @@ -144,3 +147,68 @@ wolfram.callback = async function (msg, line) { } }; hf.registerCommand(wolfram); + +const gimg = new Command("gimg"); +gimg.category = CATEGORY; +gimg.helpText = "Search Google Images"; +gimg.usage = "[query]"; +gimg.addAlias("img"); +gimg.callback = async function (msg, line) { + if (!line) return "No arguments given."; + + const images = await imagesClient.search(line, { + safe: + msg.channel.nsfw && !msg.channel?.topic.includes("[no_nsfw]") + ? "off" + : "high", + }); + + const index = Math.floor(Math.random() * images.length); + const image = images[index]; + + return { + embeds: [ + { + title: image.description, + url: image.parentPage, + image: { + url: image.url, + }, + footer: { + text: `Image ${index}/${images.length}. Rerun to get a different image.`, + }, + }, + ], + }; +}; +hf.registerCommand(gimg); + +const fimg = new Command("fimg"); +fimg.category = CATEGORY; +fimg.helpText = "Send first result from Google Images"; +fimg.usage = "[query]"; +fimg.callback = async function (msg, line) { + if (!line) return "No arguments given."; + + const images = await imagesClient.search(line, { + safe: + msg.channel.nsfw && !msg.channel?.topic.includes("[no_nsfw]") + ? "off" + : "high", + }); + + const image = images[0]; + + return { + embeds: [ + { + title: image.description, + url: image.parentPage, + image: { + url: image.url, + }, + }, + ], + }; +}; +hf.registerCommand(fimg);