From 2d5eef2c8c29081ac66def7a875732d5ab73c999 Mon Sep 17 00:00:00 2001 From: TheEssem Date: Wed, 31 Mar 2021 21:04:58 -0500 Subject: [PATCH] =?UTF-8?q?Replaced=20retro=20with=20New=20And=20Improved?= =?UTF-8?q?=E2=84=A2=20variant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/retro.png | Bin 0 -> 40019 bytes commands/retro.js | 33 +-- natives/image.cc | 2 + natives/retro.cc | 95 +++++++++ natives/retro.h | 8 + package-lock.json | 449 +--------------------------------------- package.json | 1 - 7 files changed, 128 insertions(+), 460 deletions(-) create mode 100644 assets/images/retro.png create mode 100644 natives/retro.cc create mode 100644 natives/retro.h diff --git a/assets/images/retro.png b/assets/images/retro.png new file mode 100644 index 0000000000000000000000000000000000000000..2152ae849befba8d45c843b31caa19562fe001c9 GIT binary patch literal 40019 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 literal 0 HcmV?d00001 diff --git a/commands/retro.js b/commands/retro.js index fca35d4..cf9b446 100644 --- a/commands/retro.js +++ b/commands/retro.js @@ -1,22 +1,31 @@ -const RetroText = require("retrotext"); -const { TextStyle, BackgroundStyle } = RetroText; +const magick = require("../utils/image.js"); +const wrap = require("../utils/wrap.js"); exports.run = async (message, args) => { if (args.length === 0) return `${message.author.mention}, you need to provide some text to generate some retro text!`; message.channel.sendTyping(); - const [line1, line2, line3] = args.join(" ").split(",").map(elem => elem.trim()); - if (/^[\w ]+$/i.test(line1) === false || /^[\w ]+$/i.test(line2) === false || /^[\w ]+$/i.test(line3) === false) return `${message.author.mention}, only alphanumeric characters, spaces, and underscores are allowed!`; - let text; - if (line3) { - text = new RetroText.default().setLine1(line1).setLine2(line2).setLine3(line3).setBackgroundStyle(BackgroundStyle.OUTLINE_TRIANGLE).setTextStyle(TextStyle.CHROME); - } else if (line2) { - text = new RetroText.default().setLine1(line1).setLine2(line2).setBackgroundStyle(BackgroundStyle.OUTLINE_TRIANGLE).setTextStyle(TextStyle.CHROME); + let [line1, line2, line3] = args.join(" ").replaceAll("&", "\\&").replaceAll(">", "\\>").replaceAll("<", "\\<").replaceAll("\"", "\\"").replaceAll("'", "\\'").replaceAll("%", "\\%").split(",").map(elem => elem.trim()); + if (!line2 && line1.length > 15) { + const [split1, split2, split3] = wrap(line1, { width: 15, indent: "" }).split("\n"); + line1 = split1; + line2 = split2 ? split2 : ""; + line3 = split3 ? split3 : ""; } else { - text = new RetroText.default().setLine2(line1).setBackgroundStyle(BackgroundStyle.OUTLINE_TRIANGLE).setTextStyle(TextStyle.CHROME); + if (!line2) { + line2 = ""; + } + if (!line3) { + line3 = ""; + } } - const buffer = await text.fetchBuffer(); + const { buffer } = await magick.run({ + cmd: "retro", + line1, + line2, + line3 + }); return { - file: Buffer.from(buffer), + file: buffer, name: "retro.png" }; }; diff --git a/natives/image.cc b/natives/image.cc index d92bd42..bfda3ea 100644 --- a/natives/image.cc +++ b/natives/image.cc @@ -22,6 +22,7 @@ #include "misc.h" #include "motivate.h" #include "resize.h" +#include "retro.h" #include "reverse.h" #include "scott.h" #include "speed.h" @@ -56,6 +57,7 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) exports.Set(Napi::String::New(env, "mirror"), Napi::Function::New(env, Mirror)); exports.Set(Napi::String::New(env, "motivate"), Napi::Function::New(env, Motivate)); exports.Set(Napi::String::New(env, "resize"), Napi::Function::New(env, Resize)); + exports.Set(Napi::String::New(env, "retro"), Napi::Function::New(env, Retro)); exports.Set(Napi::String::New(env, "reverse"), Napi::Function::New(env, Reverse)); exports.Set(Napi::String::New(env, "scott"), Napi::Function::New(env, Scott)); exports.Set(Napi::String::New(env, "speed"), Napi::Function::New(env, Speed)); diff --git a/natives/retro.cc b/natives/retro.cc new file mode 100644 index 0000000..64060e4 --- /dev/null +++ b/natives/retro.cc @@ -0,0 +1,95 @@ +#include +#include +#include + +using namespace std; +using namespace Magick; + +class RetroWorker : public Napi::AsyncWorker { + public: + RetroWorker(Napi::Function& callback, string line1, string line2, string line3) + : Napi::AsyncWorker(callback), line1(line1), line2(line2), line3(line3) {} + ~RetroWorker() {} + + void Execute() { + Image image; + Image line1_text; + Image line2_text; + Image line3_text; + + image.read("./assets/images/retro.png"); + + line2_text.backgroundColor("none"); + line2_text.fontPointsize(128); + line2_text.textGravity(Magick::CenterGravity); + line2_text.font("Comic Sans MS"); + line2_text.read("pango:" + (line2 == "" ? line1 : line2) + ""); + line2_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); + Image line2_text_fill = line2_text; + line2_text_fill.channel(Magick::AlphaChannel); + line2_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); + line2_text_fill.backgroundColor("gray"); + line2_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + line2_text.composite(line2_text_fill, Magick::CenterGravity, Magick::DstOverCompositeOp); + image.composite(line2_text, Geometry("+0-100"), Magick::OverCompositeOp); + + if (line2 != "") { + line1_text.backgroundColor("none"); + line1_text.fontPointsize(64); + line1_text.textGravity(Magick::CenterGravity); + line1_text.font("Comic Sans MS"); + line1_text.read("pango:" + line1 + ""); + line1_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); + Image line1_text_fill = line1_text; + line1_text_fill.channel(Magick::AlphaChannel); + line1_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); + line1_text_fill.backgroundColor("gray"); + line1_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + line1_text.composite(line1_text_fill, Magick::CenterGravity, Magick::DstOverCompositeOp); + image.composite(line1_text, Geometry("+0-250"), Magick::OverCompositeOp); + } + + if (line3 != "") { + line3_text.backgroundColor("none"); + line3_text.fontPointsize(64); + line3_text.textGravity(Magick::CenterGravity); + line3_text.font("Comic Sans MS"); + line3_text.read("pango:" + line3 + ""); + line3_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); + Image line3_text_fill = line3_text; + line3_text_fill.channel(Magick::AlphaChannel); + line3_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); + line3_text_fill.backgroundColor("gray"); + line3_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + line3_text.composite(line3_text_fill, Magick::CenterGravity, Magick::DstOverCompositeOp); + image.composite(line3_text, Geometry("+0+50"), Magick::OverCompositeOp); + } + + image.magick("PNG"); + image.write(&blob); + } + + void OnOK() { + Callback().Call({Env().Undefined(), Napi::Buffer::Copy(Env(), (char *)blob.data(), blob.length())}); + } + + private: + string line1, line2, line3, type; + int delay; + Blob blob; +}; + +Napi::Value Retro(const Napi::CallbackInfo &info) +{ + Napi::Env env = info.Env(); + + Napi::Object obj = info[0].As(); + Napi::Function cb = info[1].As(); + string line1 = obj.Get("line1").As().Utf8Value(); + string line2 = obj.Get("line2").As().Utf8Value(); + string line3 = obj.Get("line3").As().Utf8Value(); + + RetroWorker* retroWorker = new RetroWorker(cb, line1, line2, line3); + retroWorker->Queue(); + return env.Undefined(); +} \ No newline at end of file diff --git a/natives/retro.h b/natives/retro.h new file mode 100644 index 0000000..9ab5486 --- /dev/null +++ b/natives/retro.h @@ -0,0 +1,8 @@ +#ifndef ESMBOT_NATIVES_RETRO_H_ +#define ESMBOT_NATIVES_RETRO_H_ + +#include + +Napi::Value Retro(const Napi::CallbackInfo& info); + +#endif \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4a38a34..5e719e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "esmbot", - "version": "1.4.5", + "version": "1.4.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "esmbot", - "version": "1.4.5", + "version": "1.4.6", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -27,7 +27,6 @@ "puppeteer-extra": "^3.1.15", "puppeteer-extra-plugin-stealth": "^2.6.5", "qrcode": "^1.4.4", - "retrotext": "^4.0.1", "sharp": "^0.26.3", "topgg-autoposter": "^1.1.9", "winston": "^3.3.3" @@ -287,11 +286,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, "node_modules/axios": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", @@ -351,11 +345,6 @@ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "optional": true }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -493,39 +482,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", - "dependencies": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", - "deprecated": "Use cheerio-select instead", - "dependencies": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -684,17 +640,6 @@ "color-string": "^1.5.2" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -740,32 +685,6 @@ "node": ">=4.8" } }, - "node_modules/css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -826,14 +745,6 @@ "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -889,57 +800,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", - "dependencies": { - "domelementtype": "^2.1.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz", - "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, "node_modules/dotenv": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", @@ -974,14 +834,6 @@ "once": "^1.4.0" } }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/eris": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/eris/-/eris-0.14.0.tgz", @@ -1408,19 +1260,6 @@ "node": ">=0.10.0" } }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1582,24 +1421,6 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "node_modules/htmlparser2": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz", - "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.4.4", - "entities": "^2.0.0" - } - }, "node_modules/http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -1875,23 +1696,6 @@ "node": ">=0.10.0" } }, - "node_modules/isomorphic-form-data": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz", - "integrity": "sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg==", - "dependencies": { - "form-data": "^2.3.2" - } - }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2061,25 +1865,6 @@ "node": ">=0.10.0" } }, - "node_modules/mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "dependencies": { - "mime-db": "1.46.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", @@ -2377,17 +2162,6 @@ "set-blocking": "~2.0.0" } }, - "node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -2515,19 +2289,6 @@ "node": ">=6" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3100,16 +2861,6 @@ "node": ">=4" } }, - "node_modules/retrotext": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/retrotext/-/retrotext-4.0.1.tgz", - "integrity": "sha512-Xrw03SCI5lC03tchbS1dGntqJrXs2N/H92yTI14EwMwL5pZHlR45z86DFUECMxzsF3xtTCiXM1+VpThIoGDgZw==", - "dependencies": { - "cheerio": "^1.0.0-rc.3", - "isomorphic-form-data": "^2.0.0", - "isomorphic-unfetch": "^3.0.0" - } - }, "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3781,11 +3532,6 @@ "through": "^2.3.8" } }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -4382,11 +4128,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, "axios": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", @@ -4431,11 +4172,6 @@ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "optional": true }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4537,32 +4273,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", - "requires": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" - } - }, - "cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", - "requires": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" - } - }, "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -4701,14 +4411,6 @@ } } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4745,23 +4447,6 @@ "which": "^1.2.9" } }, - "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -4799,11 +4484,6 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -4844,39 +4524,6 @@ "esutils": "^2.0.2" } }, - "dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" - }, - "domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", - "requires": { - "domelementtype": "^2.1.0" - } - }, - "domutils": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz", - "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" - } - }, "dotenv": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", @@ -4908,11 +4555,6 @@ "once": "^1.4.0" } }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" - }, "eris": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/eris/-/eris-0.14.0.tgz", @@ -5246,16 +4888,6 @@ "for-in": "^1.0.1" } }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -5383,17 +5015,6 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "htmlparser2": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz", - "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.4.4", - "entities": "^2.0.0" - } - }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -5590,23 +5211,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "isomorphic-form-data": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz", - "integrity": "sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg==", - "requires": { - "form-data": "^2.3.2" - } - }, - "isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "requires": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5753,19 +5357,6 @@ "kind-of": "^3.0.2" } }, - "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" - }, - "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "requires": { - "mime-db": "1.46.0" - } - }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", @@ -5995,14 +5586,6 @@ "set-blocking": "~2.0.0" } }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "requires": { - "boolbase": "^1.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -6100,19 +5683,6 @@ "callsites": "^3.0.0" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "requires": { - "parse5": "^6.0.1" - } - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6550,16 +6120,6 @@ "signal-exit": "^3.0.2" } }, - "retrotext": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/retrotext/-/retrotext-4.0.1.tgz", - "integrity": "sha512-Xrw03SCI5lC03tchbS1dGntqJrXs2N/H92yTI14EwMwL5pZHlR45z86DFUECMxzsF3xtTCiXM1+VpThIoGDgZw==", - "requires": { - "cheerio": "^1.0.0-rc.3", - "isomorphic-form-data": "^2.0.0", - "isomorphic-unfetch": "^3.0.0" - } - }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -7075,11 +6635,6 @@ "through": "^2.3.8" } }, - "unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 00f4a42..bd3d181 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "puppeteer-extra": "^3.1.15", "puppeteer-extra-plugin-stealth": "^2.6.5", "qrcode": "^1.4.4", - "retrotext": "^4.0.1", "sharp": "^0.26.3", "topgg-autoposter": "^1.1.9", "winston": "^3.3.3"