From ee8198552974e5d62c2391bd743d088866cd28b8 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Fri, 8 Oct 2021 23:55:44 +0300 Subject: [PATCH 01/23] update packages and play from direct yt link --- .gitignore | 0 .vscode/launch.json | 0 .vscode/tasks.json | 0 LICENSE | 0 README.md | 0 helptext.txt | 0 package-lock.json | 3146 +++++++++++++++++++++++++-------- package.json | 36 +- playlists/Demo.json | 0 playlists/test2.json | 0 src/app.ts | 0 src/bot/bot-config.ts | 0 src/bot/bot-status.ts | 0 src/bot/bot.ts | 59 +- src/bot/index.ts | 0 src/helpers/helpers.ts | 2 +- src/helpers/index.ts | 0 src/media/index.ts | 0 src/media/media-item.model.ts | 0 src/media/media-player.ts | 41 +- src/media/media-queue.ts | 0 src/media/media-type.model.ts | 0 src/plugins/playlist.ts | 9 +- src/plugins/youtube.ts | 8 +- tsconfig.json | 0 25 files changed, 2472 insertions(+), 829 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .vscode/launch.json mode change 100644 => 100755 .vscode/tasks.json mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 helptext.txt mode change 100644 => 100755 package.json mode change 100644 => 100755 playlists/Demo.json mode change 100644 => 100755 playlists/test2.json mode change 100644 => 100755 src/app.ts mode change 100644 => 100755 src/bot/bot-config.ts mode change 100644 => 100755 src/bot/bot-status.ts mode change 100644 => 100755 src/bot/bot.ts mode change 100644 => 100755 src/bot/index.ts mode change 100644 => 100755 src/helpers/helpers.ts mode change 100644 => 100755 src/helpers/index.ts mode change 100644 => 100755 src/media/index.ts mode change 100644 => 100755 src/media/media-item.model.ts mode change 100644 => 100755 src/media/media-player.ts mode change 100644 => 100755 src/media/media-queue.ts mode change 100644 => 100755 src/media/media-type.model.ts mode change 100644 => 100755 src/plugins/playlist.ts mode change 100644 => 100755 src/plugins/youtube.ts mode change 100644 => 100755 tsconfig.json diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.vscode/launch.json b/.vscode/launch.json old mode 100644 new mode 100755 diff --git a/.vscode/tasks.json b/.vscode/tasks.json old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/helptext.txt b/helptext.txt old mode 100644 new mode 100755 diff --git a/package-lock.json b/package-lock.json index 6d375d2..4e7f53b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,1906 @@ { "name": "rhythm-bot", "version": "2.1.5", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "rhythm-bot", + "version": "2.1.5", + "license": "ISC", + "dependencies": { + "@discordjs/opus": "github:discordjs/opus", + "@types/node": "^16.10.3", + "bufferutil": "^4.0.4", + "discord-bot-quickstart": "^0.0.15", + "discord-command-parser": "^1.5.3", + "discord.js": "^13.2.0", + "ffmpeg-static": "^4.4.0", + "jsonfile": "^6.1.0", + "minimist": "^1.2.5", + "moment": "^2.29.1", + "sodium": "^3.0.2", + "typescript": "^4.4.3", + "utf-8-validate": "^5.0.6", + "winston": "^3.3.3", + "yt-search": "^2.10.1", + "ytdl-core": "^4.9.1", + "ytpl": "^2.2.3", + "zlib-sync": "^0.1.7" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@derhuerst/http-basic": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@derhuerst/http-basic/-/http-basic-8.2.1.tgz", + "integrity": "sha512-Rmn7qQQulw2sxJ8qGfZ7OuqMWuhz8V+L5xnYKMF5cXVcYqmgWqlVEAme90pF7Ya8OVhxVxLmhh0rI2k6t7ITWw==", + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@discordjs/builders": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz", + "integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==", + "dependencies": { + "@sindresorhus/is": "^4.0.1", + "discord-api-types": "^0.22.0", + "ow": "^0.27.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/builders/node_modules/discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@discordjs/collection": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", + "integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@discordjs/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@discordjs/node-pre-gyp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.1.tgz", + "integrity": "sha512-PLYLPG3R+m9QlMROOjdy2htQq54g6f9vRb1xPfZ97CL53yj0uNTfpB/jtY/AXY6OKNtZtrre5SKjei8Hcc44HQ==", + "dependencies": { + "detect-libc": "^1.0.3", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^5.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.8" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@discordjs/opus": { + "version": "0.6.0", + "resolved": "git+ssh://git@github.com/discordjs/opus.git#38199a39066b9cbeea6739e8e9ed44d432c393a9", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@discordjs/node-pre-gyp": "^0.4.1", + "node-addon-api": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.5.tgz", + "integrity": "sha512-NQ8GeTBeOkeAylVYTnO9zfEZO74iMNGCRrR3uIRnCrhkyPC+nsewyQtTamjSDWxXFTf+xGSJ9khiY2p56k/bMA==", + "engines": { + "node": ">=v14.18.0", + "npm": ">=7.24.1" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@types/jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-SSCc8i9yl6vjgXSyZb0uEodk3UjXuWd55t1D+Ie1zuTx7ml+2AEj0Xyomi3NBz1gCBsZVyWWnXOLXowS1ufhEw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "node_modules/@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + }, + "node_modules/@types/ws": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", + "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/async": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" + }, + "node_modules/async.parallellimit": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.parallellimit/-/async.parallellimit-0.5.2.tgz", + "integrity": "sha1-v9y/Lwgy8f/0wLM1S09jIGY91R8=", + "dependencies": { + "async.util.eachoflimit": "0.5.2", + "async.util.parallel": "0.5.2" + } + }, + "node_modules/async.util.eachoflimit": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.eachoflimit/-/async.util.eachoflimit-0.5.2.tgz", + "integrity": "sha1-i4y4z7AniqXOtQqPgAwcJmjbV+8=", + "dependencies": { + "async.util.keyiterator": "0.5.2", + "async.util.noop": "0.5.2", + "async.util.once": "0.5.2", + "async.util.onlyonce": "0.5.2" + } + }, + "node_modules/async.util.isarray": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.isarray/-/async.util.isarray-0.5.2.tgz", + "integrity": "sha1-5i2sjyY29lh13PdSHC0k0N+yu98=" + }, + "node_modules/async.util.isarraylike": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.isarraylike/-/async.util.isarraylike-0.5.2.tgz", + "integrity": "sha1-jn+H2pFB8vCZboBAR30NTv4/UPg=", + "dependencies": { + "async.util.isarray": "0.5.2" + } + }, + "node_modules/async.util.keyiterator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.keyiterator/-/async.util.keyiterator-0.5.2.tgz", + "integrity": "sha1-M55s6PidAAQz+3gU4ico8/F1CQ0=", + "dependencies": { + "async.util.isarraylike": "0.5.2", + "async.util.keys": "0.5.2" + } + }, + "node_modules/async.util.keys": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.keys/-/async.util.keys-0.5.2.tgz", + "integrity": "sha1-XDTd2KPtt6eIPJtf4hJngbIJivY=" + }, + "node_modules/async.util.noop": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.noop/-/async.util.noop-0.5.2.tgz", + "integrity": "sha1-vdYrl8sKo/YLWGrRSEaGmJdeWLk=" + }, + "node_modules/async.util.once": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.once/-/async.util.once-0.5.2.tgz", + "integrity": "sha1-FFPLdATK0IImlPq6vEepblyqchY=" + }, + "node_modules/async.util.onlyonce": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.onlyonce/-/async.util.onlyonce-0.5.2.tgz", + "integrity": "sha1-uOb8AErckjFk154y8oE+5GXCT/I=" + }, + "node_modules/async.util.parallel": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.parallel/-/async.util.parallel-0.5.2.tgz", + "integrity": "sha1-IzUk49b6/9XplddUdrjZJPloCM0=", + "dependencies": { + "async.util.isarraylike": "0.5.2", + "async.util.noop": "0.5.2", + "async.util.restparam": "0.5.2" + } + }, + "node_modules/async.util.restparam": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.restparam/-/async.util.restparam-0.5.2.tgz", + "integrity": "sha1-A+/r88Ane5ciDlJaunUPXgT8gM0=" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "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/boolstring": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/boolstring/-/boolstring-1.0.2.tgz", + "integrity": "sha512-0JLNSmZUv1m/O8sVayFm2t0naiOXwQ9O2Gq9u1eoIkhvu6U5NQER/e3k4BGpjZ33G775lWMT7TzJ7r5VtmEnbQ==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bufferutil": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.4.tgz", + "integrity": "sha512-VNxjXUCrF3LvbLgwfkTb5LsFvk6pGIn7OBb9x+3o+iJ6mKw0JTUp4chBFc88hi1aspeZGeZG9jAIbpFYPQSLZw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dependencies": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz", + "integrity": "sha1-OlrnT9drYmevZm5p4q+70B3vNNE=", + "dependencies": { + "ansi-regex": "^2.1.1", + "d": "1", + "es5-ext": "^0.10.12", + "es6-iterator": "2", + "memoizee": "^0.4.3", + "timers-ext": "0.1" + } + }, + "node_modules/color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dependencies": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "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", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dasu": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.4.2.tgz", + "integrity": "sha512-3iZKDAKqv0APFwpqP40gpro5msM+pwhQN7IhB42mjbL1W4M2V6A+MJy7RhA8y6lUM+1mQoLls3OePidmzVbncQ==" + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/discord-api-types": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", + "integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/discord-bot-quickstart": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/discord-bot-quickstart/-/discord-bot-quickstart-0.0.15.tgz", + "integrity": "sha512-DkvtPZEVffoG53x2ROQulfRde8TAvDFpq46XzpGNY+jO8kniu0fNzE3iaCRq+/OICkTEX/v8a4LRgzMt5LmcMw==", + "dependencies": { + "@types/jsonfile": "^6.0.0", + "@types/minimist": "^1.2.0", + "@types/node": "^14.0.23", + "discord-command-parser": "^1.5.3", + "discord.js": "^12.5.1", + "jsonfile": "^6.0.1", + "minimist": "^1.2.5", + "moment": "^2.27.0", + "typescript": "^3.9.7", + "winston": "^3.3.3" + } + }, + "node_modules/discord-bot-quickstart/node_modules/@discordjs/collection": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", + "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" + }, + "node_modules/discord-bot-quickstart/node_modules/@types/node": { + "version": "14.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", + "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" + }, + "node_modules/discord-bot-quickstart/node_modules/discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "deprecated": "no longer supported", + "dependencies": { + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/discord-bot-quickstart/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/discord-bot-quickstart/node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/discord-command-parser": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/discord-command-parser/-/discord-command-parser-1.5.3.tgz", + "integrity": "sha512-YWgalkrbly0dJCyLw7p9SX3RC7HIxOrSTz/8vKjlmYPyyZmMCGmKwpXu6HkPXRZ20L6QqftVWigSw6fDK2zemg==" + }, + "node_modules/discord.js": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz", + "integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==", + "dependencies": { + "@discordjs/builders": "^0.6.0", + "@discordjs/collection": "^0.2.1", + "@discordjs/form-data": "^3.0.1", + "@sapphire/async-queue": "^1.1.5", + "@types/ws": "^8.2.0", + "discord-api-types": "^0.23.1", + "node-fetch": "^2.6.1", + "ws": "^8.2.3" + }, + "engines": { + "node": ">=16.6.0", + "npm": ">=7.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, + "node_modules/ffmpeg-static": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.4.0.tgz", + "integrity": "sha512-NIJHVPXlSsIK9pYvsTPh4ZlppauorpPLLeOaIG7VOXWQck4Fx4Qi7Ahe+j8mj8KZXhWwCg3Hx46JdWAIOWLcpg==", + "hasInstallScript": true, + "dependencies": { + "@derhuerst/http-basic": "^8.2.0", + "env-paths": "^2.2.0", + "https-proxy-agent": "^5.0.0", + "progress": "^2.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/gauge": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", + "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1 || ^2.0.0", + "strip-ansi": "^3.0.1 || ^4.0.0", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "optional": true + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "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.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-time": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/human-time/-/human-time-0.0.2.tgz", + "integrity": "sha512-sbYI90YhYmstslPTb70BLGjy6mdESa0lxL7uDR4fIVAx9Iobz8fLEqi7FqF4Q/6vblrzZALg//MsYJlIPBU8SA==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath-plus": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-5.0.7.tgz", + "integrity": "sha512-7TS6wsiw1s2UMK/A6nA4n0aUJuirCVhJ87nWX5je5MPOl0z5VTr2qs7nMP8NZ2ed3rlt6kePTqddgVPE9F0i0w==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keypress": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", + "integrity": "sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=" + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/logform": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.0.tgz", + "integrity": "sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ==", + "dependencies": { + "colors": "^1.2.1", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^1.1.0", + "triple-beam": "^1.3.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/m3u8stream": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.4.tgz", + "integrity": "sha512-sco80Db+30RvcaIOndenX6E6oQNgTiBKeJbFPc+yDXwPQIkryfboEbCvXPlBRq3mQTCVPQO93TDVlfRwqpD35w==", + "dependencies": { + "miniget": "^4.0.0", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/memoizee/node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dependencies": { + "mime-db": "1.50.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/miniget": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.1.tgz", + "integrity": "sha512-O/DduzDR6f+oDtVype9S/Qu5hhnx73EDYGyZKwU/qN82lehFZdfhoa4DT51SpsO+8epYrB3gcRmws56ROfTIoQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node_modules/node-addon-api": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", + "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" + }, + "node_modules/node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-fzf": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/node-fzf/-/node-fzf-0.5.3.tgz", + "integrity": "sha512-crN8rRfApu/GUrtKq+zJ6LueUyNAOJpFHxoT2Ru1Q+OYRa/F/H7CXvzcMrFc7D964yakYZEZ9XR3YbdSHXgyCw==", + "dependencies": { + "cli-color": "~1.2.0", + "keypress": "~0.2.1", + "minimist": "~1.2.0", + "redstar": "0.0.2", + "string-width": "~2.1.1", + "ttys": "0.0.3" + }, + "bin": { + "nfzf": "bin/cli.js" + } + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/ow": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", + "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", + "dependencies": { + "@sindresorhus/is": "^4.0.1", + "callsites": "^3.1.0", + "dot-prop": "^6.0.1", + "lodash.isequal": "^4.5.0", + "type-fest": "^1.2.1", + "vali-date": "^1.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, + "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-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "peerDependencies": { + "@discordjs/opus": "^0.5.0", + "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", + "node-opus": "^0.3.3", + "opusscript": "^0.0.8" + }, + "peerDependenciesMeta": { + "@discordjs/opus": { + "optional": true + }, + "ffmpeg-static": { + "optional": true + }, + "node-opus": { + "optional": true + }, + "opusscript": { + "optional": true + } + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/redstar": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/redstar/-/redstar-0.0.2.tgz", + "integrity": "sha1-nVammAY4yYUaEAsMs799PrkCBcs=", + "dependencies": { + "minimatch": "~3.0.4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", + "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sodium": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz", + "integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "*" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "node_modules/ts-mixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", + "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/ttys": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/ttys/-/ttys-0.0.3.tgz", + "integrity": "sha1-FbrN54MQIN5fLyjwGxcy7wNlH00=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typescript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.6.tgz", + "integrity": "sha512-hoY0gOf9EkCw+nimK21FVKHUIG1BMqSiRwxB/q3A9yKZOrOI99PP77BxmarDqWz6rG3vVYiBWfhG8z2Tl+7fZA==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "dependencies": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "dependencies": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yt-search": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.1.tgz", + "integrity": "sha512-7xORFvQMkzkVVOsRVV6qW+Ld8FIl8OQcN3ThsDf04jwr2GyR4miGmC98IA2X/gjTWUEj2SRhmzw6kApj3LHdsQ==", + "dependencies": { + "async.parallellimit": "~0.5.2", + "boolstring": "~1.0.2", + "cheerio": "^1.0.0-rc.10", + "dasu": "~0.4.2", + "human-time": "0.0.2", + "jsonpath-plus": "~5.0.2", + "minimist": "~1.2.5", + "node-fzf": "~0.5.1" + }, + "bin": { + "yt-search": "bin/cli.js", + "yt-search-audio": "bin/mpv_audio.sh", + "yt-search-video": "bin/mpv_video.sh" + } + }, + "node_modules/ytdl-core": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.1.tgz", + "integrity": "sha512-6Jbp5RDhUEozlaJQAR+l8oV8AHsx3WUXxSyPxzE6wOIAaLql7Hjiy0ZM58wZoyj1YEenlEPjEqcJIjKYKxvHtQ==", + "dependencies": { + "m3u8stream": "^0.8.3", + "miniget": "^4.0.0", + "sax": "^1.1.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ytpl": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.2.3.tgz", + "integrity": "sha512-d18HibT8wzEWzWsXFS6u6kUKCCFL20roFVwpjyGCzl+nP8sOAz5xSLafxLflkkoeXJU8AFuO7BEsJXIREASvFQ==", + "dependencies": { + "miniget": "^4.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/zlib-sync": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/zlib-sync/-/zlib-sync-0.1.7.tgz", + "integrity": "sha512-UmciU6ZrIwtwPC8noMzq+kGMdiWwNRZ3wC0SbED4Ew5Ikqx14MqDPRs/Pbk+3rZPh5SzsOgUBs1WRE0iieddpg==", + "hasInstallScript": true, + "dependencies": { + "nan": "^2.14.0" + } + } + }, "dependencies": { "@dabh/diagnostics": { "version": "2.0.2", @@ -25,10 +1923,29 @@ "parse-cache-control": "^1.0.1" } }, + "@discordjs/builders": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz", + "integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==", + "requires": { + "@sindresorhus/is": "^4.0.1", + "discord-api-types": "^0.22.0", + "ow": "^0.27.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + } + } + }, "@discordjs/collection": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", - "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", + "integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==" }, "@discordjs/form-data": { "version": "3.0.1", @@ -41,77 +1958,65 @@ } }, "@discordjs/node-pre-gyp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.1.0.tgz", - "integrity": "sha512-6u3EbK2x+j9bM3iK9/pE7BWLxOXZ1PvcsbDo3ZBdPocu95qPHj8zCVsBBk3Cao7V6o8QpwxUyJl6oVJ6T3ZgAg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.1.tgz", + "integrity": "sha512-PLYLPG3R+m9QlMROOjdy2htQq54g6f9vRb1xPfZ97CL53yj0uNTfpB/jtY/AXY6OKNtZtrre5SKjei8Hcc44HQ==", "requires": { "detect-libc": "^1.0.3", - "mkdirp": "^0.5.5", - "needle": "^2.4.1", - "nopt": "^4.0.3", - "npm-packlist": "^1.4.8", - "npmlog": "^4.1.2", - "rc": "^1.2.8", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^5.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.0", - "tar": "^6.0.2" + "semver": "^7.3.5", + "tar": "^6.1.8" } }, "@discordjs/opus": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.3.3.tgz", - "integrity": "sha512-n3hUs4RY0K8cz8vJ2GiZE4EdJlexoxs1vGsaft5lZlAnU6wsZfncpv4px+HVOMKN8ddtjriGfsrG4lVkAyZcmQ==", + "version": "git+ssh://git@github.com/discordjs/opus.git#38199a39066b9cbeea6739e8e9ed44d432c393a9", + "from": "@discordjs/opus@discordjs/opus", "requires": { - "@discordjs/node-pre-gyp": "^0.1.0", - "node-addon-api": "^3.0.2" - }, - "dependencies": { - "node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" - } + "@discordjs/node-pre-gyp": "^0.4.1", + "node-addon-api": "^4.0.0" } }, + "@sapphire/async-queue": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.5.tgz", + "integrity": "sha512-NQ8GeTBeOkeAylVYTnO9zfEZO74iMNGCRrR3uIRnCrhkyPC+nsewyQtTamjSDWxXFTf+xGSJ9khiY2p56k/bMA==" + }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" + }, "@types/jsonfile": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-5.0.1.tgz", - "integrity": "sha512-NHZ+FcLQbs7DpQvWTMTa5pvkSzeWGswCA3reWfADKkqKBI4nf6Pcml7Y8IeRh6ebxXeU+C6AgTa1H3Mpy8TAVg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-SSCc8i9yl6vjgXSyZb0uEodk3UjXuWd55t1D+Ie1zuTx7ml+2AEj0Xyomi3NBz1gCBsZVyWWnXOLXowS1ufhEw==", "requires": { "@types/node": "*" } }, "@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=" - }, - "@types/moment": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz", - "integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=", - "requires": { - "moment": "*" - } + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "12.12.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.48.tgz", - "integrity": "sha512-m3Nmo/YaDUfYzdCQlxjF5pIy7TNyDTAJhIa//xtHcF0dlgYIBKULKnmloCPtByDxtZXrWV8Pge1AKT6/lRvVWg==" + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" }, - "@types/winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-BVGCztsypW8EYwJ+Hq+QNYiT/MUyCif0ouBH+flrY66O5W+KIXAMML6E/0fJpm7VjIzgangahl5S03bJJQGrZw==", + "@types/ws": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", + "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", "requires": { - "winston": "*" + "@types/node": "*" } }, - "@types/yt-search": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@types/yt-search/-/yt-search-2.3.0.tgz", - "integrity": "sha512-B0F8mn14F4nHWG5HJ0WUMhsiDqOPD/bHbPd0pEaj/+qZgmLV/Wmy7yo0xSKPRD9D3R/DUywqIhFFAPUMaYqi3Q==" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -127,20 +2032,10 @@ }, "agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - } + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" } }, "ansi-regex": { @@ -149,52 +2044,35 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" }, "dependencies": { "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" }, "async.parallellimit": { "version": "0.5.2", @@ -279,17 +2157,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "boolbase": { "version": "1.0.0", @@ -311,44 +2181,52 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bufferutil": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.1.tgz", - "integrity": "sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.4.tgz", + "integrity": "sha512-VNxjXUCrF3LvbLgwfkTb5LsFvk6pGIn7OBb9x+3o+iJ6mKw0JTUp4chBFc88hi1aspeZGeZG9jAIbpFYPQSLZw==", "requires": { - "node-gyp-build": "~3.7.0" + "node-gyp-build": "^4.2.0" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + } + }, + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" } }, "chownr": { @@ -369,11 +2247,6 @@ "timers-ext": "0.1" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -397,14 +2270,19 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -441,35 +2319,6 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "console-control-strings": { @@ -478,25 +2327,26 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" }, "d": { "version": "1.0.1", @@ -508,28 +2358,18 @@ } }, "dasu": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.4.1.tgz", - "integrity": "sha512-+fDXmFqrsZfuCr3dwSxm0pyK5RTiIBFBJiWTG6HaZQc9FhoqT4o9KQFEfGllic0S2gEpzHYMirzqJ5qSh+mOrQ==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.4.2.tgz", + "integrity": "sha512-3iZKDAKqv0APFwpqP40gpro5msM+pwhQN7IhB42mjbL1W4M2V6A+MJy7RhA8y6lUM+1mQoLls3OePidmzVbncQ==" }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -545,6 +2385,11 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "discord-api-types": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", + "integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==" + }, "discord-bot-quickstart": { "version": "0.0.15", "resolved": "https://registry.npmjs.org/discord-bot-quickstart/-/discord-bot-quickstart-0.0.15.tgz", @@ -562,32 +2407,41 @@ "winston": "^3.3.3" }, "dependencies": { - "@types/jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-SSCc8i9yl6vjgXSyZb0uEodk3UjXuWd55t1D+Ie1zuTx7ml+2AEj0Xyomi3NBz1gCBsZVyWWnXOLXowS1ufhEw==", - "requires": { - "@types/node": "*" - } + "@discordjs/collection": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", + "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" }, "@types/node": { - "version": "14.17.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.17.tgz", - "integrity": "sha512-niAjcewgEYvSPCZm3OaM9y6YQrL2SEPH9PymtE6fuZAvFiP6ereCcvApGl2jKTq7copTIguX3PBvfP08LN4LvQ==" + "version": "14.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", + "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" } }, "typescript": { "version": "3.9.10", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" + }, + "ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "requires": {} } } }, @@ -597,49 +2451,59 @@ "integrity": "sha512-YWgalkrbly0dJCyLw7p9SX3RC7HIxOrSTz/8vKjlmYPyyZmMCGmKwpXu6HkPXRZ20L6QqftVWigSw6fDK2zemg==" }, "discord.js": { - "version": "12.5.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.1.tgz", - "integrity": "sha512-VwZkVaUAIOB9mKdca0I5MefPMTQJTNg0qdgi1huF3iwsFwJ0L5s/Y69AQe+iPmjuV6j9rtKoG0Ta0n9vgEIL6w==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz", + "integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==", "requires": { - "@discordjs/collection": "^0.1.6", + "@discordjs/builders": "^0.6.0", + "@discordjs/collection": "^0.2.1", "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", + "@sapphire/async-queue": "^1.1.5", + "@types/ws": "^8.2.0", + "discord-api-types": "^0.23.1", "node-fetch": "^2.6.1", - "prism-media": "^1.2.2", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.3.1" + "ws": "^8.2.3" } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "requires": { - "domelementtype": "1" + "domelementtype": "^2.2.0" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "requires": { + "is-obj": "^2.0.0" } }, "enabled": { @@ -648,23 +2512,14 @@ "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "env-paths": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", - "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==" + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, - "erlpack": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/erlpack/-/erlpack-0.1.3.tgz", - "integrity": "sha512-QeG9v8CVsY/a/IoQi8zjn23aYKcziOihAxwjUl3tI/KB4R1FjTtctDAAMovgtpC16S+WiOauers2oWwIOQtKBQ==", - "requires": { - "bindings": "^1.5.0", - "nan": "^2.14.0" - } + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "es5-ext": { "version": "0.10.53", @@ -706,40 +2561,6 @@ "es6-symbol": "^3.1.1" } }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, - "esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -755,39 +2576,29 @@ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "requires": { - "type": "^2.0.0" + "type": "^2.5.0" }, "dependencies": { "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" } } }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, "fecha": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", - "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, "ffmpeg-static": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.2.7.tgz", - "integrity": "sha512-SGnOr2d+k0/9toRIv9t5/hN/DMYbm5XMtG0wVwGM1tEyXJAD6dbcWOEvfHq4LOySm9uykKL6LMC4eVPeteUnbQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.4.0.tgz", + "integrity": "sha512-NIJHVPXlSsIK9pYvsTPh4ZlppauorpPLLeOaIG7VOXWQck4Fx4Qi7Ahe+j8mj8KZXhWwCg3Hx46JdWAIOWLcpg==", "requires": { "@derhuerst/http-basic": "^8.2.0", "env-paths": "^2.2.0", @@ -795,11 +2606,6 @@ "progress": "^2.0.3" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, "fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -819,52 +2625,25 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", + "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", "requires": { - "aproba": "^1.0.3", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } + "string-width": "^1.0.1 || ^2.0.0", + "strip-ansi": "^3.0.1 || ^4.0.0", + "wide-align": "^1.1.2" } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -875,9 +2654,9 @@ } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "optional": true }, "has-unicode": { @@ -886,16 +2665,14 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, "http-response-object": { @@ -907,9 +2684,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.50", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.50.tgz", - "integrity": "sha512-vwX+/ija9xKc/z9VqMCdbf4WYcMTGsI0I/L/6shIF3qXURxZOhPQlPRHtjTpiNhAwn0paMJzlOQqw6mAGEQnTA==" + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" } } }, @@ -920,16 +2697,6 @@ "requires": { "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - } } }, "human-time": { @@ -937,22 +2704,6 @@ "resolved": "https://registry.npmjs.org/human-time/-/human-time-0.0.2.tgz", "integrity": "sha512-sbYI90YhYmstslPTb70BLGjy6mdESa0lxL7uDR4fIVAx9Iobz8fLEqi7FqF4Q/6vblrzZALg//MsYJlIPBU8SA==" }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "requires": { - "minimatch": "^3.0.4" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -967,11 +2718,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -982,15 +2728,20 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "isarray": { "version": "1.0.0", @@ -998,22 +2749,18 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "jsonpath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.2.tgz", - "integrity": "sha512-rmzlgFZiQPc6q4HDyK8s9Qb4oxBnI5sF61y/Co5PV0lc3q2bIuRsNdueVbhoSHdKM4fxeimphOAtfz47yjCfeA==", - "requires": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.7.0" - } + "jsonpath-plus": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-5.0.7.tgz", + "integrity": "sha512-7TS6wsiw1s2UMK/A6nA4n0aUJuirCVhJ87nWX5je5MPOl0z5VTr2qs7nMP8NZ2ed3rlt6kePTqddgVPE9F0i0w==" }, "keypress": { "version": "0.2.1", @@ -1025,92 +2772,21 @@ "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.foreach": { + "lodash.isequal": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.0.tgz", + "integrity": "sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ==", "requires": { "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", "fecha": "^4.2.0", "ms": "^2.1.1", + "safe-stable-stringify": "^1.1.0", "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "lru-cache": { @@ -1130,14 +2806,29 @@ } }, "m3u8stream": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.3.tgz", - "integrity": "sha512-0nAcdrF8YJKUkb6PzWdvGftTPyCVWgoiot1AkNVbPKTeIGsWs6DrOjifrJ0Zi8WQfQmD2SuVCjkYIOip12igng==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.4.tgz", + "integrity": "sha512-sco80Db+30RvcaIOndenX6E6oQNgTiBKeJbFPc+yDXwPQIkryfboEbCvXPlBRq3mQTCVPQO93TDVlfRwqpD35w==", "requires": { "miniget": "^4.0.0", "sax": "^1.2.4" } }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "memoizee": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", @@ -1161,22 +2852,22 @@ } }, "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" }, "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "requires": { - "mime-db": "1.45.0" + "mime-db": "1.50.0" } }, "miniget": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.1.0.tgz", - "integrity": "sha512-kzhrNv5L7LlomwGmPGQsLQ2PnT1LeJJWfB0wNFGyv426gEM1gsfziBQmfkr6XOBA8EusZg9nowlNT5CbuKTjZg==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.1.tgz", + "integrity": "sha512-O/DduzDR6f+oDtVype9S/Qu5hhnx73EDYGyZKwU/qN82lehFZdfhoa4DT51SpsO+8epYrB3gcRmws56ROfTIoQ==" }, "minimatch": { "version": "3.0.4", @@ -1192,9 +2883,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "requires": { "yallist": "^4.0.0" } @@ -1209,17 +2900,14 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "ms": { "version": "2.1.2", @@ -1227,19 +2915,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" - }, - "needle": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", - "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "next-tick": { "version": "1.0.0", @@ -1247,14 +2925,17 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, "node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", + "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "requires": { + "whatwg-url": "^5.0.0" + } }, "node-fzf": { "version": "0.5.3", @@ -1270,66 +2951,37 @@ } }, "node-gyp-build": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", - "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" + "abbrev": "1" } }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "requires": { - "boolbase": "~1.0.0" + "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", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1351,36 +3003,17 @@ "fn.name": "1.x.x" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "ow": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", + "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "@sindresorhus/is": "^4.0.1", + "callsites": "^3.1.0", + "dot-prop": "^6.0.1", + "lodash.isequal": "^4.5.0", + "type-fest": "^1.2.1", + "vali-date": "^1.0.0" } }, "parse-cache-control": { @@ -1388,20 +3021,29 @@ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" }, + "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-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, "prism-media": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.3.tgz", - "integrity": "sha512-fSrR66n0l6roW9Rx4rSLMyTPTjRTiXy5RVqDOurACQ6si1rKHHKDU5gwBJoCsIV0R3o9gi+K50akl/qyw1C74A==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "requires": {} }, "process-nextick-args": { "version": "2.0.1", @@ -1413,25 +3055,18 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "redstar": { @@ -1451,14 +3086,14 @@ } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "safe-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", + "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" }, "sax": { "version": "1.2.4", @@ -1466,9 +3101,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" } @@ -1484,9 +3119,9 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" }, "simple-swizzle": { "version": "0.2.2", @@ -1504,23 +3139,17 @@ "node-addon-api": "*" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "escodegen": "^1.8.1" + "safe-buffer": "~5.1.0" } }, "string-width": { @@ -1532,14 +3161,6 @@ "strip-ansi": "^4.0.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -1555,15 +3176,10 @@ } } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -1571,13 +3187,6 @@ "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } } }, "text-hex": { @@ -1594,11 +3203,26 @@ "next-tick": "1" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "ts-mixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", + "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, "ttys": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/ttys/-/ttys-0.0.3.tgz", @@ -1614,13 +3238,10 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, "typedarray": { "version": "0.0.6", @@ -1628,14 +3249,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz", - "integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==" - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==" }, "universalify": { "version": "2.0.0", @@ -1643,11 +3259,11 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "utf-8-validate": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz", - "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.6.tgz", + "integrity": "sha512-hoY0gOf9EkCw+nimK21FVKHUIG1BMqSiRwxB/q3A9yKZOrOI99PP77BxmarDqWz6rG3vVYiBWfhG8z2Tl+7fZA==", "requires": { - "node-gyp-build": "~3.7.0" + "node-gyp-build": "^4.2.0" } }, "util-deprecate": { @@ -1655,6 +3271,25 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -1677,6 +3312,18 @@ "stack-trace": "0.0.x", "triple-beam": "^1.3.0", "winston-transport": "^4.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "winston-transport": { @@ -1686,51 +3333,18 @@ "requires": { "readable-stream": "^2.3.7", "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==" + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} }, "yallist": { "version": "4.0.0", @@ -1738,24 +3352,24 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yt-search": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.5.1.tgz", - "integrity": "sha512-RD2pZwU4ac4Q0Cku1oeas2T3cRliEFzPsMvkrjf5D1JxP4l7sPeJhRhC4vjDdEwBdHr78Ka5NyMpbaNKZ17/WQ==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.1.tgz", + "integrity": "sha512-7xORFvQMkzkVVOsRVV6qW+Ld8FIl8OQcN3ThsDf04jwr2GyR4miGmC98IA2X/gjTWUEj2SRhmzw6kApj3LHdsQ==", "requires": { "async.parallellimit": "~0.5.2", "boolstring": "~1.0.2", - "cheerio": "~0.22.0", - "dasu": "~0.4.1", + "cheerio": "^1.0.0-rc.10", + "dasu": "~0.4.2", "human-time": "0.0.2", - "jsonpath": "~1.0.2", + "jsonpath-plus": "~5.0.2", "minimist": "~1.2.5", "node-fzf": "~0.5.1" } }, "ytdl-core": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.4.1.tgz", - "integrity": "sha512-VRqJ1pPEfIt7Lja2bKaTRqO47GfVbqhFfKqtmxU5Pp2BM0HUb0gVyf3wL9HlA+Vb4OblXs2MzSqWI8Fi1sSk4Q==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.1.tgz", + "integrity": "sha512-6Jbp5RDhUEozlaJQAR+l8oV8AHsx3WUXxSyPxzE6wOIAaLql7Hjiy0ZM58wZoyj1YEenlEPjEqcJIjKYKxvHtQ==", "requires": { "m3u8stream": "^0.8.3", "miniget": "^4.0.0", @@ -1763,11 +3377,11 @@ } }, "ytpl": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.0.4.tgz", - "integrity": "sha512-lXm3LvFvs2RixD6PTDay5jXRhaMSo/Upw7P60/FgQFvNrgSYRwMpR3nB1v3scu84R2XcS6kuENhPD2M4x/920A==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.2.3.tgz", + "integrity": "sha512-d18HibT8wzEWzWsXFS6u6kUKCCFL20roFVwpjyGCzl+nP8sOAz5xSLafxLflkkoeXJU8AFuO7BEsJXIREASvFQ==", "requires": { - "miniget": "^4.1.0" + "miniget": "^4.2.1" } }, "zlib-sync": { diff --git a/package.json b/package.json old mode 100644 new mode 100755 index cd1b467..d6d58e8 --- a/package.json +++ b/package.json @@ -7,32 +7,26 @@ "start": "tsc && node dist/app", "build": "tsc" }, - "author": "Malexion", + "author": "Malexion, spectral369", "license": "ISC", "dependencies": { - "@discordjs/opus": "^0.3.3", - "@types/jsonfile": "^5.0.1", - "@types/minimist": "^1.2.0", - "@types/moment": "^2.13.0", - "@types/node": "^12.12.48", - "@types/winston": "^2.4.4", - "@types/yt-search": "^2.3.0", - "bufferutil": "^4.0.1", - "discord-bot-quickstart": "0.0.15", + "@discordjs/opus": "github:discordjs/opus", + "@types/node": "^16.10.3", + "bufferutil": "^4.0.4", + "discord-bot-quickstart": "^0.0.15", "discord-command-parser": "^1.5.3", - "discord.js": "^12.5.1", - "erlpack": "^0.1.3", - "ffmpeg-static": "^4.2.7", - "jsonfile": "^2.4.0", - "minimist": "^1.2.3", - "moment": "^2.27.0", + "discord.js": "^13.2.0", + "ffmpeg-static": "^4.4.0", + "jsonfile": "^6.1.0", + "minimist": "^1.2.5", + "moment": "^2.29.1", "sodium": "^3.0.2", - "typescript": "^3.9.6", - "utf-8-validate": "^5.0.2", + "typescript": "^4.4.3", + "utf-8-validate": "^5.0.6", "winston": "^3.3.3", - "yt-search": "^2.5.1", - "ytdl-core": "^4.4.1", - "ytpl": "^2.0.4", + "yt-search": "^2.10.1", + "ytdl-core": "^4.9.1", + "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" } } diff --git a/playlists/Demo.json b/playlists/Demo.json old mode 100644 new mode 100755 diff --git a/playlists/test2.json b/playlists/test2.json old mode 100644 new mode 100755 diff --git a/src/app.ts b/src/app.ts old mode 100644 new mode 100755 diff --git a/src/bot/bot-config.ts b/src/bot/bot-config.ts old mode 100644 new mode 100755 diff --git a/src/bot/bot-status.ts b/src/bot/bot-status.ts old mode 100644 new mode 100755 diff --git a/src/bot/bot.ts b/src/bot/bot.ts old mode 100644 new mode 100755 index 567d315..162be17 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -72,20 +72,24 @@ export class RhythmBot extends IBot { joinUserChannel(msg) .then(connection => { this.player.connection = connection; - msg.channel.send(createInfoEmbed(`Joined Channel: ${connection.channel.name}`)); + msg.channel.send({embed: createInfoEmbed('Joined Channel', "use !add yt link")}); + if(this.config.auto.play) this.player.play(); }) .catch(err => { - msg.channel.send(createErrorEmbed(err)); + msg.channel.send({embed:createErrorEmbed(err)}); }); }) - .on('leave', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.player.stop(); + .on('leave', (cmd: SuccessfulParsedMessage, msg: Message) => { + this.player.stop(); this.player.connection = null; - this.client.voice.connections.forEach(conn => { + this.client.voice.connections.forEach( conn => { conn.disconnect(); - msg.channel.send(createInfoEmbed(`Disconnecting from channel: ${conn.channel.name}`)); + msg.channel.send({embed: createInfoEmbed('Disconnecting from channel:', conn.channel.name)}); + + + }); }) .on('play', (cmd: SuccessfulParsedMessage, msg: Message) => { @@ -94,7 +98,8 @@ export class RhythmBot extends IBot { joinUserChannel(msg) .then(conn => { this.player.connection = conn; - msg.channel.send(createInfoEmbed(`Joined Channel: ${conn.channel.name}`)); + msg.channel.send({embed: createInfoEmbed('Joined Channel:', conn.channel.name)}); + done(); }); } else @@ -110,9 +115,11 @@ export class RhythmBot extends IBot { let media = this.player.queue.first; if(this.player.playing && this.player.dispatcher) { let elapsed = secondsToTimestamp(this.player.dispatcher.totalStreamTime / 1000); - msg.channel.send(createInfoEmbed('Time Elapsed', `${elapsed} / ${media.duration}`)); + + msg.channel.send({embed: createInfoEmbed('Time Elapsed:', elapsed)}); } else if(this.player.queue.first) { - msg.channel.send(createInfoEmbed('Time Elapsed', `00:00:00 / ${media.duration}`)); + msg.channel.send({embed: createInfoEmbed('Time Elapsed', `00:00:00 / ${media.duration}`)}); + } }) .on('search', (cmd: SuccessfulParsedMessage, msg: Message) => { @@ -129,7 +136,7 @@ export class RhythmBot extends IBot { .addField('Duration', `${v.timestamp}`, true) .setThumbnail(v.image) .setURL(v.url); - msg.channel.send(embed) + msg.channel.send({embed:embed}) .then(m => m.react(this.config.emojis.addSong)); }); }); @@ -137,11 +144,23 @@ export class RhythmBot extends IBot { .on('add', (cmd: SuccessfulParsedMessage, msg: Message) => { if(cmd.arguments.length > 0) { cmd.arguments.forEach(arg => { - let parts = arg.split(':'); - if(parts.length == 2) { - this.player.addMedia({ type: parts[0], url: parts[1], requestor: msg.author.username }); + // let parts = arg.split(':'); + // if(parts.length == 2) { + let items = this.player.queue; + if(arg.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ + if(items.length<=1){ + + this.player.addMedia({type:'youtube', url:arg,requestor:msg.author.username}).then(()=>{this.player.play()}); + + + + }else{ + this.player.addMedia({type:'youtube', url:arg,requestor:msg.author.username}); + } + + // this.player.addMedia({ type: parts[0], url: parts[1], requestor: msg.author.username }); } else - msg.channel.send(createErrorEmbed(`Invalid media type format`)); + msg.channel.send({embed: createErrorEmbed(`Invalid media type format`)}); }); } }) @@ -164,9 +183,11 @@ export class RhythmBot extends IBot { let items = this.player.queue .map((item, idx) => `${idx + 1}. Type: "${item.type}", Title: "${item.name}${item.requestor ? `", Requested By: ${item.requestor}`:''}"`); if(items.length > 0) - msg.channel.send(createInfoEmbed('Current Playing Queue', items.join('\n\n'))); + msg.channel.send({embed:createInfoEmbed('Current Playing Queue', items.join('\n\n'))}); + else - msg.channel.send(createInfoEmbed(`There are no songs in the queue.`)); + msg.channel.send({embed: createInfoEmbed(`There are no songs in the queue.`,"Please !add songs")}); + }) .on('clear', (cmd: SuccessfulParsedMessage, msg: Message) => { this.player.clear(); @@ -197,11 +218,13 @@ export class RhythmBot extends IBot { this.player.setVolume(volume); } } - msg.channel.send(createInfoEmbed(`Volume is at ${this.player.getVolume()}`)); + msg.channel.send({embed: createInfoEmbed('Volume is at:', this.player.getVolume())}); + }) .on('repeat', (cmd: SuccessfulParsedMessage, msg: Message) => { this.config.queue.repeat = !this.config.queue.repeat; - msg.channel.send(createInfoEmbed(`Repeat mode is ${this.config.queue.repeat ? 'on':'off'}`)); + msg.channel.send({embed :createInfoEmbed('Repeat mode is: ', this.config.queue.repeat ? 'on':'off')}); + }); } diff --git a/src/bot/index.ts b/src/bot/index.ts old mode 100644 new mode 100755 diff --git a/src/helpers/helpers.ts b/src/helpers/helpers.ts old mode 100644 new mode 100755 index eb97254..41be080 --- a/src/helpers/helpers.ts +++ b/src/helpers/helpers.ts @@ -34,7 +34,7 @@ export function createErrorEmbed(message: string) { .setDescription(message); } -export function createInfoEmbed(title: string, message: string = '') { +export function createInfoEmbed(title: string, message: string) { return new MessageEmbed() .setColor('#0099ff') .setTitle(title) diff --git a/src/helpers/index.ts b/src/helpers/index.ts old mode 100644 new mode 100755 diff --git a/src/media/index.ts b/src/media/index.ts old mode 100644 new mode 100755 diff --git a/src/media/media-item.model.ts b/src/media/media-item.model.ts old mode 100644 new mode 100755 diff --git a/src/media/media-player.ts b/src/media/media-player.ts old mode 100644 new mode 100755 index dbfa6af..78e8239 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -44,7 +44,7 @@ export class MediaPlayer { }) .then((item: MediaItem) => { if(this.channel && item) - this.channel.send( + this.channel.send({embed: createEmbed() .setTitle('Track Added') .addFields( @@ -52,11 +52,11 @@ export class MediaPlayer { { name: 'Position:', value: `${this.queue.indexOf(item) + 1}`, inline: true }, { name: 'Requested By:', value: item.requestor, inline: true } ) - ); + } ); }) .catch(err => { if(this.channel) - this.channel.send(createErrorEmbed(`Error adding track: ${err}`)); + this.channel.send({embed: createErrorEmbed(`Error adding track: ${err}`)}); }); } @@ -70,7 +70,7 @@ export class MediaPlayer { this.queue.dequeue(item); this.determineStatus(); if(this.channel) - this.channel.send(createInfoEmbed(`Track Removed`, `${item.name}`)); + this.channel.send({embed: createInfoEmbed('Track Removed:', item.name)}); } clear() { @@ -79,7 +79,8 @@ export class MediaPlayer { this.queue.clear(); this.determineStatus(); if(this.channel) - this.channel.send(createInfoEmbed(`Playlist Cleared`)); + this.channel.send({embed: createInfoEmbed('Playlist Cleared',"add songs")}); + } dispatchStream(stream: Readable, item: MediaItem) { @@ -99,12 +100,12 @@ export class MediaPlayer { this.playing = true; this.determineStatus(); if(this.channel) { - const msg = await this.channel.send( + const msg = await this.channel.send({embed: createEmbed() .setTitle('▶️ Now playing') .setDescription(`${item.name}`) .addField('Requested By', `${item.requestor}`) - ); + }); msg.react(this.config.emojis.stopSong); msg.react(this.config.emojis.playSong); msg.react(this.config.emojis.pauseSong); @@ -118,7 +119,7 @@ export class MediaPlayer { this.skip(); this.logger.error(err); if(this.channel) - this.channel.send(createErrorEmbed(`Error Playing Song: ${err}`)); + this.channel.send({embed:createErrorEmbed(`Error Playing Song: ${err}`)}); }); this.dispatcher.on('close', () => { this.logger.debug(`Stream Closed`); @@ -161,9 +162,11 @@ export class MediaPlayer { play() { if(this.queue.length == 0 && this.channel) - this.channel.send(createInfoEmbed(`Queue is empty! Add some songs!`)); + this.channel.send({embed: createInfoEmbed(`Queue is empty! Add some songs!`,"Use !add yt link")}); + if(this.playing && !this.paused) - this.channel.send(createInfoEmbed(`Already playing a song!`)); + this.channel.send({embed: createInfoEmbed(`Already playing a song!`,'wait for it to finish')}); + let item = this.queue.first; if(item && this.connection) { let type = this.typeRegistry.get(item.type); @@ -178,7 +181,8 @@ export class MediaPlayer { this.paused = false; this.determineStatus(); if(this.channel) - this.channel.send(createInfoEmbed(`⏯️ "${this.queue.first.name}" resumed`)); + this.channel.send({embed: createInfoEmbed('⏯️this.queue.first.name','resumed')}); + } } } @@ -194,7 +198,8 @@ export class MediaPlayer { this.dispatcher.destroy(); this.determineStatus(); if(this.channel) - this.channel.send(createInfoEmbed(`⏹️ "${item.name}" stopped`)); + this.channel.send({embed: createInfoEmbed('⏹️ item.name', 'stopped')}); + } } @@ -205,12 +210,14 @@ export class MediaPlayer { this.dispatcher.pause(); this.dispatcher.destroy(); if(this.channel) - this.channel.send(createInfoEmbed(`⏭️ "${item.name}" skipped`)); + this.channel.send({embed : createInfoEmbed('⏭️ item.name', 'skipped')}); + } else if(this.queue.length > 0) { let item = this.queue.first; this.queue.dequeue(); if(this.channel) - this.channel.send(createInfoEmbed(`⏭️ "${item.name}" skipped`)); + this.channel.send({embed: createInfoEmbed('⏭️ item.name', 'skipped')}); + } this.determineStatus(); } @@ -221,7 +228,8 @@ export class MediaPlayer { this.paused = true; this.determineStatus(); if(this.channel) - this.channel.send(createInfoEmbed(`⏸️ "${this.queue.first.name}" paused`)); + this.channel.send({embed: createInfoEmbed('⏸️ this.queue.first.name', ' paused')}); + } } @@ -231,7 +239,8 @@ export class MediaPlayer { this.queue.shuffle(); this.determineStatus(); if(this.channel) - this.channel.send(createInfoEmbed(`🔀 Queue Shuffled`)); + this.channel.send({embed: createInfoEmbed(`🔀 Queue Shuffled`,"random")}); + } move(currentIdx: number, targetIdx: number) { diff --git a/src/media/media-queue.ts b/src/media/media-queue.ts old mode 100644 new mode 100755 diff --git a/src/media/media-type.model.ts b/src/media/media-type.model.ts old mode 100644 new mode 100755 diff --git a/src/plugins/playlist.ts b/src/plugins/playlist.ts old mode 100644 new mode 100755 index fa766e0..a4c13f8 --- a/src/plugins/playlist.ts +++ b/src/plugins/playlist.ts @@ -33,7 +33,7 @@ export default class PlaylistPlugin extends IBotPlugin { .filter(file => file.includes('.json')) .map((file, i) => `${i + 1}. ${file.replace('.json', '')}`); - msg.channel.send(createInfoEmbed(`Playlists`, `${files.length == 0 ? 'No Playlists' : files.join('\n')}`)); + msg.channel.send({embed: createInfoEmbed(`Playlists`, `${files.length == 0 ? 'No Playlists' : files.join('\n')}`)}); } load(cmd: SuccessfulParsedMessage, msg: Message) { @@ -48,7 +48,8 @@ export default class PlaylistPlugin extends IBotPlugin { this.bot.player.queue.push(...queue.list); } this.bot.player.determineStatus(); - msg.channel.send(createInfoEmbed(`Loaded Playlist "${name}"`)); + msg.channel.send({embed: createInfoEmbed('Loaded Playlist:',name)}); + msg.channel.send('test'); } } } @@ -60,7 +61,7 @@ export default class PlaylistPlugin extends IBotPlugin { if(queue.list.length > 0) { writeJson(queue, playlistDir, `${name}.json`); } - msg.channel.send(createInfoEmbed(`Saved Playlist "${name}"`)); + msg.channel.send({embed: createInfoEmbed('Saved Playlist', name)}); } } @@ -68,7 +69,7 @@ export default class PlaylistPlugin extends IBotPlugin { let name = cmd.arguments[1]; if(name && fileExists(playlistDir, `${name}.json`)) { deleteFile(playlistDir, `${name}.json`); - msg.channel.send(createInfoEmbed(`Deleted Playlist "${name}"`)); + msg.channel.send({embed: createInfoEmbed('Deleted Playlist',name)}); } } diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts old mode 100644 new mode 100755 index d41340d..8946229 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -14,6 +14,7 @@ export default class YoutubePlugin extends IBotPlugin { preInitialize(bot: IBot): void { this.bot = bot as RhythmBot; this.bot.helptext += '\n`youtube [url/idfragment]` - Add youtube audio to the queue\n'; + this.bot.helptext += '\n` !add youtube:*youtubecode*\n' } registerDiscordCommands(map: CommandMap<(cmd: SuccessfulParsedMessage, msg: Message) => void>) { @@ -37,9 +38,10 @@ export default class YoutubePlugin extends IBotPlugin { .catch(err => error(err)); }), getDetails: (item: MediaItem) => new Promise((done, error) => { - item.url = item.url.includes('://') ? item.url : `https://www.youtube.com/watch?v=${item.url}`; - ytdl.getInfo(item.url) - .then(info => { + //item.url = item.url.includes('://') ? item.url : `https://www.youtube.com/watch?v=${item.url}`; + + ytdl.getInfo(item.url) + .then( info => { item.name = info.videoDetails.title ? info.videoDetails.title : 'Unknown'; item.duration = secondsToTimestamp(parseInt(info.videoDetails.lengthSeconds) || 0); done(item); diff --git a/tsconfig.json b/tsconfig.json old mode 100644 new mode 100755 From db05d0494257d963a73029201dfd4dd0efe61239 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 9 Oct 2021 13:04:26 +0300 Subject: [PATCH 02/23] play yt link direct from play command & minor string fix --- helptext.txt | 2 +- package-lock.json | 2 +- src/bot/bot.ts | 6 +++++- src/media/media-player.ts | 12 ++++++------ 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/helptext.txt b/helptext.txt index 3a4be9a..7cf9a03 100755 --- a/helptext.txt +++ b/helptext.txt @@ -8,7 +8,7 @@ Commands: `pause` - Pause the current song `resume` - Resume the current song `time` - Time of the current song -`add [type] [url/idfragment]` - Add a song to the end of the queue +`add *yt link*` - Add a song to the end of the queue `remove [index]` - Remove song at index `skip` - Skip the current song `stop` - Stop the current song and reset to the beginning diff --git a/package-lock.json b/package-lock.json index 4e7f53b..4dfd246 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1975,7 +1975,7 @@ }, "@discordjs/opus": { "version": "git+ssh://git@github.com/discordjs/opus.git#38199a39066b9cbeea6739e8e9ed44d432c393a9", - "from": "@discordjs/opus@discordjs/opus", + "from": "@discordjs/opus@github:discordjs/opus", "requires": { "@discordjs/node-pre-gyp": "^0.4.1", "node-addon-api": "^4.0.0" diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 162be17..adf73a7 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -72,7 +72,7 @@ export class RhythmBot extends IBot { joinUserChannel(msg) .then(connection => { this.player.connection = connection; - msg.channel.send({embed: createInfoEmbed('Joined Channel', "use !add yt link")}); + msg.channel.send({embed: createInfoEmbed('Joined Channel', "use !add *yt link* to queue a song")}); if(this.config.auto.play) this.player.play(); @@ -105,7 +105,11 @@ export class RhythmBot extends IBot { } else done(); }).then(() => { + if(this.player.queue.length<=1 && cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ + this.player.addMedia({type:'youtube', url:cmd.body,requestor:msg.author.username}).then(()=>{this.player.play()}); + }else{ this.player.play(); + } }); }) .on('pause', (cmd: SuccessfulParsedMessage, msg: Message) => { diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 78e8239..74eb626 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -181,7 +181,7 @@ export class MediaPlayer { this.paused = false; this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed('⏯️this.queue.first.name','resumed')}); + this.channel.send({embed: createInfoEmbed(`⏯️${this.queue.first.name}`,'resumed')}); } } @@ -198,7 +198,7 @@ export class MediaPlayer { this.dispatcher.destroy(); this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed('⏹️ item.name', 'stopped')}); + this.channel.send({embed: createInfoEmbed(`⏹️ ${item.name}`, 'stopped')}); } } @@ -210,13 +210,13 @@ export class MediaPlayer { this.dispatcher.pause(); this.dispatcher.destroy(); if(this.channel) - this.channel.send({embed : createInfoEmbed('⏭️ item.name', 'skipped')}); + this.channel.send({embed : createInfoEmbed(`⏭️ ${item.name}`, 'skipped')}); } else if(this.queue.length > 0) { let item = this.queue.first; this.queue.dequeue(); if(this.channel) - this.channel.send({embed: createInfoEmbed('⏭️ item.name', 'skipped')}); + this.channel.send({embed: createInfoEmbed(`⏭️ ${item.name}`, 'skipped')}); } this.determineStatus(); @@ -228,7 +228,7 @@ export class MediaPlayer { this.paused = true; this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed('⏸️ this.queue.first.name', ' paused')}); + this.channel.send({embed: createInfoEmbed(`⏸️ ${this.queue.first.name}`, 'paused')}); } } @@ -239,7 +239,7 @@ export class MediaPlayer { this.queue.shuffle(); this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed(`🔀 Queue Shuffled`,"random")}); + this.channel.send({embed: createInfoEmbed(`🔀 Queue Shuffled`,'Sej Umesel')}); } From ebe681a42cfc924c614ec1d54dcf088b14cdb339 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Tue, 12 Oct 2021 14:45:16 +0300 Subject: [PATCH 03/23] you can enhanced play command, posible long audio err fix --- package-lock.json | 18 ------------------ package.json | 1 - src/bot/bot.ts | 23 ++++++++++++++++++++++- src/media/media-player.ts | 8 ++++++-- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dfd246..418e945 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", - "sodium": "^3.0.2", "typescript": "^4.4.3", "utf-8-validate": "^5.0.6", "winston": "^3.3.3", @@ -1566,15 +1565,6 @@ "is-arrayish": "^0.3.1" } }, - "node_modules/sodium": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz", - "integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "*" - } - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -3131,14 +3121,6 @@ "is-arrayish": "^0.3.1" } }, - "sodium": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz", - "integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==", - "requires": { - "node-addon-api": "*" - } - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", diff --git a/package.json b/package.json index d6d58e8..7d7322d 100755 --- a/package.json +++ b/package.json @@ -20,7 +20,6 @@ "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", - "sodium": "^3.0.2", "typescript": "^4.4.3", "utf-8-validate": "^5.0.6", "winston": "^3.3.3", diff --git a/src/bot/bot.ts b/src/bot/bot.ts index adf73a7..0d19a96 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -107,7 +107,28 @@ export class RhythmBot extends IBot { }).then(() => { if(this.player.queue.length<=1 && cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ this.player.addMedia({type:'youtube', url:cmd.body,requestor:msg.author.username}).then(()=>{this.player.play()}); - }else{ + }else if(cmd.body.length > 3 && !cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ + yts({ + query: cmd.body, + pages: 1 + }, (err, result) => { + result.videos + .slice(0, 1) + .forEach((v, idx) => { + const embed = createEmbed() + .setTitle(`${v.title}`) + .addField('Author:', `${v.author.name}`, true) + .addField('Duration', `${v.timestamp}`, true) + .setThumbnail(v.image) + .setURL(v.url); + msg.channel.send({embed:embed}) + .then(()=> { + this.player.addMedia({type:'youtube', url:v.url, requestor:msg.author.username}).then(()=>{this.player.play()}); + }); + }); + }); + + }else if(!this.player.playing && this.player.queue.length>0 ){ this.player.play(); } }); diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 74eb626..a6b9b25 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -94,7 +94,11 @@ export class MediaPlayer { bitrate: this.config.stream.bitrate, fec: this.config.stream.forwardErrorCorrection, plp: this.config.stream.packetLossPercentage, - highWaterMark: 1<<25 + filter: 'audioonly', + quality: 'highestaudio', + //posibila solutie dlChunkSize: 1<<12, + // highWaterMark: 1<<25 //orig + highWaterMark: 1 << 28 }); this.dispatcher.on('start', async () => { this.playing = true; @@ -119,7 +123,7 @@ export class MediaPlayer { this.skip(); this.logger.error(err); if(this.channel) - this.channel.send({embed:createErrorEmbed(`Error Playing Song: ${err}`)}); + this.channel.send({embed:createErrorEmbed(`Aici err de rezolvat Miki !! Error Playing Song: ${err}`)}); }); this.dispatcher.on('close', () => { this.logger.debug(`Stream Closed`); From fb7c5edc1d591150d63f63caa15dbad686fca11a Mon Sep 17 00:00:00 2001 From: spectral369 Date: Tue, 12 Oct 2021 20:31:45 +0300 Subject: [PATCH 04/23] posible fix for input stream error part2 --- src/media/media-player.ts | 2 -- src/plugins/youtube.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/media/media-player.ts b/src/media/media-player.ts index a6b9b25..23de78b 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -94,8 +94,6 @@ export class MediaPlayer { bitrate: this.config.stream.bitrate, fec: this.config.stream.forwardErrorCorrection, plp: this.config.stream.packetLossPercentage, - filter: 'audioonly', - quality: 'highestaudio', //posibila solutie dlChunkSize: 1<<12, // highWaterMark: 1<<25 //orig highWaterMark: 1 << 28 diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts index 8946229..7cde49c 100755 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -49,7 +49,7 @@ export default class YoutubePlugin extends IBotPlugin { .catch(err => error(err)); }), getStream: (item: MediaItem) => new Promise((done, error) => { - let stream = ytdl(item.url, { filter: 'audioonly', quality: 'highestaudio' }); + let stream = ytdl(item.url, { filter: 'audioonly', quality: 'highestaudio', highWaterMark:1<<28, dlChunkSize:1<<12 }); if(stream) done(stream); else From 16fa0e45798aab1d4d5fb3812db1cf948d23e4c5 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 16 Oct 2021 15:13:15 +0300 Subject: [PATCH 05/23] Reversed embedded messages, fixed play args, updated helptext --- helptext.txt | 2 +- src/bot/bot.ts | 34 ++++++++++++++++++++-------------- src/helpers/helpers.ts | 2 +- src/media/media-player.ts | 24 +++++++++++------------- 4 files changed, 33 insertions(+), 29 deletions(-) diff --git a/helptext.txt b/helptext.txt index 7cf9a03..3ebf528 100755 --- a/helptext.txt +++ b/helptext.txt @@ -4,7 +4,7 @@ Commands: `help` - Get the help text `join` - Join user voice channel `leave` - Leave voice channel -`play` - Play the first song in the queue +`play *yt link* or just the string to search` - Play the first song in the queue `pause` - Pause the current song `resume` - Resume the current song `time` - Time of the current song diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 0d19a96..175dd0f 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -72,7 +72,7 @@ export class RhythmBot extends IBot { joinUserChannel(msg) .then(connection => { this.player.connection = connection; - msg.channel.send({embed: createInfoEmbed('Joined Channel', "use !add *yt link* to queue a song")}); + msg.channel.send({embed: createInfoEmbed(`Joined Channel: ${connection.channel.name}`)}); if(this.config.auto.play) this.player.play(); @@ -86,7 +86,7 @@ export class RhythmBot extends IBot { this.player.connection = null; this.client.voice.connections.forEach( conn => { conn.disconnect(); - msg.channel.send({embed: createInfoEmbed('Disconnecting from channel:', conn.channel.name)}); + msg.channel.send({embed: createInfoEmbed(`Disconnecting from channel: ${conn.channel.name}`)}); @@ -98,16 +98,19 @@ export class RhythmBot extends IBot { joinUserChannel(msg) .then(conn => { this.player.connection = conn; - msg.channel.send({embed: createInfoEmbed('Joined Channel:', conn.channel.name)}); + msg.channel.send({embed: createInfoEmbed(`Joined Channel: ${conn.channel.name}`)}); done(); }); } else done(); }).then(() => { - if(this.player.queue.length<=1 && cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ - this.player.addMedia({type:'youtube', url:cmd.body,requestor:msg.author.username}).then(()=>{this.player.play()}); - }else if(cmd.body.length > 3 && !cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ + if(/*this.player.queue.length==1 &&*/ cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ + this.player.addMedia({type:'youtube', url:cmd.body,requestor:msg.author.username}).then(()=>{ + if(!this.player.playing) + this.player.play(); + }); + }else if(cmd.body.length > 0 && !cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ yts({ query: cmd.body, pages: 1 @@ -123,14 +126,17 @@ export class RhythmBot extends IBot { .setURL(v.url); msg.channel.send({embed:embed}) .then(()=> { - this.player.addMedia({type:'youtube', url:v.url, requestor:msg.author.username}).then(()=>{this.player.play()}); + this.player.addMedia({type:'youtube', url:v.url, requestor:msg.author.username}).then(()=>{ + if(!this.player.playing) + this.player.play(); + }); }); }); }); - }else if(!this.player.playing && this.player.queue.length>0 ){ + }else //check if it's ok ! this.player.play(); - } + }); }) .on('pause', (cmd: SuccessfulParsedMessage, msg: Message) => { @@ -141,9 +147,9 @@ export class RhythmBot extends IBot { if(this.player.playing && this.player.dispatcher) { let elapsed = secondsToTimestamp(this.player.dispatcher.totalStreamTime / 1000); - msg.channel.send({embed: createInfoEmbed('Time Elapsed:', elapsed)}); + msg.channel.send({embed: createInfoEmbed(`Time Elapsed`,`${elapsed} / ${media.duration}`)}); } else if(this.player.queue.first) { - msg.channel.send({embed: createInfoEmbed('Time Elapsed', `00:00:00 / ${media.duration}`)}); + msg.channel.send({embed: createInfoEmbed(`Time Elapsed`,`00.00.00 / ${media.duration}`)}); } }) @@ -211,7 +217,7 @@ export class RhythmBot extends IBot { msg.channel.send({embed:createInfoEmbed('Current Playing Queue', items.join('\n\n'))}); else - msg.channel.send({embed: createInfoEmbed(`There are no songs in the queue.`,"Please !add songs")}); + msg.channel.send({embed: createInfoEmbed(`There are no songs in the queue.`)}); }) .on('clear', (cmd: SuccessfulParsedMessage, msg: Message) => { @@ -243,12 +249,12 @@ export class RhythmBot extends IBot { this.player.setVolume(volume); } } - msg.channel.send({embed: createInfoEmbed('Volume is at:', this.player.getVolume())}); + msg.channel.send({embed: createInfoEmbed(`Volume is at ${this.player.getVolume()}`)}); }) .on('repeat', (cmd: SuccessfulParsedMessage, msg: Message) => { this.config.queue.repeat = !this.config.queue.repeat; - msg.channel.send({embed :createInfoEmbed('Repeat mode is: ', this.config.queue.repeat ? 'on':'off')}); + msg.channel.send({embed :createInfoEmbed(`Repeat mode is ${this.config.queue.repeat ? 'on' : 'off'}`)}); }); } diff --git a/src/helpers/helpers.ts b/src/helpers/helpers.ts index 41be080..2fd25f1 100755 --- a/src/helpers/helpers.ts +++ b/src/helpers/helpers.ts @@ -34,7 +34,7 @@ export function createErrorEmbed(message: string) { .setDescription(message); } -export function createInfoEmbed(title: string, message: string) { +export function createInfoEmbed(title: string, message: string='') { return new MessageEmbed() .setColor('#0099ff') .setTitle(title) diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 23de78b..6f48b59 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -70,7 +70,7 @@ export class MediaPlayer { this.queue.dequeue(item); this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed('Track Removed:', item.name)}); + this.channel.send({embed: createInfoEmbed(`Track Removed: ${item.name}`)}); } clear() { @@ -79,7 +79,7 @@ export class MediaPlayer { this.queue.clear(); this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed('Playlist Cleared',"add songs")}); + this.channel.send({embed: createInfoEmbed(`Playlist Cleared!`)}); } @@ -94,8 +94,6 @@ export class MediaPlayer { bitrate: this.config.stream.bitrate, fec: this.config.stream.forwardErrorCorrection, plp: this.config.stream.packetLossPercentage, - //posibila solutie dlChunkSize: 1<<12, - // highWaterMark: 1<<25 //orig highWaterMark: 1 << 28 }); this.dispatcher.on('start', async () => { @@ -121,7 +119,7 @@ export class MediaPlayer { this.skip(); this.logger.error(err); if(this.channel) - this.channel.send({embed:createErrorEmbed(`Aici err de rezolvat Miki !! Error Playing Song: ${err}`)}); + this.channel.send({embed:createErrorEmbed(`@Miki-> Error Playing Song: ${err}`)}); }); this.dispatcher.on('close', () => { this.logger.debug(`Stream Closed`); @@ -164,10 +162,10 @@ export class MediaPlayer { play() { if(this.queue.length == 0 && this.channel) - this.channel.send({embed: createInfoEmbed(`Queue is empty! Add some songs!`,"Use !add yt link")}); + this.channel.send({embed: createInfoEmbed(`Queue is empty! Add some songs!`)}); if(this.playing && !this.paused) - this.channel.send({embed: createInfoEmbed(`Already playing a song!`,'wait for it to finish')}); + this.channel.send({embed: createInfoEmbed(`Already playing a song!`)}); let item = this.queue.first; if(item && this.connection) { @@ -183,7 +181,7 @@ export class MediaPlayer { this.paused = false; this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏯️${this.queue.first.name}`,'resumed')}); + this.channel.send({embed: createInfoEmbed(`⏯️ ${this.queue.first.name}resumed`)}); } } @@ -200,7 +198,7 @@ export class MediaPlayer { this.dispatcher.destroy(); this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏹️ ${item.name}`, 'stopped')}); + this.channel.send({embed: createInfoEmbed(`⏹️ ${item.name} stopped`)}); } } @@ -212,13 +210,13 @@ export class MediaPlayer { this.dispatcher.pause(); this.dispatcher.destroy(); if(this.channel) - this.channel.send({embed : createInfoEmbed(`⏭️ ${item.name}`, 'skipped')}); + this.channel.send({embed : createInfoEmbed(`⏭️ ${item.name} skipped`)}); } else if(this.queue.length > 0) { let item = this.queue.first; this.queue.dequeue(); if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏭️ ${item.name}`, 'skipped')}); + this.channel.send({embed: createInfoEmbed(`⏭️ ${item.name} skipped`)}); } this.determineStatus(); @@ -230,7 +228,7 @@ export class MediaPlayer { this.paused = true; this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏸️ ${this.queue.first.name}`, 'paused')}); + this.channel.send({embed: createInfoEmbed(`⏸️ ${this.queue.first.name} paused`)}); } } @@ -241,7 +239,7 @@ export class MediaPlayer { this.queue.shuffle(); this.determineStatus(); if(this.channel) - this.channel.send({embed: createInfoEmbed(`🔀 Queue Shuffled`,'Sej Umesel')}); + this.channel.send({embed: createInfoEmbed(`🔀 Queue Shuffled`)}); } From 96a72abbe26123558cc4fd7785046c8055fdc4a1 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Fri, 29 Oct 2021 21:09:15 +0300 Subject: [PATCH 06/23] add description command; better add command handling; manual merge from upstream --- helptext.txt | 1 + src/bot/bot.ts | 70 +++++++++++++++++++++-------------- src/media/media-item.model.ts | 1 + src/media/media-player.ts | 1 + src/plugins/youtube.ts | 1 + 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/helptext.txt b/helptext.txt index 3ebf528..205f082 100755 --- a/helptext.txt +++ b/helptext.txt @@ -18,3 +18,4 @@ Commands: `clear` - Clear songs in the queue `volume [0-100/nothing]` - Will set or get the current volume `repeat` - Toggle queue repeat mode +`desc` - Show song description diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 175dd0f..2aad59d 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -92,6 +92,11 @@ export class RhythmBot extends IBot { }); }) + .on('desc',(cmd:SuccessfulParsedMessage,msg:Message) =>{ + if(this.player.playing && this.player.dispatcher) { + msg.channel.send({embed: createInfoEmbed(`Description:`,`${this.player.queue.first.description}`)}); + } + }) .on('play', (cmd: SuccessfulParsedMessage, msg: Message) => { new Promise(done => { if(!this.player.connection) { @@ -153,43 +158,52 @@ export class RhythmBot extends IBot { } }) - .on('search', (cmd: SuccessfulParsedMessage, msg: Message) => { - yts({ - query: cmd.body, - pages: 1 - }, (err, result) => { - result.videos - .slice(0, 3) - .forEach((v, idx) => { - const embed = createEmbed() - .setTitle(`${v.title}`) - .addField('Author:', `${v.author.name}`, true) - .addField('Duration', `${v.timestamp}`, true) - .setThumbnail(v.image) - .setURL(v.url); - msg.channel.send({embed:embed}) - .then(m => m.react(this.config.emojis.addSong)); - }); - }); + //updated from original commit = 44d41f46f70dfd6effc21d7ae49b23a81453773 + .on('search', async (cmd: SuccessfulParsedMessage, msg: Message) => { + let noResults = false; + + if (cmd.body != null && cmd.body !== '') { + const videos = await yts({ query: cmd.body, pages: 1 }).then((res) => res.videos); + if (videos != null && videos.length > 0) { + await Promise.all( + videos + .slice(0, 3) + .map((video) => + createEmbed() + .setTitle(`${video.title}`) + .addField('Author:', `${video.author.name}`, true) + .addField('Duration', `${video.timestamp}`, true) + .setThumbnail(video.image) + .setURL(video.url) + ) + .map((embed) => + msg.channel.send(embed).then((m) => m.react(this.config.emojis.addSong)) + ) + ); + } else { + noResults = true; + } + } else { + noResults = true; + } + + if (noResults) { + msg.channel.send(createInfoEmbed(`No songs found`)); + } }) .on('add', (cmd: SuccessfulParsedMessage, msg: Message) => { if(cmd.arguments.length > 0) { cmd.arguments.forEach(arg => { - // let parts = arg.split(':'); - // if(parts.length == 2) { let items = this.player.queue; if(arg.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ - if(items.length<=1){ - - this.player.addMedia({type:'youtube', url:arg,requestor:msg.author.username}).then(()=>{this.player.play()}); - - - + if(items.length<=1){ + this.player.addMedia({type:'youtube', url:arg,requestor:msg.author.username}).then(()=>{ + if(!this.player.playing) + this.player.play(); + }); }else{ this.player.addMedia({type:'youtube', url:arg,requestor:msg.author.username}); } - - // this.player.addMedia({ type: parts[0], url: parts[1], requestor: msg.author.username }); } else msg.channel.send({embed: createErrorEmbed(`Invalid media type format`)}); }); diff --git a/src/media/media-item.model.ts b/src/media/media-item.model.ts index 7ff2c40..e9e9b15 100755 --- a/src/media/media-item.model.ts +++ b/src/media/media-item.model.ts @@ -4,4 +4,5 @@ export interface MediaItem { requestor?: string; name?: string; duration?: string; + description?:string; } diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 6f48b59..2f598ff 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -120,6 +120,7 @@ export class MediaPlayer { this.logger.error(err); if(this.channel) this.channel.send({embed:createErrorEmbed(`@Miki-> Error Playing Song: ${err}`)}); + process.exit(2); }); this.dispatcher.on('close', () => { this.logger.debug(`Stream Closed`); diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts index 7cde49c..fd7ca8a 100755 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -44,6 +44,7 @@ export default class YoutubePlugin extends IBotPlugin { .then( info => { item.name = info.videoDetails.title ? info.videoDetails.title : 'Unknown'; item.duration = secondsToTimestamp(parseInt(info.videoDetails.lengthSeconds) || 0); + item.description = info.videoDetails.description? info.videoDetails.description : "No description available!"; done(item); }) .catch(err => error(err)); From f3371bdfc07c1ec571d95fe6ee3b6d74ae24c15b Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 30 Oct 2021 11:45:52 +0300 Subject: [PATCH 07/23] fix banner change on song end/finish/skip --- src/media/media-player.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 2f598ff..8ea0399 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -127,7 +127,7 @@ export class MediaPlayer { if (this.dispatcher) { this.playing = false; this.dispatcher = null; - this.determineStatus(); + // this.determineStatus(); if(!this.stopping) { let track = this.queue.dequeue(); if(this.config.queue.repeat) @@ -138,6 +138,7 @@ export class MediaPlayer { } this.stopping = false; } + this.determineStatus(); }); this.dispatcher.on('finish', () => { this.logger.debug('Stream Finished'); @@ -158,6 +159,7 @@ export class MediaPlayer { }); this.dispatcher.on('end', (reason: string) => { this.logger.debug(`Stream Ended: ${reason}`); + this.determineStatus(); }); } From 6c5bcc2c608a6f8700c7eebea04926b24a59cf9d Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sun, 31 Oct 2021 12:29:13 +0200 Subject: [PATCH 08/23] This bot can now play Live Streams,Fix on banner messages, search command minor fix --- src/bot/bot.ts | 18 +++++++-------- src/media/media-item.model.ts | 1 + src/media/media-player.ts | 41 ++++++++++++++++++++++------------- src/plugins/youtube.ts | 11 ++++++---- 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 2aad59d..7e10702 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -141,6 +141,7 @@ export class RhythmBot extends IBot { }else //check if it's ok ! this.player.play(); + // this.player.determineStatus(); this was on when it worked }); }) @@ -168,18 +169,17 @@ export class RhythmBot extends IBot { await Promise.all( videos .slice(0, 3) - .map((video) => - createEmbed() + .map((video) =>{ + const embed = createEmbed() .setTitle(`${video.title}`) .addField('Author:', `${video.author.name}`, true) .addField('Duration', `${video.timestamp}`, true) .setThumbnail(video.image) - .setURL(video.url) - ) - .map((embed) => - msg.channel.send(embed).then((m) => m.react(this.config.emojis.addSong)) - ) - ); + .setURL(video.url); + msg.channel.send({embed:embed}) + .then(m => m.react(this.config.emojis.addSong)); + }) + ) } else { noResults = true; } @@ -188,7 +188,7 @@ export class RhythmBot extends IBot { } if (noResults) { - msg.channel.send(createInfoEmbed(`No songs found`)); + msg.channel.send({embed: createErrorEmbed(`No songs found OR No search string provided`)}); } }) .on('add', (cmd: SuccessfulParsedMessage, msg: Message) => { diff --git a/src/media/media-item.model.ts b/src/media/media-item.model.ts index e9e9b15..67fae9b 100755 --- a/src/media/media-item.model.ts +++ b/src/media/media-item.model.ts @@ -4,5 +4,6 @@ export interface MediaItem { requestor?: string; name?: string; duration?: string; + isLive?:boolean; description?:string; } diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 8ea0399..066d66d 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -34,8 +34,10 @@ export class MediaPlayer { .then((media) => { item.name = media.name; item.duration = media.duration; - this.determineStatus(); + item.description = media.description;//test + item.isLive = media.isLive;//test this.queue.enqueue(item); + this.determineStatus(); done(item); }) .catch(err => error(err)); @@ -53,6 +55,7 @@ export class MediaPlayer { { name: 'Requested By:', value: item.requestor, inline: true } ) } ); + }) .catch(err => { if(this.channel) @@ -163,7 +166,7 @@ export class MediaPlayer { }); } - play() { + async play() { if(this.queue.length == 0 && this.channel) this.channel.send({embed: createInfoEmbed(`Queue is empty! Add some songs!`)}); @@ -177,8 +180,10 @@ export class MediaPlayer { if(!this.playing) { type.getStream(item) .then(stream => { - this.dispatchStream(stream, item); - }); + this.dispatchStream(stream, item); + }).then(()=>{ + this.determineStatus(); + });; } else if(this.paused && this.dispatcher) { this.dispatcher.resume(); this.paused = false; @@ -272,17 +277,23 @@ export class MediaPlayer { determineStatus() { let item = this.queue.first; - if(item) { - if(this.playing) { - if(this.paused) { - this.status.setBanner(`Paused: "${item.name}" Requested by: ${item.requestor}`); - } else { - this.status.setBanner(`Now Playing: "${item.name}" Requested by: ${item.requestor}${this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"`:''}`); - } - } else + + if(this.playing && this.queue.length>0){ + this.status.setBanner(`Now Playing: "${item.name}" Requested by: ${item.requestor}${this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"`:''}`); + if(this.paused){ + this.status.setBanner(`Paused: "${item.name}" Requested by: ${item.requestor}`); + + }else if(!this.playing && this.queue.length > 0){ this.status.setBanner(`Up Next: "${item.name}" Requested by: ${item.requestor}`); - } else - this.status.setBanner(`No Songs In Queue`); - } + + } + }if(this.queue.length<1){ + this.status.setBanner(`No Songs In Queue`); + } + + if(this.queue.length>0 && item.isLive){ + this.status.setBanner(`Playing live stream Requested by : ${item.requestor}`); + } + } } diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts index fd7ca8a..0c3358a 100755 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -38,20 +38,23 @@ export default class YoutubePlugin extends IBotPlugin { .catch(err => error(err)); }), getDetails: (item: MediaItem) => new Promise((done, error) => { - //item.url = item.url.includes('://') ? item.url : `https://www.youtube.com/watch?v=${item.url}`; - ytdl.getInfo(item.url) .then( info => { item.name = info.videoDetails.title ? info.videoDetails.title : 'Unknown'; item.duration = secondsToTimestamp(parseInt(info.videoDetails.lengthSeconds) || 0); item.description = info.videoDetails.description? info.videoDetails.description : "No description available!"; + item.isLive = info.videoDetails.isLiveContent? info.videoDetails.isLiveContent: false ; done(item); }) .catch(err => error(err)); }), getStream: (item: MediaItem) => new Promise((done, error) => { - let stream = ytdl(item.url, { filter: 'audioonly', quality: 'highestaudio', highWaterMark:1<<28, dlChunkSize:1<<12 }); - if(stream) + // let stream = ytdl(item.url, { filter: 'audioonly', quality: 'highestaudio', highWaterMark:1<<28, dlChunkSize:1<<12, liveBuffer: 4900 }); + let stream = ytdl(item.url, { quality: 'highestaudio', + filter: (item.isLive ? (format => format.isHLS === true) : (format => format.container === 'webm' && format.codecs === 'opus')), + highWaterMark: 1<<10, liveBuffer: 4000, dlChunkSize: 1<<12 }); + + if(stream) done(stream); else error('Unable to get media stream'); From 9f2a6976873fc0adc318548b4922907097b39e0f Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sun, 31 Oct 2021 23:08:05 +0200 Subject: [PATCH 09/23] if the bot is left alone for 3 minutes he will disconnect --- src/bot/bot.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 7e10702..8e36e18 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -322,6 +322,20 @@ export class RhythmBot extends IBot { } } }) + //stackoverflow solution ! + client.on('voiceStateUpdate', (oldState, newState) => { + + // if nobody left the channel in question, return. + if (oldState.channelID !== oldState.guild.me.voice.channelID || newState.channel) + return; + + // otherwise, check how many people are in the channel now + if (oldState.channel.members.size <2) + setTimeout(() => { // if 1 (you), wait five minutes + if (oldState.channel.members.size<2) // if there's still 1 member, + oldState.channel.leave(); // leave + }, 180000); // (3 min in ms) + }); } onReady(client: Client): void { @@ -342,6 +356,8 @@ export class RhythmBot extends IBot { }); } + + onRegisterConsoleCommands(map: CommandMap<(args: ParsedArgs, rl: Interface) => void>): void { } } From e2ab30ee355a6f89dcf1a5fc7b3ce709ef29d9ea Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 6 Nov 2021 17:07:15 +0200 Subject: [PATCH 10/23] Upgraded to discordjs 13.x.x --- package-lock.json | 718 +++++++++++++++++----------------- package.json | 16 +- src/bot/bot-config.ts | 3 +- src/bot/bot-status.ts | 6 +- src/bot/bot.ts | 794 ++++++++++++++++++++++---------------- src/helpers/helpers.ts | 15 +- src/media/media-player.ts | 580 +++++++++++++++------------- src/plugins/playlist.ts | 8 +- src/plugins/youtube.ts | 7 +- 9 files changed, 1146 insertions(+), 1001 deletions(-) diff --git a/package-lock.json b/package-lock.json index 418e945..078e92f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,19 +10,21 @@ "license": "ISC", "dependencies": { "@discordjs/opus": "github:discordjs/opus", - "@types/node": "^16.10.3", - "bufferutil": "^4.0.4", - "discord-bot-quickstart": "^0.0.15", + "@discordjs/voice": "^0.7.2", + "@types/node": "^16.11.6", + "bufferutil": "^4.0.5", + "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", - "discord.js": "^13.2.0", + "discord.js": "^13.3.1", "ffmpeg-static": "^4.4.0", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", - "typescript": "^4.4.3", - "utf-8-validate": "^5.0.6", + "sodium": "^3.0.2", + "typescript": "^4.4.4", + "utf-8-validate": "^5.0.7", "winston": "^3.3.3", - "yt-search": "^2.10.1", + "yt-search": "^2.10.2", "ytdl-core": "^4.9.1", "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" @@ -53,35 +55,28 @@ } }, "node_modules/@discordjs/builders": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz", - "integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", + "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", "dependencies": { - "@sindresorhus/is": "^4.0.1", - "discord-api-types": "^0.22.0", + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.24.0", "ow": "^0.27.0", "ts-mixer": "^6.0.0", "tslib": "^2.3.1" }, "engines": { - "node": ">=14.0.0", + "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@discordjs/builders/node_modules/discord-api-types": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", - "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", - "engines": { - "node": ">=12" - } - }, "node_modules/@discordjs/collection": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", - "integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", + "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==", "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/@discordjs/form-data": { @@ -129,13 +124,77 @@ "node": ">=12.0.0" } }, + "node_modules/@discordjs/voice": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.2.tgz", + "integrity": "sha512-7dRvyKNI6TSvtOoTTXjTTZ2G7nuk4f5rt+5WLkqZ7QR3xsj0u1Pd+t7HdzMaAUn9/FmTe2iKdnAfOpwgassOLg==", + "dependencies": { + "@types/ws": "^8.2.0", + "discord-api-types": "^0.24.0", + "prism-media": "^1.3.2", + "tiny-typed-emitter": "^2.1.0", + "tslib": "^2.3.1", + "ws": "^8.2.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/voice/node_modules/@discordjs/opus": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.5.3.tgz", + "integrity": "sha512-IQhCwCy2WKXLe+qkOkwO1Wjgk20uqeAbqM62tCbzIqbTsXX4YAge8Me9RFnI77Lx+UTkgm4rSVM3VPVdS/GsUw==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "@discordjs/node-pre-gyp": "^0.4.0", + "node-addon-api": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@discordjs/voice/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true, + "peer": true + }, + "node_modules/@discordjs/voice/node_modules/prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "peerDependencies": { + "@discordjs/opus": "^0.5.0", + "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", + "node-opus": "^0.3.3", + "opusscript": "^0.0.8" + }, + "peerDependenciesMeta": { + "@discordjs/opus": { + "optional": true + }, + "ffmpeg-static": { + "optional": true + }, + "node-opus": { + "optional": true + }, + "opusscript": { + "optional": true + } + } + }, "node_modules/@sapphire/async-queue": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.5.tgz", - "integrity": "sha512-NQ8GeTBeOkeAylVYTnO9zfEZO74iMNGCRrR3uIRnCrhkyPC+nsewyQtTamjSDWxXFTf+xGSJ9khiY2p56k/bMA==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.9.tgz", + "integrity": "sha512-CbXaGwwlEMq+l1TRu01FJCvySJ1CEFKFclHT48nIfNeZXaAAmmwwy7scUKmYHPUa3GhoMp6Qr1B3eAJux6XgOQ==", "engines": { - "node": ">=v14.18.0", - "npm": ">=7.24.1" + "node": ">=v14.0.0", + "npm": ">=7.0.0" } }, "node_modules/@sindresorhus/is": { @@ -163,9 +222,18 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + }, + "node_modules/@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } }, "node_modules/@types/ws": { "version": "8.2.0", @@ -180,17 +248,6 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -203,11 +260,11 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/aproba": { @@ -241,9 +298,9 @@ } }, "node_modules/async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", + "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==" }, "node_modules/async.parallellimit": { "version": "0.5.2", @@ -357,12 +414,12 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bufferutil": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.4.tgz", - "integrity": "sha512-VNxjXUCrF3LvbLgwfkTb5LsFvk6pGIn7OBb9x+3o+iJ6mKw0JTUp4chBFc88hi1aspeZGeZG9jAIbpFYPQSLZw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", "hasInstallScript": true, "dependencies": { - "node-gyp-build": "^4.2.0" + "node-gyp-build": "^4.3.0" }, "engines": { "node": ">=6.14.2" @@ -437,13 +494,21 @@ "timers-ext": "0.1" } }, + "node_modules/cli-color/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "node_modules/color-convert": { @@ -485,11 +550,11 @@ } }, "node_modules/colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "dependencies": { - "color": "3.0.x", + "color": "^3.1.3", "text-hex": "1.0.x" } }, @@ -549,9 +614,9 @@ } }, "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "engines": { "node": ">= 6" }, @@ -614,107 +679,47 @@ } }, "node_modules/discord-api-types": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", - "integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", + "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==", "engines": { "node": ">=12" } }, "node_modules/discord-bot-quickstart": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/discord-bot-quickstart/-/discord-bot-quickstart-0.0.15.tgz", - "integrity": "sha512-DkvtPZEVffoG53x2ROQulfRde8TAvDFpq46XzpGNY+jO8kniu0fNzE3iaCRq+/OICkTEX/v8a4LRgzMt5LmcMw==", + "version": "0.0.154", + "resolved": "git+ssh://git@github.com/spectral369/Discord-Bot-Quickstart.git#433859db404e64f41d93f0cf5d60d112c13672b8", + "license": "ISC", "dependencies": { - "@types/jsonfile": "^6.0.0", - "@types/minimist": "^1.2.0", - "@types/node": "^14.0.23", + "@types/jsonfile": "^6.0.1", + "@types/minimist": "^1.2.2", + "@types/node": "^16.11.6", "discord-command-parser": "^1.5.3", - "discord.js": "^12.5.1", - "jsonfile": "^6.0.1", + "discord.js": "^13.3.1", + "jsonfile": "^6.1.0", "minimist": "^1.2.5", - "moment": "^2.27.0", - "typescript": "^3.9.7", + "moment": "^2.29.1", + "typescript": "^4.4.4", "winston": "^3.3.3" } }, - "node_modules/discord-bot-quickstart/node_modules/@discordjs/collection": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", - "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" - }, - "node_modules/discord-bot-quickstart/node_modules/@types/node": { - "version": "14.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", - "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" - }, - "node_modules/discord-bot-quickstart/node_modules/discord.js": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", - "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", - "deprecated": "no longer supported", - "dependencies": { - "@discordjs/collection": "^0.1.6", - "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", - "node-fetch": "^2.6.1", - "prism-media": "^1.2.9", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.4.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/discord-bot-quickstart/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/discord-bot-quickstart/node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/discord-command-parser": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/discord-command-parser/-/discord-command-parser-1.5.3.tgz", "integrity": "sha512-YWgalkrbly0dJCyLw7p9SX3RC7HIxOrSTz/8vKjlmYPyyZmMCGmKwpXu6HkPXRZ20L6QqftVWigSw6fDK2zemg==" }, "node_modules/discord.js": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz", - "integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", + "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", "dependencies": { - "@discordjs/builders": "^0.6.0", - "@discordjs/collection": "^0.2.1", + "@discordjs/builders": "^0.8.1", + "@discordjs/collection": "^0.3.2", "@discordjs/form-data": "^3.0.1", - "@sapphire/async-queue": "^1.1.5", + "@sapphire/async-queue": "^1.1.8", + "@types/node-fetch": "^2.5.12", "@types/ws": "^8.2.0", - "discord-api-types": "^0.23.1", + "discord-api-types": "^0.24.0", "node-fetch": "^2.6.1", "ws": "^8.2.3" }, @@ -858,14 +863,6 @@ "es5-ext": "~0.10.14" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/ext": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", @@ -904,6 +901,19 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -1298,9 +1308,9 @@ "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" }, "node_modules/node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1439,31 +1449,6 @@ "node": ">=0.10.0" } }, - "node_modules/prism-media": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", - "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", - "peerDependencies": { - "@discordjs/opus": "^0.5.0", - "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", - "node-opus": "^0.3.3", - "opusscript": "^0.0.8" - }, - "peerDependenciesMeta": { - "@discordjs/opus": { - "optional": true - }, - "ffmpeg-static": { - "optional": true - }, - "node-opus": { - "optional": true - }, - "opusscript": { - "optional": true - } - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1547,11 +1532,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "node_modules/signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", @@ -1565,6 +1545,15 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/sodium": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz", + "integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "*" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -1604,14 +1593,6 @@ "node": ">=4" } }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -1642,6 +1623,11 @@ "next-tick": "1" } }, + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1670,11 +1656,6 @@ "node": ">= 0.6.0" } }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -1697,9 +1678,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "node_modules/typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1717,12 +1698,12 @@ } }, "node_modules/utf-8-validate": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.6.tgz", - "integrity": "sha512-hoY0gOf9EkCw+nimK21FVKHUIG1BMqSiRwxB/q3A9yKZOrOI99PP77BxmarDqWz6rG3vVYiBWfhG8z2Tl+7fZA==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", "hasInstallScript": true, "dependencies": { - "node-gyp-build": "^4.2.0" + "node-gyp-build": "^4.3.0" }, "engines": { "node": ">=6.14.2" @@ -1756,11 +1737,11 @@ } }, "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/winston": { @@ -1838,9 +1819,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yt-search": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.1.tgz", - "integrity": "sha512-7xORFvQMkzkVVOsRVV6qW+Ld8FIl8OQcN3ThsDf04jwr2GyR4miGmC98IA2X/gjTWUEj2SRhmzw6kApj3LHdsQ==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.2.tgz", + "integrity": "sha512-cwg8yK3pVuwczfoADOqhVHj5i/Qv8xb7/wYh3gwvfGiHsxpgDtMKKuBWyOenrXwwC7A/nj3YQYsfDlZ2/rk83w==", "dependencies": { "async.parallellimit": "~0.5.2", "boolstring": "~1.0.2", @@ -1914,28 +1895,21 @@ } }, "@discordjs/builders": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz", - "integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", + "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", "requires": { - "@sindresorhus/is": "^4.0.1", - "discord-api-types": "^0.22.0", + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.24.0", "ow": "^0.27.0", "ts-mixer": "^6.0.0", "tslib": "^2.3.1" - }, - "dependencies": { - "discord-api-types": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", - "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" - } } }, "@discordjs/collection": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", - "integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", + "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==" }, "@discordjs/form-data": { "version": "3.0.1", @@ -1971,10 +1945,49 @@ "node-addon-api": "^4.0.0" } }, + "@discordjs/voice": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.2.tgz", + "integrity": "sha512-7dRvyKNI6TSvtOoTTXjTTZ2G7nuk4f5rt+5WLkqZ7QR3xsj0u1Pd+t7HdzMaAUn9/FmTe2iKdnAfOpwgassOLg==", + "requires": { + "@types/ws": "^8.2.0", + "discord-api-types": "^0.24.0", + "prism-media": "^1.3.2", + "tiny-typed-emitter": "^2.1.0", + "tslib": "^2.3.1", + "ws": "^8.2.3" + }, + "dependencies": { + "@discordjs/opus": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.5.3.tgz", + "integrity": "sha512-IQhCwCy2WKXLe+qkOkwO1Wjgk20uqeAbqM62tCbzIqbTsXX4YAge8Me9RFnI77Lx+UTkgm4rSVM3VPVdS/GsUw==", + "optional": true, + "peer": true, + "requires": { + "@discordjs/node-pre-gyp": "^0.4.0", + "node-addon-api": "^3.2.1" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true, + "peer": true + }, + "prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "requires": {} + } + } + }, "@sapphire/async-queue": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.5.tgz", - "integrity": "sha512-NQ8GeTBeOkeAylVYTnO9zfEZO74iMNGCRrR3uIRnCrhkyPC+nsewyQtTamjSDWxXFTf+xGSJ9khiY2p56k/bMA==" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.9.tgz", + "integrity": "sha512-CbXaGwwlEMq+l1TRu01FJCvySJ1CEFKFclHT48nIfNeZXaAAmmwwy7scUKmYHPUa3GhoMp6Qr1B3eAJux6XgOQ==" }, "@sindresorhus/is": { "version": "4.2.0", @@ -1995,9 +2008,18 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + }, + "@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } }, "@types/ws": { "version": "8.2.0", @@ -2012,14 +2034,6 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -2029,9 +2043,9 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "aproba": { "version": "2.0.0", @@ -2060,9 +2074,9 @@ } }, "async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", + "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==" }, "async.parallellimit": { "version": "0.5.2", @@ -2176,11 +2190,11 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bufferutil": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.4.tgz", - "integrity": "sha512-VNxjXUCrF3LvbLgwfkTb5LsFvk6pGIn7OBb9x+3o+iJ6mKw0JTUp4chBFc88hi1aspeZGeZG9jAIbpFYPQSLZw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", "requires": { - "node-gyp-build": "^4.2.0" + "node-gyp-build": "^4.3.0" } }, "callsites": { @@ -2235,15 +2249,22 @@ "es6-iterator": "2", "memoizee": "^0.4.3", "timers-ext": "0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } }, "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "color-convert": { @@ -2279,11 +2300,11 @@ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "requires": { - "color": "3.0.x", + "color": "^3.1.3", "text-hex": "1.0.x" } }, @@ -2334,9 +2355,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" }, "d": { "version": "1.0.1", @@ -2376,63 +2397,24 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "discord-api-types": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", - "integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==" + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", + "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==" }, "discord-bot-quickstart": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/discord-bot-quickstart/-/discord-bot-quickstart-0.0.15.tgz", - "integrity": "sha512-DkvtPZEVffoG53x2ROQulfRde8TAvDFpq46XzpGNY+jO8kniu0fNzE3iaCRq+/OICkTEX/v8a4LRgzMt5LmcMw==", + "version": "git+ssh://git@github.com/spectral369/Discord-Bot-Quickstart.git#433859db404e64f41d93f0cf5d60d112c13672b8", + "from": "discord-bot-quickstart@github:spectral369/Discord-Bot-Quickstart#v0.0.154", "requires": { - "@types/jsonfile": "^6.0.0", - "@types/minimist": "^1.2.0", - "@types/node": "^14.0.23", + "@types/jsonfile": "^6.0.1", + "@types/minimist": "^1.2.2", + "@types/node": "^16.11.6", "discord-command-parser": "^1.5.3", - "discord.js": "^12.5.1", - "jsonfile": "^6.0.1", + "discord.js": "^13.3.1", + "jsonfile": "^6.1.0", "minimist": "^1.2.5", - "moment": "^2.27.0", - "typescript": "^3.9.7", + "moment": "^2.29.1", + "typescript": "^4.4.4", "winston": "^3.3.3" - }, - "dependencies": { - "@discordjs/collection": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", - "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" - }, - "@types/node": { - "version": "14.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", - "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" - }, - "discord.js": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", - "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", - "requires": { - "@discordjs/collection": "^0.1.6", - "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", - "node-fetch": "^2.6.1", - "prism-media": "^1.2.9", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.4.4" - } - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" - }, - "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "requires": {} - } } }, "discord-command-parser": { @@ -2441,16 +2423,17 @@ "integrity": "sha512-YWgalkrbly0dJCyLw7p9SX3RC7HIxOrSTz/8vKjlmYPyyZmMCGmKwpXu6HkPXRZ20L6QqftVWigSw6fDK2zemg==" }, "discord.js": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.2.0.tgz", - "integrity": "sha512-nyxUvL8wuQG38zx13wUMkpcA8koFszyiXdkSLwwM9opKW2LC2H5gD0cTZxImeJ6GtEnKPWT8xBiE8lLBmbNIhw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", + "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", "requires": { - "@discordjs/builders": "^0.6.0", - "@discordjs/collection": "^0.2.1", + "@discordjs/builders": "^0.8.1", + "@discordjs/collection": "^0.3.2", "@discordjs/form-data": "^3.0.1", - "@sapphire/async-queue": "^1.1.5", + "@sapphire/async-queue": "^1.1.8", + "@types/node-fetch": "^2.5.12", "@types/ws": "^8.2.0", - "discord-api-types": "^0.23.1", + "discord-api-types": "^0.24.0", "node-fetch": "^2.6.1", "ws": "^8.2.3" } @@ -2560,11 +2543,6 @@ "es5-ext": "~0.10.14" } }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, "ext": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", @@ -2601,6 +2579,16 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -2920,9 +2908,9 @@ "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" }, "node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "requires": { "whatwg-url": "^5.0.0" } @@ -3029,12 +3017,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "prism-media": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", - "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", - "requires": {} - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -3103,11 +3085,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", @@ -3121,6 +3098,14 @@ "is-arrayish": "^0.3.1" } }, + "sodium": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz", + "integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==", + "requires": { + "node-addon-api": "*" + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -3149,13 +3134,6 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - } } }, "tar": { @@ -3185,6 +3163,11 @@ "next-tick": "1" } }, + "tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -3210,11 +3193,6 @@ "resolved": "https://registry.npmjs.org/ttys/-/ttys-0.0.3.tgz", "integrity": "sha1-FbrN54MQIN5fLyjwGxcy7wNlH00=" }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -3231,9 +3209,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==" + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==" }, "universalify": { "version": "2.0.0", @@ -3241,11 +3219,11 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "utf-8-validate": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.6.tgz", - "integrity": "sha512-hoY0gOf9EkCw+nimK21FVKHUIG1BMqSiRwxB/q3A9yKZOrOI99PP77BxmarDqWz6rG3vVYiBWfhG8z2Tl+7fZA==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", "requires": { - "node-gyp-build": "^4.2.0" + "node-gyp-build": "^4.3.0" } }, "util-deprecate": { @@ -3273,11 +3251,11 @@ } }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "winston": { @@ -3334,9 +3312,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yt-search": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.1.tgz", - "integrity": "sha512-7xORFvQMkzkVVOsRVV6qW+Ld8FIl8OQcN3ThsDf04jwr2GyR4miGmC98IA2X/gjTWUEj2SRhmzw6kApj3LHdsQ==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.2.tgz", + "integrity": "sha512-cwg8yK3pVuwczfoADOqhVHj5i/Qv8xb7/wYh3gwvfGiHsxpgDtMKKuBWyOenrXwwC7A/nj3YQYsfDlZ2/rk83w==", "requires": { "async.parallellimit": "~0.5.2", "boolstring": "~1.0.2", diff --git a/package.json b/package.json index 7d7322d..4b01165 100755 --- a/package.json +++ b/package.json @@ -11,19 +11,21 @@ "license": "ISC", "dependencies": { "@discordjs/opus": "github:discordjs/opus", - "@types/node": "^16.10.3", - "bufferutil": "^4.0.4", - "discord-bot-quickstart": "^0.0.15", + "@discordjs/voice": "^0.7.2", + "@types/node": "^16.11.6", + "bufferutil": "^4.0.5", + "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", - "discord.js": "^13.2.0", + "discord.js": "^13.3.1", "ffmpeg-static": "^4.4.0", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", - "typescript": "^4.4.3", - "utf-8-validate": "^5.0.6", + "sodium": "^3.0.2", + "typescript": "^4.4.4", + "utf-8-validate": "^5.0.7", "winston": "^3.3.3", - "yt-search": "^2.10.1", + "yt-search": "^2.10.2", "ytdl-core": "^4.9.1", "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" diff --git a/src/bot/bot-config.ts b/src/bot/bot-config.ts index 2e4edf0..698fecc 100755 --- a/src/bot/bot-config.ts +++ b/src/bot/bot-config.ts @@ -1,4 +1,5 @@ -import { IBotConfig } from 'discord-bot-quickstart'; +import { IBotConfig } from "discord-bot-quickstart"; + export interface IRhythmBotConfig extends IBotConfig { auto?: { diff --git a/src/bot/bot-status.ts b/src/bot/bot-status.ts index eeaf5a7..310f6ec 100755 --- a/src/bot/bot-status.ts +++ b/src/bot/bot-status.ts @@ -9,12 +9,12 @@ export class BotStatus { setBanner(status: string) { this.client.user.setPresence({ - activity: { - name: status - } + status:'online', + activities: [{ name: status }] }); } + setActivity(activity: PresenceStatusData) { this.client.user.setStatus(activity) } diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 8e36e18..99a773f 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -1,363 +1,479 @@ -import { MediaPlayer } from '../media'; -import { BotStatus } from './bot-status'; -import { IRhythmBotConfig } from './bot-config'; -import { joinUserChannel, createInfoEmbed, createErrorEmbed, secondsToTimestamp, createEmbed } from '../helpers'; -import { IBot, CommandMap, Client, ParsedArgs, Interface, SuccessfulParsedMessage, Message, readFile, MessageReaction, User } from 'discord-bot-quickstart'; -import * as yts from 'yt-search'; +import { MediaPlayer } from "../media"; +import { BotStatus } from "./bot-status"; +import { IRhythmBotConfig } from "./bot-config"; +import { + joinUserChannel, + createInfoEmbed, + createErrorEmbed, + secondsToTimestamp, + createEmbed, +} from "../helpers"; +import { + IBot, + CommandMap, + Client, + ParsedArgs, + Interface, + SuccessfulParsedMessage, + Message, + readFile, + MessageReaction, + User, +} from "discord-bot-quickstart"; +import * as yts from "yt-search"; +import { VoiceConnectionStatus } from "@discordjs/voice"; -const helptext = readFile('../helptext.txt'); +const helptext = readFile("../helptext.txt"); const random = (array) => { - return array[Math.floor(Math.random() * array.length)]; + return array[Math.floor(Math.random() * array.length)]; }; -const pingPhrases = [ - `Can't stop won't stop!`, - `:ping_pong: Pong Bitch!` -]; +const pingPhrases = [`Can't stop won't stop!`, `:ping_pong: Pong Bitch!`]; export class RhythmBot extends IBot { - helptext: string; - player: MediaPlayer; - status: BotStatus; + helptext: string; + player: MediaPlayer; + status: BotStatus; - constructor(config: IRhythmBotConfig) { - super(config, { - auto: { - deafen: false, - pause: false, - play: false, - reconnect: true - }, - discord: { - log: true - }, - command: { - symbol: '!' - }, - directory: { - plugins: './plugins', - logs: '../bot.log' - }, - queue: { - announce: true, - repeat: false - }, - stream: { - seek: 0, - volume: 1, - bitrate: 'auto', - forwardErrorCorrection: false - }, - emojis: { - addSong: '👍', - stopSong: '⏹️', - playSong: '▶️', - pauseSong: '⏸️', - skipSong: '⏭️' - } - }); - this.helptext = helptext; - } + constructor(config: IRhythmBotConfig) { + super(config, { + auto: { + deafen: false, + pause: false, + play: false, + reconnect: true, + }, + discord: { + log: true, + }, + command: { + symbol: "!", + }, + directory: { + plugins: "./plugins", + logs: "../bot.log", + }, + queue: { + announce: true, + repeat: false, + }, + stream: { + seek: 0, + volume: 1, + bitrate: "auto", + forwardErrorCorrection: false, + }, + emojis: { + addSong: "👍", + stopSong: "⏹️", + playSong: "▶️", + pauseSong: "⏸️", + skipSong: "⏭️", + }, + }); + this.helptext = helptext; + } - onRegisterDiscordCommands(map: CommandMap<(cmd: SuccessfulParsedMessage, msg: Message) => void>): void { - map.on('ping', (cmd: SuccessfulParsedMessage, msg: Message) => { - let phrases = pingPhrases.slice(); - if(msg.guild) - phrases = phrases.concat(msg.guild.emojis.cache.array().map(x => x.name)); - msg.channel.send(random(phrases)); - }) - .on('help', (cmd: SuccessfulParsedMessage, msg: Message) => { - msg.channel.send(this.helptext); - }) - .on('join', (cmd: SuccessfulParsedMessage, msg: Message) => { - joinUserChannel(msg) - .then(connection => { - this.player.connection = connection; - msg.channel.send({embed: createInfoEmbed(`Joined Channel: ${connection.channel.name}`)}); - - if(this.config.auto.play) - this.player.play(); - }) - .catch(err => { - msg.channel.send({embed:createErrorEmbed(err)}); - }); - }) - .on('leave', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.player.stop(); - this.player.connection = null; - this.client.voice.connections.forEach( conn => { - conn.disconnect(); - msg.channel.send({embed: createInfoEmbed(`Disconnecting from channel: ${conn.channel.name}`)}); - - - - }); - }) - .on('desc',(cmd:SuccessfulParsedMessage,msg:Message) =>{ - if(this.player.playing && this.player.dispatcher) { - msg.channel.send({embed: createInfoEmbed(`Description:`,`${this.player.queue.first.description}`)}); - } - }) - .on('play', (cmd: SuccessfulParsedMessage, msg: Message) => { - new Promise(done => { - if(!this.player.connection) { - joinUserChannel(msg) - .then(conn => { - this.player.connection = conn; - msg.channel.send({embed: createInfoEmbed(`Joined Channel: ${conn.channel.name}`)}); - - done(); - }); - } else - done(); - }).then(() => { - if(/*this.player.queue.length==1 &&*/ cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ - this.player.addMedia({type:'youtube', url:cmd.body,requestor:msg.author.username}).then(()=>{ - if(!this.player.playing) - this.player.play(); - }); - }else if(cmd.body.length > 0 && !cmd.body.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ - yts({ - query: cmd.body, - pages: 1 - }, (err, result) => { - result.videos - .slice(0, 1) - .forEach((v, idx) => { - const embed = createEmbed() - .setTitle(`${v.title}`) - .addField('Author:', `${v.author.name}`, true) - .addField('Duration', `${v.timestamp}`, true) - .setThumbnail(v.image) - .setURL(v.url); - msg.channel.send({embed:embed}) - .then(()=> { - this.player.addMedia({type:'youtube', url:v.url, requestor:msg.author.username}).then(()=>{ - if(!this.player.playing) - this.player.play(); - }); - }); - }); - }); - - }else //check if it's ok ! - this.player.play(); - // this.player.determineStatus(); this was on when it worked - + onRegisterDiscordCommands( + map: CommandMap< + (cmd: SuccessfulParsedMessage, msg: Message) => void + > + ): void { + map + .on("ping", (cmd: SuccessfulParsedMessage, msg: Message) => { + let phrases = pingPhrases.slice(); + if (msg.guild) + phrases = phrases.concat(msg.guild.emojis.cache.map((x) => x.name)); + msg.channel.send(random(phrases)); + }) + .on("help", (cmd: SuccessfulParsedMessage, msg: Message) => { + msg.channel.send(this.helptext); + }) + .on("join", (cmd: SuccessfulParsedMessage, msg: Message) => { + joinUserChannel(msg) + .then((connection) => { + this.player.connection = connection; + msg.channel.send({ + embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], + }); + + if (this.config.auto.play) this.player.play(); + }) + .catch((err) => { + msg.channel.send({ embeds: [createErrorEmbed(err)] }); + }); + }) + .on("leave", (cmd: SuccessfulParsedMessage, msg: Message) => { + //todo if voice is in a voice channel + if ( + this.player.connection && + !( + this.player.connection.state.status == + VoiceConnectionStatus.Disconnected + ) + ) + this.player.connection.disconnect(); + }) + .on("desc", (cmd: SuccessfulParsedMessage, msg: Message) => { + if (this.player.playing && this.player.dispatcher) { + msg.channel.send({ + embeds: [ + createInfoEmbed( + `Description:`, + `${this.player.queue.first.description}` + ), + ], + }); + } + }) + .on("play", (cmd: SuccessfulParsedMessage, msg: Message) => { + new Promise((done) => { + if (!this.player.connection) { + joinUserChannel(msg).then((conn) => { + this.player.connection = conn; + console.log("user joined channel !!!"); + msg.channel.send({ + embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], + }); + done(); + }); + } else done(); + }).then(() => { + if ( + cmd.body.match("^(http(s)://)?((w){3}.)?youtu(be|.be)?(.com)?/.+") + ) { + this.player + .addMedia({ + type: "youtube", + url: cmd.body, + requestor: msg.author.username, + }) + .then(() => { + if (!this.player.playing) this.player.play(); + }); + } else if ( + cmd.body.length > 0 && + !cmd.body.match("^(http(s)://)?((w){3}.)?youtu(be|.be)?(.com)?/.+") + ) { + yts( + { + query: cmd.body, + pages: 1, + }, + (err, result) => { + result.videos.slice(0, 1).forEach((v, idx) => { + const embed = createEmbed() + .setTitle(`${v.title}`) + .addField("Author:", `${v.author.name}`, true) + .addField("Duration", `${v.timestamp}`, true) + .setThumbnail(v.image) + .setURL(v.url); + msg.channel.send({ embeds: [embed] }).then(() => { + this.player + .addMedia({ + type: "youtube", + url: v.url, + requestor: msg.author.username, + }) + .then(() => { + if (!this.player.playing) this.player.play(); + }); + }); }); - }) - .on('pause', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.player.pause(); - }) - .on('time', (cmd: SuccessfulParsedMessage, msg: Message) => { - let media = this.player.queue.first; - if(this.player.playing && this.player.dispatcher) { - let elapsed = secondsToTimestamp(this.player.dispatcher.totalStreamTime / 1000); - - msg.channel.send({embed: createInfoEmbed(`Time Elapsed`,`${elapsed} / ${media.duration}`)}); - } else if(this.player.queue.first) { - msg.channel.send({embed: createInfoEmbed(`Time Elapsed`,`00.00.00 / ${media.duration}`)}); - - } - }) - //updated from original commit = 44d41f46f70dfd6effc21d7ae49b23a81453773 - .on('search', async (cmd: SuccessfulParsedMessage, msg: Message) => { - let noResults = false; + } + ); + } else this.player.play(); + }); + }) + .on("pause", (cmd: SuccessfulParsedMessage, msg: Message) => { + this.player.pause(); + }) + .on("time", (cmd: SuccessfulParsedMessage, msg: Message) => { + let media = this.player.queue.first; + if (this.player.playing && this.player.dispatcher) { + let elapsed = secondsToTimestamp( + this.player.audioResource.playbackDuration / 1000 + ); - if (cmd.body != null && cmd.body !== '') { - const videos = await yts({ query: cmd.body, pages: 1 }).then((res) => res.videos); - if (videos != null && videos.length > 0) { - await Promise.all( - videos - .slice(0, 3) - .map((video) =>{ - const embed = createEmbed() - .setTitle(`${video.title}`) - .addField('Author:', `${video.author.name}`, true) - .addField('Duration', `${video.timestamp}`, true) - .setThumbnail(video.image) - .setURL(video.url); - msg.channel.send({embed:embed}) - .then(m => m.react(this.config.emojis.addSong)); - }) - ) - } else { - noResults = true; - } - } else { - noResults = true; - } + msg.channel.send({ + embeds: [ + createInfoEmbed(`Time Elapsed`, `${elapsed} / ${media.duration}`), + ], + }); + } else if (this.player.queue.first) { + msg.channel.send({ + embeds: [ + createInfoEmbed(`Time Elapsed`, `00.00.00 / ${media.duration}`), + ], + }); + } + }) + //updated from original commit = 44d41f46f70dfd6effc21d7ae49b23a81453773 + .on( + "search", + async (cmd: SuccessfulParsedMessage, msg: Message) => { + let noResults = false; - if (noResults) { - msg.channel.send({embed: createErrorEmbed(`No songs found OR No search string provided`)}); - } - }) - .on('add', (cmd: SuccessfulParsedMessage, msg: Message) => { - if(cmd.arguments.length > 0) { - cmd.arguments.forEach(arg => { - let items = this.player.queue; - if(arg.match("^(http(s):\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+")){ - if(items.length<=1){ - this.player.addMedia({type:'youtube', url:arg,requestor:msg.author.username}).then(()=>{ - if(!this.player.playing) - this.player.play(); - }); - }else{ - this.player.addMedia({type:'youtube', url:arg,requestor:msg.author.username}); - } - } else - msg.channel.send({embed: createErrorEmbed(`Invalid media type format`)}); - }); - } - }) - .on('remove', (cmd: SuccessfulParsedMessage, msg: Message) => { - if(cmd.arguments.length > 0) { - let idx = parseInt(cmd.arguments[0]); - let item = this.player.at(idx - 1); - if(item) { - this.player.remove(item); - } - } - }) - .on('skip', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.player.skip(); - }) - .on('stop', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.player.stop(); - }) - .on('list', (cmd: SuccessfulParsedMessage, msg: Message) => { - let items = this.player.queue - .map((item, idx) => `${idx + 1}. Type: "${item.type}", Title: "${item.name}${item.requestor ? `", Requested By: ${item.requestor}`:''}"`); - if(items.length > 0) - msg.channel.send({embed:createInfoEmbed('Current Playing Queue', items.join('\n\n'))}); - - else - msg.channel.send({embed: createInfoEmbed(`There are no songs in the queue.`)}); - - }) - .on('clear', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.player.clear(); - }) - .on('move', (cmd: SuccessfulParsedMessage, msg: Message) => { - if(cmd.arguments.length > 1) { - let current = Math.min(Math.max(parseInt(cmd.arguments[0]), 0), this.player.queue.length - 1), - targetDesc = cmd.arguments[0], - target = 0; - if(targetDesc == 'up') - target = Math.min(current - 1, 0); - else if(targetDesc == 'down') - target = Math.max(current + 1, this.player.queue.length - 1); - else - target = parseInt(targetDesc); + if (cmd.body != null && cmd.body !== "") { + const videos = await yts({ query: cmd.body, pages: 1 }).then( + (res) => res.videos + ); + if (videos != null && videos.length > 0) { + await Promise.all( + videos.slice(0, 3).map((video) => { + const embed = createEmbed() + .setTitle(`${video.title}`) + .addField("Author:", `${video.author.name}`, true) + .addField("Duration", `${video.timestamp}`, true) + .setThumbnail(video.image) + .setURL(video.url); + msg.channel + .send({ embeds: [embed] }) + .then((m) => m.react(this.config.emojis.addSong)); + }) + ); + } else { + noResults = true; + } + } else { + noResults = true; + } - this.player.move(current, target); - } - }) - .on('shuffle', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.player.shuffle(); - }) - .on('volume', (cmd: SuccessfulParsedMessage, msg: Message) => { - if(cmd.arguments.length > 0) { - let temp = cmd.arguments[0]; - if(temp) { - let volume = Math.min(Math.max(parseInt(temp), 0), 100); - this.player.setVolume(volume); - } + if (noResults) { + msg.channel.send({ + embeds: [ + createErrorEmbed(`No songs found OR No search string provided`), + ], + }); + } + } + ) + .on( + "add", + async (cmd: SuccessfulParsedMessage, msg: Message) => { + if (cmd.arguments.length > 0) { + cmd.arguments.forEach((arg) => { + let items = this.player.queue; + if ( + arg.match("^(http(s)://)?((w){3}.)?youtu(be|.be)?(.com)?/.+") + ) { + if (items.length <= 1) { + this.player + .addMedia({ + type: "youtube", + url: arg, + requestor: msg.author.username, + }) + .then(() => { + if (!this.player.playing) this.player.play(); + }); + } else { + this.player.addMedia({ + type: "youtube", + url: arg, + requestor: msg.author.username, + }); } - msg.channel.send({embed: createInfoEmbed(`Volume is at ${this.player.getVolume()}`)}); - - }) - .on('repeat', (cmd: SuccessfulParsedMessage, msg: Message) => { - this.config.queue.repeat = !this.config.queue.repeat; - msg.channel.send({embed :createInfoEmbed(`Repeat mode is ${this.config.queue.repeat ? 'on' : 'off'}`)}); - + } else + msg.channel.send({ + embeds: [createErrorEmbed(`Invalid media type format`)], + }); }); - } + } + } + ) + .on("remove", (cmd: SuccessfulParsedMessage, msg: Message) => { + if (cmd.arguments.length > 0) { + let idx = parseInt(cmd.arguments[0]); + let item = this.player.at(idx - 1); + if (item) { + this.player.remove(item); + } + } + }) + .on("skip", (cmd: SuccessfulParsedMessage, msg: Message) => { + this.player.skip(); + }) + .on("stop", (cmd: SuccessfulParsedMessage, msg: Message) => { + this.player.stop(); + }) + .on("list", (cmd: SuccessfulParsedMessage, msg: Message) => { + let items = this.player.queue.map( + (item, idx) => + `${idx + 1}. Type: "${item.type}", Title: "${item.name}${ + item.requestor ? `", Requested By: ${item.requestor}` : "" + }"` + ); + if (items.length > 0) + msg.channel.send({ + embeds: [ + createInfoEmbed("Current Playing Queue", items.join("\n\n")), + ], + }); + else + msg.channel.send({ + embeds: [createInfoEmbed(`There are no songs in the queue.`)], + }); + }) + .on("clear", (cmd: SuccessfulParsedMessage, msg: Message) => { + this.player.clear(); + }) + .on("move", (cmd: SuccessfulParsedMessage, msg: Message) => { + if (cmd.arguments.length > 1) { + let current = Math.min( + Math.max(parseInt(cmd.arguments[0]), 0), + this.player.queue.length - 1 + ), + targetDesc = cmd.arguments[0], + target = 0; + if (targetDesc == "up") target = Math.min(current - 1, 0); + else if (targetDesc == "down") + target = Math.max(current + 1, this.player.queue.length - 1); + else target = parseInt(targetDesc); - parsedMessage(msg: SuccessfulParsedMessage) { - const handlers = this.commands.get(msg.command); - if (handlers) { - this.player.channel = msg.message.channel; + this.player.move(current, target); + } + }) + .on("shuffle", (cmd: SuccessfulParsedMessage, msg: Message) => { + this.player.shuffle(); + }) + .on("volume", (cmd: SuccessfulParsedMessage, msg: Message) => { + if (cmd.arguments.length > 0) { + let temp = cmd.arguments[0]; + if (temp) { + let volume = Math.min(Math.max(parseInt(temp), 0), 100); + this.player.setVolume(volume); + } } + msg.channel.send({ + embeds: [createInfoEmbed(`Volume is at ${this.player.getVolume()}`)], + }); + }) + .on("repeat", (cmd: SuccessfulParsedMessage, msg: Message) => { + this.config.queue.repeat = !this.config.queue.repeat; + msg.channel.send({ + embeds: [ + createInfoEmbed( + `Repeat mode is ${this.config.queue.repeat ? "on" : "off"}` + ), + ], + }); + }); + } + //unused maybe it will be usefull in the future + parsedMessage(msg: SuccessfulParsedMessage) { + const handlers = this.commands.get(msg.command); + if (!(msg.message.channel.type == "DM")) { + if (handlers) { + this.player.channel = msg.message.channel; + } + } else { + msg.message.reply({ + embeds: [createInfoEmbed(`This bot doesn't take commands from PMs!`)], + }); } + } - onClientCreated(client: Client): void { - this.status = new BotStatus(client); - this.player = new MediaPlayer(this.config, this.status, this.logger); + onClientCreated(client: Client): void { + this.status = new BotStatus(client); + this.player = new MediaPlayer(this.config, this.status, this.logger); - client.on('messageReactionAdd', async (reaction: MessageReaction, user: User) => { - if (reaction.partial) { - try { - await reaction.fetch(); - } catch (error) { - this.logger.debug(error); - return; - } - } - if (reaction.message.author.id === this.client.user.id && user.id !== this.client.user.id) { - if (reaction.message.embeds.length > 0) { - const embed = reaction.message.embeds[0]; - if (embed) { - if (reaction.emoji.name === this.config.emojis.addSong && embed.url) { - this.logger.debug(`Emoji Click: Adding Media: ${embed.url}`); - this.player.addMedia({ type: 'youtube', url: embed.url, requestor: user.username }); - } - if (reaction.emoji.name === this.config.emojis.stopSong) { - this.logger.debug('Emoji Click: Stopping Song'); - this.player.stop(); - } - if (reaction.emoji.name === this.config.emojis.playSong) { - this.logger.debug('Emoji Click: Playing/Resuming Song'); - this.player.play(); - } - if (reaction.emoji.name === this.config.emojis.pauseSong) { - this.logger.debug('Emoji Click: Pausing Song'); - this.player.pause(); - } - if (reaction.emoji.name === this.config.emojis.skipSong) { - this.logger.debug('Emoji Click: Skipping Song'); - this.player.skip(); - } - } - reaction.users.remove(user.id); - } + client.on( + "messageReactionAdd", + async (reaction: MessageReaction, user: User) => { + if (reaction.partial) { + try { + await reaction.fetch(); + } catch (error) { + this.logger.debug(error); + return; + } + } + if ( + reaction.message.author.id === this.client.user.id && + user.id !== this.client.user.id + ) { + if (reaction.message.embeds.length > 0) { + const embed = reaction.message.embeds[0]; + if (embed) { + if ( + reaction.emoji.name === this.config.emojis.addSong && + embed.url + ) { + this.logger.debug(`Emoji Click: Adding Media: ${embed.url}`); + this.player.addMedia({ + type: "youtube", + url: embed.url, + requestor: user.username, + }); + } + if (reaction.emoji.name === this.config.emojis.stopSong) { + this.logger.debug("Emoji Click: Stopping Song"); + this.player.stop(); + } + if (reaction.emoji.name === this.config.emojis.playSong) { + this.logger.debug("Emoji Click: Playing/Resuming Song"); + this.player.play(); + } + if (reaction.emoji.name === this.config.emojis.pauseSong) { + this.logger.debug("Emoji Click: Pausing Song"); + this.player.pause(); + } + if (reaction.emoji.name === this.config.emojis.skipSong) { + this.logger.debug("Emoji Click: Skipping Song"); + this.player.skip(); + } } - }) - //stackoverflow solution ! - client.on('voiceStateUpdate', (oldState, newState) => { - - // if nobody left the channel in question, return. - if (oldState.channelID !== oldState.guild.me.voice.channelID || newState.channel) - return; - - // otherwise, check how many people are in the channel now - if (oldState.channel.members.size <2) - setTimeout(() => { // if 1 (you), wait five minutes - if (oldState.channel.members.size<2) // if there's still 1 member, - oldState.channel.leave(); // leave - }, 180000); // (3 min in ms) - }); - } + reaction.users.remove(user.id); + } + } + } + ); + //stackoverflow solution ! not needed in discordjs 13 + client.on("voiceStateUpdate", (oldState, newState) => { + // if nobody left the channel in question, return. + if ( + oldState.channelId !== oldState.guild.me.voice.channelId || + newState.channel + ) + return; - onReady(client: Client): void { - this.player.determineStatus(); - console.log(`Guilds: ${this.client.guilds.cache.keyArray().length}`); - this.client.guilds.cache.forEach(guild => { - console.log(`\nGuild Name: ${guild.name}`); - - const channels = guild.channels.cache - .filter(x => x.isText() && x.permissionsFor(this.client.user).has('MANAGE_MESSAGES')) - .map(x => x.name); - - if (channels && channels.length > 0) { - console.log(`Can manage message in these channels \n${channels.join('\n')}`); - } else { - console.log('Unable to manage messages on this guild'); - } - }); - } + // otherwise, check how many people are in the channel now + if (oldState.channel.members.size < 2) + setTimeout(() => { + // if 1 (you), wait five minutes + if (oldState.channel.members.size < 2) + // if there's still 1 member, + + oldState.disconnect(); + }, 180000); // (3 min in ms) + }); + } + + onReady(client: Client): void { + this.player.determineStatus(); + console.log(`Guilds: ${this.client.guilds.cache.size}`); + this.client.guilds.cache.forEach((guild) => { + console.log(`\nGuild Name: ${guild.name}`); + const channels = guild.channels.cache + .filter( + (x) => + x.isText() && + x.permissionsFor(this.client.user).has("MANAGE_MESSAGES") + ) + .map((x) => x.name); + if (channels && channels.length > 0) { + console.log( + `Can manage message in these channels \n${channels.join("\n")}` + ); + } else { + console.log("Unable to manage messages on this guild"); + } + }); + } - onRegisterConsoleCommands(map: CommandMap<(args: ParsedArgs, rl: Interface) => void>): void { } - + onRegisterConsoleCommands( + map: CommandMap<(args: ParsedArgs, rl: Interface) => void> + ): void {} } diff --git a/src/helpers/helpers.ts b/src/helpers/helpers.ts index 2fd25f1..a886671 100755 --- a/src/helpers/helpers.ts +++ b/src/helpers/helpers.ts @@ -1,15 +1,20 @@ -import { Message, VoiceConnection, MessageEmbed } from 'discord.js'; +import { joinVoiceChannel, VoiceConnection, VoiceConnectionStatus } from '@discordjs/voice'; +import { Message, MessageEmbed } from 'discord.js'; + import * as moment from 'moment'; export function joinUserChannel(msg: Message): Promise { return new Promise((done, error) => { let channel = msg.member.voice.channel; - if(channel && channel.type === 'voice') { - channel.join() - .then(connection => { - done(connection); + if(channel && channel.type === 'GUILD_VOICE') { + let connection = joinVoiceChannel({ + channelId: msg.member.voice.channel.id, + guildId: msg.guild.id, + adapterCreator: msg.guild.voiceAdapterCreator }); + done(connection); + } else error(`User isn't on a voice channel!`); }); diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 066d66d..2f141b6 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -1,299 +1,343 @@ -import { IRhythmBotConfig } from '../bot/bot-config'; -import { BotStatus } from '../bot/bot-status'; -import { MediaQueue } from './media-queue'; -import { MediaItem } from './media-item.model'; -import { IMediaType } from './media-type.model'; -import { createEmbed, createErrorEmbed, createInfoEmbed } from '../helpers'; -import { Logger, TextChannel, DMChannel, NewsChannel, VoiceConnection, StreamDispatcher } from 'discord-bot-quickstart'; -import { Readable } from 'stream'; +import { IRhythmBotConfig } from "../bot/bot-config"; +import { BotStatus } from "../bot/bot-status"; +import { MediaQueue } from "./media-queue"; +import { MediaItem } from "./media-item.model"; +import { IMediaType } from "./media-type.model"; +import { createEmbed, createErrorEmbed, createInfoEmbed } from "../helpers"; +import { + Logger, + TextChannel, + DMChannel, + NewsChannel /*, VoiceConnection, StreamDispatcher */, + PartialDMChannel, + ThreadChannel, +} from "discord-bot-quickstart"; +import { + AudioPlayer, + AudioPlayerStatus, + AudioResource, + createAudioPlayer, + createAudioResource, + demuxProbe, + NoSubscriberBehavior, + StreamType, + VoiceConnection, +} from "@discordjs/voice"; +import { Readable } from "stream"; export class MediaPlayer { - typeRegistry: Map = new Map(); - queue: MediaQueue = new MediaQueue(); - playing: boolean = false; - paused: boolean = false; - stopping: boolean = false; - config: IRhythmBotConfig; - status: BotStatus; - logger: Logger; - channel: TextChannel | DMChannel | NewsChannel; - connection?: VoiceConnection; - dispatcher?: StreamDispatcher; + typeRegistry: Map = new Map(); + queue: MediaQueue = new MediaQueue(); + playing: boolean = false; + paused: boolean = false; + stopping: boolean = false; + config: IRhythmBotConfig; + status: BotStatus; + logger: Logger; + channel: + | PartialDMChannel + | DMChannel + | TextChannel + | NewsChannel + | ThreadChannel; + connection?: VoiceConnection; + dispatcher?: AudioPlayer; + audioResource: AudioResource; + isPlaying: Boolean = false; - constructor(config: IRhythmBotConfig, status: BotStatus, logger: Logger) { - this.config = config; - this.status = status; - this.logger = logger; - } + constructor(config: IRhythmBotConfig, status: BotStatus, logger: Logger) { + this.config = config; + this.status = status; + this.logger = logger; + this.dispatcher = createAudioPlayer(); + } - addMedia(item: MediaItem): Promise { - return new Promise((done, error) => { - let type = this.typeRegistry.get(item.type); - if(type) { - type.getDetails(item) - .then((media) => { - item.name = media.name; - item.duration = media.duration; - item.description = media.description;//test - item.isLive = media.isLive;//test - this.queue.enqueue(item); - this.determineStatus(); - done(item); - }) - .catch(err => error(err)); - } else - error('Unknown Media Type!'); - }) - .then((item: MediaItem) => { - if(this.channel && item) - this.channel.send({embed: - createEmbed() - .setTitle('Track Added') - .addFields( - { name: 'Title:', value: item.name }, - { name: 'Position:', value: `${this.queue.indexOf(item) + 1}`, inline: true }, - { name: 'Requested By:', value: item.requestor, inline: true } - ) - } ); - - }) - .catch(err => { - if(this.channel) - this.channel.send({embed: createErrorEmbed(`Error adding track: ${err}`)}); - }); - } + addMedia(item: MediaItem): Promise { + return new Promise((done, error) => { + let type = this.typeRegistry.get(item.type); + if (type) { + type + .getDetails(item) + .then((media) => { + item.name = media.name; + item.duration = media.duration; + item.description = media.description; + item.isLive = media.isLive; + this.queue.enqueue(item); + done(item); + }) + .catch((err) => error(err)); + } else error("Unknown Media Type!"); + }) + .then((item: MediaItem) => { + if (this.channel && item) { + const embed = createEmbed() + .setTitle("Track Added") + .addField("Title:", item.name) + .addField("Position:", `${this.queue.indexOf(item) + 1}`, true) + .addField("Requested By", item.requestor, true); + this.channel.send({ embeds: [embed] }); + } + }) + .catch((err) => { + if (this.channel) + this.channel.send({ + embeds: [createErrorEmbed(`Error adding track: ${err}`)], + }); + }); + } - at(idx: number) { - return this.queue[idx]; - } + at(idx: number) { + return this.queue[idx]; + } - remove(item: MediaItem) { - if(item == this.queue.first && (this.playing || this.paused)) - this.stop(); - this.queue.dequeue(item); - this.determineStatus(); - if(this.channel) - this.channel.send({embed: createInfoEmbed(`Track Removed: ${item.name}`)}); - } + remove(item: MediaItem) { + if (item == this.queue.first && (this.playing || this.paused)) this.stop(); + this.queue.dequeue(item); + this.determineStatus(); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`Track Removed: ${item.name}`)], + }); + } + + clear() { + if (this.playing || this.paused) this.stop(); + this.queue.clear(); + this.determineStatus(); + if (this.channel) + this.channel.send({ embeds: [createInfoEmbed(`Playlist Cleared!`)] }); + } - clear() { - if(this.playing || this.paused) - this.stop(); - this.queue.clear(); - this.determineStatus(); - if(this.channel) - this.channel.send({embed: createInfoEmbed(`Playlist Cleared!`)}); - + dispatchStream(stream: Readable, item: MediaItem) { + this.audioResource = createAudioResource(stream, { + inlineVolume: true, + inputType: StreamType.WebmOpus, + }); + + if (this.dispatcher) { + this.dispatcher.stop(); + this.dispatcher = createAudioPlayer({ + behaviors: { + noSubscriber: NoSubscriberBehavior.Pause, + }, + }); + this.dispatcher.play(this.audioResource); } - dispatchStream(stream: Readable, item: MediaItem) { - if(this.dispatcher) { - this.dispatcher.end(); - this.dispatcher = null; - } - this.dispatcher = this.connection.play(stream, { - seek: this.config.stream.seek, - volume: this.config.stream.volume, - bitrate: this.config.stream.bitrate, - fec: this.config.stream.forwardErrorCorrection, - plp: this.config.stream.packetLossPercentage, - highWaterMark: 1 << 28 - }); - this.dispatcher.on('start', async () => { - this.playing = true; - this.determineStatus(); - if(this.channel) { - const msg = await this.channel.send({embed: - createEmbed() - .setTitle('▶️ Now playing') - .setDescription(`${item.name}`) - .addField('Requested By', `${item.requestor}`) - }); - msg.react(this.config.emojis.stopSong); - msg.react(this.config.emojis.playSong); - msg.react(this.config.emojis.pauseSong); - msg.react(this.config.emojis.skipSong); - } - }); - this.dispatcher.on('debug', (info: string) => { - this.logger.debug(info); - }); - this.dispatcher.on('error', err => { - this.skip(); - this.logger.error(err); - if(this.channel) - this.channel.send({embed:createErrorEmbed(`@Miki-> Error Playing Song: ${err}`)}); - process.exit(2); - }); - this.dispatcher.on('close', () => { - this.logger.debug(`Stream Closed`); - if (this.dispatcher) { - this.playing = false; - this.dispatcher = null; - // this.determineStatus(); - if(!this.stopping) { - let track = this.queue.dequeue(); - if(this.config.queue.repeat) - this.queue.enqueue(track); - setTimeout(() => { - this.play(); - }, 1000); - } - this.stopping = false; - } - this.determineStatus(); - }); - this.dispatcher.on('finish', () => { - this.logger.debug('Stream Finished'); - if (this.dispatcher) { - this.playing = false; - this.dispatcher = null; - this.determineStatus(); - if(!this.stopping) { - let track = this.queue.dequeue(); - if(this.config.queue.repeat) - this.queue.enqueue(track); - setTimeout(() => { - this.play(); - }, 1000); - } - this.stopping = false; - } - }); - this.dispatcher.on('end', (reason: string) => { - this.logger.debug(`Stream Ended: ${reason}`); - this.determineStatus(); + this.dispatcher.on(AudioPlayerStatus.Buffering, async () => { + if (this.channel) { + const embed = createEmbed() + .setTitle("▶️ Now Buffering") + .setDescription(`${item.name}`) + .addField("Requested By", `${item.requestor}`); + const msg = await this.channel.send({ embeds: [embed] }); + } + this.determineStatus(); + }); + + this.dispatcher.on(AudioPlayerStatus.Playing, async () => { + this.playing = true; + this.determineStatus(); + if (this.channel) { + const embed = createEmbed() + .setTitle("▶️ Now playing") + .setDescription(`${item.name}`) + .addField("Requested By", `${item.requestor}`); + const msg = await this.channel.send({ embeds: [embed] }); + msg.react(this.config.emojis.stopSong); + msg.react(this.config.emojis.playSong); + msg.react(this.config.emojis.pauseSong); + msg.react(this.config.emojis.skipSong); + } + }); + this.dispatcher.on("debug", (info: string) => { + this.logger.debug(info); + }); + this.dispatcher.on("error", (err) => { + this.skip(); + this.logger.error(err); + if (this.channel) + this.channel.send({ + embeds: [createErrorEmbed(`@Miki-> Error Playing Song: ${err}`)], }); - } + process.exit(2); + }); - async play() { - if(this.queue.length == 0 && this.channel) - this.channel.send({embed: createInfoEmbed(`Queue is empty! Add some songs!`)}); - - if(this.playing && !this.paused) - this.channel.send({embed: createInfoEmbed(`Already playing a song!`)}); - - let item = this.queue.first; - if(item && this.connection) { - let type = this.typeRegistry.get(item.type); - if(type) { - if(!this.playing) { - type.getStream(item) - .then(stream => { - this.dispatchStream(stream, item); - }).then(()=>{ - this.determineStatus(); - });; - } else if(this.paused && this.dispatcher) { - this.dispatcher.resume(); - this.paused = false; - this.determineStatus(); - if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏯️ ${this.queue.first.name}resumed`)}); - - } - } + this.dispatcher.on(AudioPlayerStatus.Idle, () => { + this.logger.debug("Stream Finished"); + if (this.dispatcher) { + this.playing = false; + if (!this.stopping) { + let track = this.queue.dequeue(); + if (this.config.queue.repeat) this.queue.enqueue(track); + setTimeout(() => { + this.play(); + }, 1000); } - } + this.stopping = false; + } + this.determineStatus(); + }); + } - stop() { - if(this.playing && this.dispatcher) { - let item = this.queue.first; - this.stopping = true; - this.paused = false; - this.playing = false; - this.dispatcher.pause(); - this.dispatcher.destroy(); - this.determineStatus(); - if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏹️ ${item.name} stopped`)}); - + async play() { + if (this.queue.length == 0 && this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`Queue is empty! Add some songs!`)], + }); + + if (this.playing && !this.paused) + this.channel.send({ + embeds: [createInfoEmbed(`Already playing a song!`)], + }); + + let item = this.queue.first; + if (item && this.connection) { + let type = this.typeRegistry.get(item.type); + if (type) { + if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { + type + .getStream(item) + .then((stream) => { + this.dispatchStream(stream, item); + }) + .then(() => { + /* if (this.isPlaying == false) { + console.log("subscribe here ----->>.");*/ + this.connection.subscribe(this.dispatcher); //here audioplayer not reusable ????????????? + /* this.isPlaying = true; + }*/ + this.determineStatus(); + }); + } else if (this.paused && this.dispatcher) { + this.dispatcher.unpause(); + this.paused = false; + this.determineStatus(); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`⏯️ ${this.queue.first.name}resumed`)], + }); } + } } + } - skip() { - if(this.playing && this.dispatcher) { - let item = this.queue.first; - this.paused = false; - this.dispatcher.pause(); - this.dispatcher.destroy(); - if(this.channel) - this.channel.send({embed : createInfoEmbed(`⏭️ ${item.name} skipped`)}); - - } else if(this.queue.length > 0) { - let item = this.queue.first; - this.queue.dequeue(); - if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏭️ ${item.name} skipped`)}); - - } - this.determineStatus(); + stop() { + if (this.playing && this.dispatcher) { + let item = this.queue.first; + this.stopping = true; + this.paused = false; + this.playing = false; + this.dispatcher.pause(); + this.dispatcher.stop(true); + this.determineStatus(); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`⏹️ ${item.name} stopped`)], + }); } + } - pause() { - if(this.playing && !this.paused && this.dispatcher) { - this.dispatcher.pause(); - this.paused = true; - this.determineStatus(); - if(this.channel) - this.channel.send({embed: createInfoEmbed(`⏸️ ${this.queue.first.name} paused`)}); - - } + skip() { + if (this.playing && this.dispatcher) { + let item = this.queue.first; + this.paused = false; + this.dispatcher.pause(); + this.dispatcher.stop(true); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`⏭️ ${item.name} skipped`)], + }); + } else if (this.queue.length > 0) { + let item = this.queue.first; + this.queue.dequeue(); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`⏭️ ${item.name} skipped`)], + }); } + this.determineStatus(); + } - shuffle() { - if(this.playing || this.paused) - this.stop(); - this.queue.shuffle(); - this.determineStatus(); - if(this.channel) - this.channel.send({embed: createInfoEmbed(`🔀 Queue Shuffled`)}); - + pause() { + if (this.playing && !this.paused && this.dispatcher) { + this.dispatcher.pause(); + this.paused = true; + this.determineStatus(); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`⏸️ ${this.queue.first.name} paused`)], + }); } + } - move(currentIdx: number, targetIdx: number) { - let max = this.queue.length - 1; - let min = 0; - currentIdx = Math.min(Math.max(currentIdx, min), max); - targetIdx = Math.min(Math.max(targetIdx, min), max); + shuffle() { + if (this.playing || this.paused) this.stop(); + this.queue.shuffle(); + this.determineStatus(); + if (this.channel) + this.channel.send({ embeds: [createInfoEmbed(`🔀 Queue Shuffled`)] }); + } - if(currentIdx != targetIdx) { - this.queue.move(currentIdx, targetIdx); - this.determineStatus(); - } - } + move(currentIdx: number, targetIdx: number) { + let max = this.queue.length - 1; + let min = 0; + currentIdx = Math.min(Math.max(currentIdx, min), max); + targetIdx = Math.min(Math.max(targetIdx, min), max); - setVolume(volume: number) { - volume = Math.min(Math.max((volume / 100) + 0.5, 0.5), 2); - this.config.stream.volume = volume; - if(this.dispatcher) { - this.dispatcher.setVolume(volume); - } + if (currentIdx != targetIdx) { + this.queue.move(currentIdx, targetIdx); + this.determineStatus(); } + } - getVolume() { - return ((this.config.stream.volume - 0.5) * 100) + '%'; + setVolume(volume: number) { + volume = Math.min(Math.max(volume / 100 + 0.5, 0.5), 2); + this.config.stream.volume = volume; + if (this.dispatcher) { + this.audioResource.volume.setVolume(volume); } + } + + getVolume() { + return (this.config.stream.volume - 0.5) * 100 + "%"; + } + + determineStatus() { + let item = this.queue.first; + console.log( + `det sts ${this.queue.length} && state ${this.dispatcher.state.status}` + ); - determineStatus() { - let item = this.queue.first; - - if(this.playing && this.queue.length>0){ - this.status.setBanner(`Now Playing: "${item.name}" Requested by: ${item.requestor}${this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"`:''}`); - if(this.paused){ - this.status.setBanner(`Paused: "${item.name}" Requested by: ${item.requestor}`); - - }else if(!this.playing && this.queue.length > 0){ - this.status.setBanner(`Up Next: "${item.name}" Requested by: ${item.requestor}`); - - } - }if(this.queue.length<1){ - this.status.setBanner(`No Songs In Queue`); - } + if (this.dispatcher.state.status == AudioPlayerStatus.Buffering) { + this.status.setBanner(`Buffering...`); + } + if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { + if (this.queue.length < 1) this.status.setBanner(`No Songs In Queue`); + } else if (this.dispatcher.state.status == AudioPlayerStatus.Playing) { + this.status.setBanner( + `Now Playing: "${item.name}" Requested by: ${item.requestor}${ + this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" + }` + ); + if (this.paused) { + this.status.setBanner( + `Paused: "${item.name}" Requested by: ${item.requestor}` + ); + } + } - if(this.queue.length>0 && item.isLive){ - this.status.setBanner(`Playing live stream Requested by : ${item.requestor}`); - } - } + if (this.queue.length > 0 && item.isLive) { + this.status.setBanner( + `Playing ${item.name} stream Requested by : ${item.requestor}` + ); + } + } +} +//in future dev.. +async function probeAndCreateResource(readableStream) { + const { stream, type } = await demuxProbe(readableStream); + return createAudioResource(stream, { inputType: type }); } diff --git a/src/plugins/playlist.ts b/src/plugins/playlist.ts index a4c13f8..fa3e325 100755 --- a/src/plugins/playlist.ts +++ b/src/plugins/playlist.ts @@ -33,7 +33,7 @@ export default class PlaylistPlugin extends IBotPlugin { .filter(file => file.includes('.json')) .map((file, i) => `${i + 1}. ${file.replace('.json', '')}`); - msg.channel.send({embed: createInfoEmbed(`Playlists`, `${files.length == 0 ? 'No Playlists' : files.join('\n')}`)}); + msg.channel.send({ embeds: [createInfoEmbed(`Playlists`, `${files.length == 0 ? 'No Playlists' : files.join('\n')}`)] }); } load(cmd: SuccessfulParsedMessage, msg: Message) { @@ -48,7 +48,7 @@ export default class PlaylistPlugin extends IBotPlugin { this.bot.player.queue.push(...queue.list); } this.bot.player.determineStatus(); - msg.channel.send({embed: createInfoEmbed('Loaded Playlist:',name)}); + msg.channel.send({ embeds: [createInfoEmbed('Loaded Playlist:',name)] }); msg.channel.send('test'); } } @@ -61,7 +61,7 @@ export default class PlaylistPlugin extends IBotPlugin { if(queue.list.length > 0) { writeJson(queue, playlistDir, `${name}.json`); } - msg.channel.send({embed: createInfoEmbed('Saved Playlist', name)}); + msg.channel.send({ embeds: [createInfoEmbed('Saved Playlist', name)] }); } } @@ -69,7 +69,7 @@ export default class PlaylistPlugin extends IBotPlugin { let name = cmd.arguments[1]; if(name && fileExists(playlistDir, `${name}.json`)) { deleteFile(playlistDir, `${name}.json`); - msg.channel.send({embed: createInfoEmbed('Deleted Playlist',name)}); + msg.channel.send({ embeds: [createInfoEmbed('Deleted Playlist',name)] }); } } diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts index 0c3358a..dcefdf7 100755 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -49,10 +49,9 @@ export default class YoutubePlugin extends IBotPlugin { .catch(err => error(err)); }), getStream: (item: MediaItem) => new Promise((done, error) => { - // let stream = ytdl(item.url, { filter: 'audioonly', quality: 'highestaudio', highWaterMark:1<<28, dlChunkSize:1<<12, liveBuffer: 4900 }); - let stream = ytdl(item.url, { quality: 'highestaudio', - filter: (item.isLive ? (format => format.isHLS === true) : (format => format.container === 'webm' && format.codecs === 'opus')), - highWaterMark: 1<<10, liveBuffer: 4000, dlChunkSize: 1<<12 }); + let stream = ytdl(item.url, { quality: 'highestaudio', + filter: (item.isLive ? ( format => format.isHLS === true ) : (format => format.container === 'webm' && format.codecs === 'opus')), + highWaterMark: 1<<28, liveBuffer: 4999, dlChunkSize: 1<<12 }); if(stream) done(stream); From 546135f8638be4b699a82a07dd9bdde940a74e23 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Mon, 8 Nov 2021 22:21:27 +0200 Subject: [PATCH 11/23] more improving for discordjs13 --- package-lock.json | 348 +++++++++++--------------------------- package.json | 1 - src/bot/bot.ts | 45 ++++- src/media/media-player.ts | 169 +++++++++++------- 4 files changed, 236 insertions(+), 327 deletions(-) diff --git a/package-lock.json b/package-lock.json index 078e92f..5ce4d2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,6 @@ "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", "discord.js": "^13.3.1", - "ffmpeg-static": "^4.4.0", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", @@ -40,20 +39,6 @@ "kuler": "^2.0.0" } }, - "node_modules/@derhuerst/http-basic": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@derhuerst/http-basic/-/http-basic-8.2.1.tgz", - "integrity": "sha512-Rmn7qQQulw2sxJ8qGfZ7OuqMWuhz8V+L5xnYKMF5cXVcYqmgWqlVEAme90pF7Ya8OVhxVxLmhh0rI2k6t7ITWw==", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@discordjs/builders": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", @@ -284,19 +269,6 @@ "node": ">=10" } }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/async": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", @@ -408,11 +380,6 @@ "concat-map": "0.0.1" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, "node_modules/bufferutil": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", @@ -433,11 +400,6 @@ "node": ">=6" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "node_modules/cheerio": { "version": "1.0.0-rc.10", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", @@ -574,20 +536,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -806,14 +754,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "engines": { - "node": ">=6" - } - }, "node_modules/es5-ext": { "version": "0.10.53", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", @@ -881,21 +821,6 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, - "node_modules/ffmpeg-static": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.4.0.tgz", - "integrity": "sha512-NIJHVPXlSsIK9pYvsTPh4ZlppauorpPLLeOaIG7VOXWQck4Fx4Qi7Ahe+j8mj8KZXhWwCg3Hx46JdWAIOWLcpg==", - "hasInstallScript": true, - "dependencies": { - "@derhuerst/http-basic": "^8.2.0", - "env-paths": "^2.2.0", - "https-proxy-agent": "^5.0.0", - "progress": "^2.0.3" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -997,19 +922,6 @@ "entities": "^2.0.0" } }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -1423,11 +1335,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" - }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -1454,26 +1361,17 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/redstar": { @@ -1499,9 +1397,23 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/safe-stable-stringify": { "version": "1.1.1", @@ -1563,11 +1475,11 @@ } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { @@ -1672,11 +1584,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "node_modules/typescript": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", @@ -1775,17 +1682,31 @@ "node": ">= 6.4.0" } }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/winston-transport/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/winston-transport/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, "node_modules/wrappy": { @@ -1883,17 +1804,6 @@ "kuler": "^2.0.0" } }, - "@derhuerst/http-basic": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@derhuerst/http-basic/-/http-basic-8.2.1.tgz", - "integrity": "sha512-Rmn7qQQulw2sxJ8qGfZ7OuqMWuhz8V+L5xnYKMF5cXVcYqmgWqlVEAme90pF7Ya8OVhxVxLmhh0rI2k6t7ITWw==", - "requires": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - } - }, "@discordjs/builders": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", @@ -2059,18 +1969,6 @@ "requires": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "async": { @@ -2184,11 +2082,6 @@ "concat-map": "0.0.1" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, "bufferutil": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", @@ -2202,11 +2095,6 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "cheerio": { "version": "1.0.0-rc.10", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", @@ -2321,17 +2209,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2489,11 +2366,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - }, "es5-ext": { "version": "0.10.53", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", @@ -2563,17 +2435,6 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, - "ffmpeg-static": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.4.0.tgz", - "integrity": "sha512-NIJHVPXlSsIK9pYvsTPh4ZlppauorpPLLeOaIG7VOXWQck4Fx4Qi7Ahe+j8mj8KZXhWwCg3Hx46JdWAIOWLcpg==", - "requires": { - "@derhuerst/http-basic": "^8.2.0", - "env-paths": "^2.2.0", - "https-proxy-agent": "^5.0.0", - "progress": "^2.0.3" - } - }, "fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -2653,21 +2514,6 @@ "entities": "^2.0.0" } }, - "http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "requires": { - "@types/node": "^10.0.3" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - } - } - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -2994,11 +2840,6 @@ "vali-date": "^1.0.0" } }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" - }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -3022,23 +2863,14 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "redstar": { @@ -3058,9 +2890,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-stable-stringify": { "version": "1.1.1", @@ -3112,11 +2944,11 @@ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "string-width": { @@ -3203,11 +3035,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "typescript": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", @@ -3272,18 +3099,6 @@ "stack-trace": "0.0.x", "triple-beam": "^1.3.0", "winston-transport": "^4.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "winston-transport": { @@ -3293,6 +3108,35 @@ "requires": { "readable-stream": "^2.3.7", "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "wrappy": { diff --git a/package.json b/package.json index 4b01165..47fc5e5 100755 --- a/package.json +++ b/package.json @@ -17,7 +17,6 @@ "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", "discord.js": "^13.3.1", - "ffmpeg-static": "^4.4.0", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 99a773f..33799f1 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -21,7 +21,7 @@ import { User, } from "discord-bot-quickstart"; import * as yts from "yt-search"; -import { VoiceConnectionStatus } from "@discordjs/voice"; +import { AudioPlayerStatus, VoiceConnectionStatus } from "@discordjs/voice"; const helptext = readFile("../helptext.txt"); const random = (array) => { @@ -111,10 +111,15 @@ export class RhythmBot extends IBot { VoiceConnectionStatus.Disconnected ) ) + // this.player.dispatcher.stop(); this.player.connection.disconnect(); }) .on("desc", (cmd: SuccessfulParsedMessage, msg: Message) => { - if (this.player.playing && this.player.dispatcher) { + //if (this.player.playing && this.player.dispatcher) { + if ( + this.player.dispatcher && + this.player.dispatcher.state.status == AudioPlayerStatus.Playing + ) { msg.channel.send({ embeds: [ createInfoEmbed( @@ -148,7 +153,14 @@ export class RhythmBot extends IBot { requestor: msg.author.username, }) .then(() => { - if (!this.player.playing) this.player.play(); + if ( + this.player.dispatcher && + !( + this.player.dispatcher.state.status == + AudioPlayerStatus.Playing + ) + ) + this.player.play(); }); } else if ( cmd.body.length > 0 && @@ -175,7 +187,14 @@ export class RhythmBot extends IBot { requestor: msg.author.username, }) .then(() => { - if (!this.player.playing) this.player.play(); + if ( + this.player.dispatcher && + !( + this.player.dispatcher.state.status == + AudioPlayerStatus.Playing + ) + ) + this.player.play(); }); }); }); @@ -189,7 +208,9 @@ export class RhythmBot extends IBot { }) .on("time", (cmd: SuccessfulParsedMessage, msg: Message) => { let media = this.player.queue.first; - if (this.player.playing && this.player.dispatcher) { + // if (this.player.playing && this.player.dispatcher) { + if(this.player.dispatcher && ( this.player.dispatcher.state.status == + AudioPlayerStatus.Playing) ){ let elapsed = secondsToTimestamp( this.player.audioResource.playbackDuration / 1000 ); @@ -264,7 +285,13 @@ export class RhythmBot extends IBot { requestor: msg.author.username, }) .then(() => { - if (!this.player.playing) this.player.play(); + if ( + this.player.dispatcher && + !( + this.player.dispatcher.state.status == + AudioPlayerStatus.Playing + ) + )this.player.play(); }); } else { this.player.addMedia({ @@ -443,9 +470,9 @@ export class RhythmBot extends IBot { // if 1 (you), wait five minutes if (oldState.channel.members.size < 2) // if there's still 1 member, - - oldState.disconnect(); - }, 180000); // (3 min in ms) + // this.player.skip(); + this.player.connection.disconnect(); + }, 30000); // (3 min in ms) }); } diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 2f141b6..f1ac8b3 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -28,9 +28,6 @@ import { Readable } from "stream"; export class MediaPlayer { typeRegistry: Map = new Map(); queue: MediaQueue = new MediaQueue(); - playing: boolean = false; - paused: boolean = false; - stopping: boolean = false; config: IRhythmBotConfig; status: BotStatus; logger: Logger; @@ -49,7 +46,11 @@ export class MediaPlayer { this.config = config; this.status = status; this.logger = logger; - this.dispatcher = createAudioPlayer(); + this.dispatcher = createAudioPlayer({ + behaviors: { + noSubscriber: NoSubscriberBehavior.Pause, + }, + }); } addMedia(item: MediaItem): Promise { @@ -77,6 +78,7 @@ export class MediaPlayer { .addField("Position:", `${this.queue.indexOf(item) + 1}`, true) .addField("Requested By", item.requestor, true); this.channel.send({ embeds: [embed] }); + this.determineStatus(); } }) .catch((err) => { @@ -85,6 +87,7 @@ export class MediaPlayer { embeds: [createErrorEmbed(`Error adding track: ${err}`)], }); }); + } at(idx: number) { @@ -92,7 +95,12 @@ export class MediaPlayer { } remove(item: MediaItem) { - if (item == this.queue.first && (this.playing || this.paused)) this.stop(); + if ( + item == this.queue.first && + (this.dispatcher.state.status == AudioPlayerStatus.Playing || + this.dispatcher.state.status == AudioPlayerStatus.Paused) + ) + this.stop(); this.queue.dequeue(item); this.determineStatus(); if (this.channel) @@ -102,7 +110,9 @@ export class MediaPlayer { } clear() { - if (this.playing || this.paused) this.stop(); + if ( (this.dispatcher.state.status == AudioPlayerStatus.Playing || + this.dispatcher.state.status == AudioPlayerStatus.Paused) + ) this.stop(); this.queue.clear(); this.determineStatus(); if (this.channel) @@ -110,20 +120,18 @@ export class MediaPlayer { } dispatchStream(stream: Readable, item: MediaItem) { + this.audioResource = createAudioResource(stream, { inlineVolume: true, inputType: StreamType.WebmOpus, }); - if (this.dispatcher) { + /* if (this.dispatcher) { this.dispatcher.stop(); - this.dispatcher = createAudioPlayer({ - behaviors: { - noSubscriber: NoSubscriberBehavior.Pause, - }, - }); + this.dispatcher = createAudioPlayer(); this.dispatcher.play(this.audioResource); - } + }*/ + this.dispatcher.play(this.audioResource); this.dispatcher.on(AudioPlayerStatus.Buffering, async () => { if (this.channel) { @@ -137,7 +145,7 @@ export class MediaPlayer { }); this.dispatcher.on(AudioPlayerStatus.Playing, async () => { - this.playing = true; + // this.playing = true; this.determineStatus(); if (this.channel) { const embed = createEmbed() @@ -152,7 +160,7 @@ export class MediaPlayer { } }); this.dispatcher.on("debug", (info: string) => { - this.logger.debug(info); + // this.logger.debug(info); }); this.dispatcher.on("error", (err) => { this.skip(); @@ -164,19 +172,34 @@ export class MediaPlayer { process.exit(2); }); - this.dispatcher.on(AudioPlayerStatus.Idle, () => { - this.logger.debug("Stream Finished"); - if (this.dispatcher) { - this.playing = false; - if (!this.stopping) { - let track = this.queue.dequeue(); - if (this.config.queue.repeat) this.queue.enqueue(track); - setTimeout(() => { - this.play(); - }, 1000); - } - this.stopping = false; + this.dispatcher.on("stateChange", (oldState, newState) => { + if ( + newState.status === AudioPlayerStatus.Idle && + oldState.status !== AudioPlayerStatus.Idle + ) { + this.dispatcher.stop(true); + this.audioResource = null; + this.dispatcher = null; + let track = this.queue.dequeue(); + this.play(); + + if (this.config.queue.repeat) this.queue.enqueue(track); + setTimeout(() => { + this.play(); + }, 1000); + } else if (newState.status === AudioPlayerStatus.Playing) { + } + }); + + this.connection.subscribe(this.dispatcher); + + this.dispatcher.on(AudioPlayerStatus.Idle, async () => { + this.logger.debug("Stream Finished"); + this.determineStatus(); + }); + + this.dispatcher.on(AudioPlayerStatus.AutoPaused, () => { this.determineStatus(); }); } @@ -187,7 +210,16 @@ export class MediaPlayer { embeds: [createInfoEmbed(`Queue is empty! Add some songs!`)], }); - if (this.playing && !this.paused) + if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.AutoPaused + ) + this.dispatcher.unpause(); + + if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.Playing + ) this.channel.send({ embeds: [createInfoEmbed(`Already playing a song!`)], }); @@ -196,6 +228,7 @@ export class MediaPlayer { if (item && this.connection) { let type = this.typeRegistry.get(item.type); if (type) { + this.dispatcher = createAudioPlayer(); if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { type .getStream(item) @@ -203,16 +236,10 @@ export class MediaPlayer { this.dispatchStream(stream, item); }) .then(() => { - /* if (this.isPlaying == false) { - console.log("subscribe here ----->>.");*/ - this.connection.subscribe(this.dispatcher); //here audioplayer not reusable ????????????? - /* this.isPlaying = true; - }*/ this.determineStatus(); }); - } else if (this.paused && this.dispatcher) { + } else if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Paused) { this.dispatcher.unpause(); - this.paused = false; this.determineStatus(); if (this.channel) this.channel.send({ @@ -224,11 +251,8 @@ export class MediaPlayer { } stop() { - if (this.playing && this.dispatcher) { + if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Playing) { let item = this.queue.first; - this.stopping = true; - this.paused = false; - this.playing = false; this.dispatcher.pause(); this.dispatcher.stop(true); this.determineStatus(); @@ -240,10 +264,10 @@ export class MediaPlayer { } skip() { - if (this.playing && this.dispatcher) { + if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Playing) { let item = this.queue.first; - this.paused = false; - this.dispatcher.pause(); + + // this.dispatcher.pause(); this.dispatcher.stop(true); if (this.channel) this.channel.send({ @@ -261,9 +285,8 @@ export class MediaPlayer { } pause() { - if (this.playing && !this.paused && this.dispatcher) { + if(this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Playing){ this.dispatcher.pause(); - this.paused = true; this.determineStatus(); if (this.channel) this.channel.send({ @@ -273,7 +296,9 @@ export class MediaPlayer { } shuffle() { - if (this.playing || this.paused) this.stop(); + //if (this.playing || this.paused) this.stop(); + if(this.dispatcher && (this.dispatcher.state.status == AudioPlayerStatus.Playing || + this.dispatcher.state.status == AudioPlayerStatus.Paused || this.dispatcher.state.status == AudioPlayerStatus.AutoPaused)) this.stop(); this.queue.shuffle(); this.determineStatus(); if (this.channel) @@ -306,32 +331,46 @@ export class MediaPlayer { determineStatus() { let item = this.queue.first; - console.log( - `det sts ${this.queue.length} && state ${this.dispatcher.state.status}` - ); - if (this.dispatcher.state.status == AudioPlayerStatus.Buffering) { - this.status.setBanner(`Buffering...`); - } - if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { - if (this.queue.length < 1) this.status.setBanner(`No Songs In Queue`); - } else if (this.dispatcher.state.status == AudioPlayerStatus.Playing) { - this.status.setBanner( - `Now Playing: "${item.name}" Requested by: ${item.requestor}${ - this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" - }` - ); - if (this.paused) { + if (this.dispatcher) { + + if (this.dispatcher.state.status == AudioPlayerStatus.Buffering) { + this.status.setBanner(`Buffering...`); + } + if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { + if (this.queue.length < 1) this.status.setBanner(`No Songs In Queue`); + } else if (this.dispatcher.state.status == AudioPlayerStatus.Playing) { + this.status.setBanner( + `Now Playing: "${item.name}" Requested by: ${item.requestor}${ + this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" + }` + ); + + } + if (this.dispatcher.state.status == AudioPlayerStatus.Paused) { this.status.setBanner( `Paused: "${item.name}" Requested by: ${item.requestor}` ); } - } + if (this.dispatcher.state.status == AudioPlayerStatus.AutoPaused) { + this.status.setBanner(`Auto Paused: "${item.name}"`); + } + if ( + this.dispatcher.state.status == AudioPlayerStatus.Playing && + this.queue.length > 1 + ) { + this.status.setBanner( + `Now Playing: "${item.name}" Requested by: ${item.requestor}${ + this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" + }` + ); + } - if (this.queue.length > 0 && item.isLive) { - this.status.setBanner( - `Playing ${item.name} stream Requested by : ${item.requestor}` - ); + if (this.queue.length > 0 && item.isLive) { + this.status.setBanner( + `Playing ${item.name} stream Requested by : ${item.requestor}` + ); + } } } } From 4790825c9f66c957042b4d0b0ab253f53e0c8b77 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Wed, 10 Nov 2021 19:39:07 +0200 Subject: [PATCH 12/23] please be a fix --- src/bot/bot.ts | 1 - src/media/media-player.ts | 46 ++++++++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 33799f1..7ac1457 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -135,7 +135,6 @@ export class RhythmBot extends IBot { if (!this.player.connection) { joinUserChannel(msg).then((conn) => { this.player.connection = conn; - console.log("user joined channel !!!"); msg.channel.send({ embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], }); diff --git a/src/media/media-player.ts b/src/media/media-player.ts index f1ac8b3..ecb4fd5 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -65,6 +65,7 @@ export class MediaPlayer { item.description = media.description; item.isLive = media.isLive; this.queue.enqueue(item); + this.determineStatus(); done(item); }) .catch((err) => error(err)); @@ -126,12 +127,12 @@ export class MediaPlayer { inputType: StreamType.WebmOpus, }); - /* if (this.dispatcher) { + if (this.dispatcher) { this.dispatcher.stop(); - this.dispatcher = createAudioPlayer(); + this.dispatcher = createAudioPlayer(); this.dispatcher.play(this.audioResource); - }*/ - this.dispatcher.play(this.audioResource); + } + // this.dispatcher.play(this.audioResource); this.dispatcher.on(AudioPlayerStatus.Buffering, async () => { if (this.channel) { @@ -146,7 +147,7 @@ export class MediaPlayer { this.dispatcher.on(AudioPlayerStatus.Playing, async () => { // this.playing = true; - this.determineStatus(); + this.determineStatus(); if (this.channel) { const embed = createEmbed() .setTitle("▶️ Now playing") @@ -179,9 +180,10 @@ export class MediaPlayer { ) { this.dispatcher.stop(true); this.audioResource = null; - this.dispatcher = null; + // this.dispatcher = null; let track = this.queue.dequeue(); - this.play(); + //this.play(); + this.determineStatus(); if (this.config.queue.repeat) this.queue.enqueue(track); setTimeout(() => { @@ -204,7 +206,7 @@ export class MediaPlayer { }); } - async play() { + play() { if (this.queue.length == 0 && this.channel) this.channel.send({ embeds: [createInfoEmbed(`Queue is empty! Add some songs!`)], @@ -228,7 +230,7 @@ export class MediaPlayer { if (item && this.connection) { let type = this.typeRegistry.get(item.type); if (type) { - this.dispatcher = createAudioPlayer(); + //this.dispatcher = createAudioPlayer(); if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { type .getStream(item) @@ -268,6 +270,7 @@ export class MediaPlayer { let item = this.queue.first; // this.dispatcher.pause(); + this.dispatcher.stop(true); if (this.channel) this.channel.send({ @@ -331,22 +334,23 @@ export class MediaPlayer { determineStatus() { let item = this.queue.first; - + console.log(`dis : ${this.dispatcher.state.status}`); if (this.dispatcher) { - if (this.dispatcher.state.status == AudioPlayerStatus.Buffering) { this.status.setBanner(`Buffering...`); } if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { - if (this.queue.length < 1) this.status.setBanner(`No Songs In Queue`); - } else if (this.dispatcher.state.status == AudioPlayerStatus.Playing) { + if (this.queue.length <= 0) this.status.setBanner(`No Songs In Queue`); + } + + /* if (this.dispatcher.state.status == AudioPlayerStatus.Playing) { this.status.setBanner( `Now Playing: "${item.name}" Requested by: ${item.requestor}${ this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" }` ); - } + }*/ if (this.dispatcher.state.status == AudioPlayerStatus.Paused) { this.status.setBanner( `Paused: "${item.name}" Requested by: ${item.requestor}` @@ -356,12 +360,20 @@ export class MediaPlayer { this.status.setBanner(`Auto Paused: "${item.name}"`); } if ( - this.dispatcher.state.status == AudioPlayerStatus.Playing && - this.queue.length > 1 + this.dispatcher.state.status == AudioPlayerStatus.Idle && + this.queue.length > 0 + ){ + this.status.setBanner( + `Playing Next: "${item.name}" Requested by: ${item.requestor}`); + + } + + if ( + this.dispatcher.state.status == AudioPlayerStatus.Playing ) { this.status.setBanner( `Now Playing: "${item.name}" Requested by: ${item.requestor}${ - this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" + this.queue.length > 0 ? `, Up Next "${this.queue[1].name}"` : "" }` ); } From 3f01fd675354bde62fbba20536c516804b17a256 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Thu, 11 Nov 2021 21:47:13 +0200 Subject: [PATCH 13/23] fixes for banner messages and for multiple calls --- package.json | 4 +-- src/bot/bot.ts | 20 +++++++++++-- src/media/media-player.ts | 63 ++++++++++++++++----------------------- 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 47fc5e5..47c1e33 100755 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "license": "ISC", "dependencies": { "@discordjs/opus": "github:discordjs/opus", - "@discordjs/voice": "^0.7.2", - "@types/node": "^16.11.6", + "@discordjs/voice": "^0.7.3", + "@types/node": "^16.11.7", "bufferutil": "^4.0.5", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 7ac1457..09b566e 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -159,6 +159,7 @@ export class RhythmBot extends IBot { AudioPlayerStatus.Playing ) ) + console.log("player play with youtubelink"); this.player.play(); }); } else if ( @@ -231,6 +232,17 @@ export class RhythmBot extends IBot { .on( "search", async (cmd: SuccessfulParsedMessage, msg: Message) => { + new Promise((done) => { + if (!this.player.connection) { + joinUserChannel(msg).then((conn) => { + this.player.connection = conn; + msg.channel.send({ + embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], + }); + done(); + }); + } else done(); + }).then(async ()=>{ let noResults = false; if (cmd.body != null && cmd.body !== "") { @@ -264,7 +276,9 @@ export class RhythmBot extends IBot { createErrorEmbed(`No songs found OR No search string provided`), ], }); + } + }); } ) .on( @@ -454,7 +468,7 @@ export class RhythmBot extends IBot { } } ); - //stackoverflow solution ! not needed in discordjs 13 + //stackoverflow solution ! client.on("voiceStateUpdate", (oldState, newState) => { // if nobody left the channel in question, return. if ( @@ -470,13 +484,14 @@ export class RhythmBot extends IBot { if (oldState.channel.members.size < 2) // if there's still 1 member, // this.player.skip(); + this.player.dispatcher.stop(true); this.player.connection.disconnect(); }, 30000); // (3 min in ms) }); } onReady(client: Client): void { - this.player.determineStatus(); + console.log(`Guilds: ${this.client.guilds.cache.size}`); this.client.guilds.cache.forEach((guild) => { console.log(`\nGuild Name: ${guild.name}`); @@ -497,6 +512,7 @@ export class RhythmBot extends IBot { console.log("Unable to manage messages on this guild"); } }); + this.status.setBanner(`No Songs In Queue`); } onRegisterConsoleCommands( diff --git a/src/media/media-player.ts b/src/media/media-player.ts index ecb4fd5..7796048 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -65,7 +65,6 @@ export class MediaPlayer { item.description = media.description; item.isLive = media.isLive; this.queue.enqueue(item); - this.determineStatus(); done(item); }) .catch((err) => error(err)); @@ -79,8 +78,9 @@ export class MediaPlayer { .addField("Position:", `${this.queue.indexOf(item) + 1}`, true) .addField("Requested By", item.requestor, true); this.channel.send({ embeds: [embed] }); - this.determineStatus(); + } + // this.determineStatus();//1 }) .catch((err) => { if (this.channel) @@ -103,7 +103,6 @@ export class MediaPlayer { ) this.stop(); this.queue.dequeue(item); - this.determineStatus(); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`Track Removed: ${item.name}`)], @@ -115,7 +114,6 @@ export class MediaPlayer { this.dispatcher.state.status == AudioPlayerStatus.Paused) ) this.stop(); this.queue.clear(); - this.determineStatus(); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`Playlist Cleared!`)] }); } @@ -129,10 +127,13 @@ export class MediaPlayer { if (this.dispatcher) { this.dispatcher.stop(); - this.dispatcher = createAudioPlayer(); - this.dispatcher.play(this.audioResource); + this.dispatcher = createAudioPlayer({ + behaviors: { + noSubscriber: NoSubscriberBehavior.Stop, + }, + }); + } - // this.dispatcher.play(this.audioResource); this.dispatcher.on(AudioPlayerStatus.Buffering, async () => { if (this.channel) { @@ -142,12 +143,9 @@ export class MediaPlayer { .addField("Requested By", `${item.requestor}`); const msg = await this.channel.send({ embeds: [embed] }); } - this.determineStatus(); }); - this.dispatcher.on(AudioPlayerStatus.Playing, async () => { - // this.playing = true; - this.determineStatus(); + this.dispatcher.on(AudioPlayerStatus.Playing, async () => { if (this.channel) { const embed = createEmbed() .setTitle("▶️ Now playing") @@ -176,34 +174,32 @@ export class MediaPlayer { this.dispatcher.on("stateChange", (oldState, newState) => { if ( newState.status === AudioPlayerStatus.Idle && - oldState.status !== AudioPlayerStatus.Idle + oldState.status != AudioPlayerStatus.Idle ) { this.dispatcher.stop(true); this.audioResource = null; - // this.dispatcher = null; let track = this.queue.dequeue(); //this.play(); - this.determineStatus(); if (this.config.queue.repeat) this.queue.enqueue(track); setTimeout(() => { this.play(); }, 1000); - } else if (newState.status === AudioPlayerStatus.Playing) { - } + this.determineStatus();//main }); this.connection.subscribe(this.dispatcher); this.dispatcher.on(AudioPlayerStatus.Idle, async () => { this.logger.debug("Stream Finished"); - this.determineStatus(); + //this.determineStatus();//2 }); this.dispatcher.on(AudioPlayerStatus.AutoPaused, () => { - this.determineStatus(); + // detsts }); + } play() { @@ -236,13 +232,10 @@ export class MediaPlayer { .getStream(item) .then((stream) => { this.dispatchStream(stream, item); + this.dispatcher.play(this.audioResource); }) - .then(() => { - this.determineStatus(); - }); } else if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Paused) { this.dispatcher.unpause(); - this.determineStatus(); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`⏯️ ${this.queue.first.name}resumed`)], @@ -257,7 +250,6 @@ export class MediaPlayer { let item = this.queue.first; this.dispatcher.pause(); this.dispatcher.stop(true); - this.determineStatus(); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`⏹️ ${item.name} stopped`)], @@ -284,13 +276,11 @@ export class MediaPlayer { embeds: [createInfoEmbed(`⏭️ ${item.name} skipped`)], }); } - this.determineStatus(); } pause() { if(this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Playing){ this.dispatcher.pause(); - this.determineStatus(); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`⏸️ ${this.queue.first.name} paused`)], @@ -299,11 +289,9 @@ export class MediaPlayer { } shuffle() { - //if (this.playing || this.paused) this.stop(); if(this.dispatcher && (this.dispatcher.state.status == AudioPlayerStatus.Playing || this.dispatcher.state.status == AudioPlayerStatus.Paused || this.dispatcher.state.status == AudioPlayerStatus.AutoPaused)) this.stop(); this.queue.shuffle(); - this.determineStatus(); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`🔀 Queue Shuffled`)] }); } @@ -316,7 +304,6 @@ export class MediaPlayer { if (currentIdx != targetIdx) { this.queue.move(currentIdx, targetIdx); - this.determineStatus(); } } @@ -334,7 +321,7 @@ export class MediaPlayer { determineStatus() { let item = this.queue.first; - console.log(`dis : ${this.dispatcher.state.status}`); + console.log(`${this.dispatcher.state.status}`); if (this.dispatcher) { if (this.dispatcher.state.status == AudioPlayerStatus.Buffering) { this.status.setBanner(`Buffering...`); @@ -343,14 +330,6 @@ export class MediaPlayer { if (this.queue.length <= 0) this.status.setBanner(`No Songs In Queue`); } - /* if (this.dispatcher.state.status == AudioPlayerStatus.Playing) { - this.status.setBanner( - `Now Playing: "${item.name}" Requested by: ${item.requestor}${ - this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" - }` - ); - - }*/ if (this.dispatcher.state.status == AudioPlayerStatus.Paused) { this.status.setBanner( `Paused: "${item.name}" Requested by: ${item.requestor}` @@ -373,7 +352,7 @@ export class MediaPlayer { ) { this.status.setBanner( `Now Playing: "${item.name}" Requested by: ${item.requestor}${ - this.queue.length > 0 ? `, Up Next "${this.queue[1].name}"` : "" + this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" }` ); } @@ -383,7 +362,15 @@ export class MediaPlayer { `Playing ${item.name} stream Requested by : ${item.requestor}` ); } + }else{ + if (this.queue.length > 0) { + this.status.setBanner( + `Playing? ${item.name} stream Requested by : ${item.requestor}` + ); + } } + + } } From 89bbe0e0c58eae7edbac3cd8a4f458de690ee309 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Fri, 12 Nov 2021 15:45:57 +0200 Subject: [PATCH 14/23] discordjs@voice version update --- package-lock.json | 56 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ce4d2c..e577193 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "license": "ISC", "dependencies": { "@discordjs/opus": "github:discordjs/opus", - "@discordjs/voice": "^0.7.2", - "@types/node": "^16.11.6", + "@discordjs/voice": "^0.7.5", + "@types/node": "^16.11.7", "bufferutil": "^4.0.5", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", @@ -110,9 +110,9 @@ } }, "node_modules/@discordjs/voice": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.2.tgz", - "integrity": "sha512-7dRvyKNI6TSvtOoTTXjTTZ2G7nuk4f5rt+5WLkqZ7QR3xsj0u1Pd+t7HdzMaAUn9/FmTe2iKdnAfOpwgassOLg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.5.tgz", + "integrity": "sha512-lUk+CmIXNKslT6DkC9IF9rpsqhzlTiedauUCPBzepjd4XWxwBZiyVIzR6QpbAirxkAwCoAbbje+3Ho71PGLEAw==", "dependencies": { "@types/ws": "^8.2.0", "discord-api-types": "^0.24.0", @@ -207,9 +207,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" }, "node_modules/@types/node-fetch": { "version": "2.5.12", @@ -1115,19 +1115,19 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -1856,9 +1856,9 @@ } }, "@discordjs/voice": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.2.tgz", - "integrity": "sha512-7dRvyKNI6TSvtOoTTXjTTZ2G7nuk4f5rt+5WLkqZ7QR3xsj0u1Pd+t7HdzMaAUn9/FmTe2iKdnAfOpwgassOLg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.5.tgz", + "integrity": "sha512-lUk+CmIXNKslT6DkC9IF9rpsqhzlTiedauUCPBzepjd4XWxwBZiyVIzR6QpbAirxkAwCoAbbje+3Ho71PGLEAw==", "requires": { "@types/ws": "^8.2.0", "discord-api-types": "^0.24.0", @@ -1918,9 +1918,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" }, "@types/node-fetch": { "version": "2.5.12", @@ -2676,16 +2676,16 @@ } }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" } }, "miniget": { diff --git a/package.json b/package.json index 47c1e33..b786eb5 100755 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "license": "ISC", "dependencies": { "@discordjs/opus": "github:discordjs/opus", - "@discordjs/voice": "^0.7.3", + "@discordjs/voice": "^0.7.5", "@types/node": "^16.11.7", "bufferutil": "^4.0.5", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", From cb40c6a616ca1fc72f24bc221e9ec95e1918fa4a Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 13 Nov 2021 12:26:31 +0200 Subject: [PATCH 15/23] better leave/disconnect handling --- src/bot/bot.ts | 18 ++++++++++++------ src/media/media-player.ts | 7 +++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 09b566e..68a5094 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -96,7 +96,7 @@ export class RhythmBot extends IBot { embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], }); - if (this.config.auto.play) this.player.play(); + // if (this.config.auto.play) this.player.play(); }) .catch((err) => { msg.channel.send({ embeds: [createErrorEmbed(err)] }); @@ -112,6 +112,10 @@ export class RhythmBot extends IBot { ) ) // this.player.dispatcher.stop(); + this.player.clear(); + this.player.dispatcher.stop(true); + if( !(this.player.connection.state.status == + VoiceConnectionStatus.Disconnected)) this.player.connection.disconnect(); }) .on("desc", (cmd: SuccessfulParsedMessage, msg: Message) => { @@ -132,15 +136,16 @@ export class RhythmBot extends IBot { }) .on("play", (cmd: SuccessfulParsedMessage, msg: Message) => { new Promise((done) => { - if (!this.player.connection) { + + // if(this.player.dispatcher){ joinUserChannel(msg).then((conn) => { this.player.connection = conn; - msg.channel.send({ + /* msg.channel.send({ embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], - }); + });*/ done(); }); - } else done(); + /*}else*//* done();*/ }).then(() => { if ( cmd.body.match("^(http(s)://)?((w){3}.)?youtu(be|.be)?(.com)?/.+") @@ -159,7 +164,6 @@ export class RhythmBot extends IBot { AudioPlayerStatus.Playing ) ) - console.log("player play with youtubelink"); this.player.play(); }); } else if ( @@ -485,7 +489,9 @@ export class RhythmBot extends IBot { // if there's still 1 member, // this.player.skip(); this.player.dispatcher.stop(true); + this.player.clear(); this.player.connection.disconnect(); + this.status.setBanner(`No Songs In Queue`); }, 30000); // (3 min in ms) }); } diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 7796048..bbc4f93 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -22,6 +22,7 @@ import { NoSubscriberBehavior, StreamType, VoiceConnection, + VoiceConnectionStatus, } from "@discordjs/voice"; import { Readable } from "stream"; @@ -196,10 +197,8 @@ export class MediaPlayer { //this.determineStatus();//2 }); - this.dispatcher.on(AudioPlayerStatus.AutoPaused, () => { - // detsts - }); - + + } play() { From 69df02935896bedaca6457ed2aebb20518444901 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sun, 19 Dec 2021 16:16:12 +0200 Subject: [PATCH 16/23] upgraded to latest ytdl-core version --- .vscode/settings.json | 2 + cookie.txt | 1 + package-lock.json | 480 +++++++++++++++++++------------------- package.json | 6 +- src/media/media-player.ts | 4 +- src/plugins/youtube.ts | 6 +- 6 files changed, 258 insertions(+), 241 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 cookie.txt diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/cookie.txt b/cookie.txt new file mode 100644 index 0000000..1ca45c4 --- /dev/null +++ b/cookie.txt @@ -0,0 +1 @@ +AFmmF2swRAIgLw7aQC5MpW5f-J3k9J38ul2jhpPHjZlneUbTZ5thhooCIFbQCu84vKalHaf4FMtBGUj9CxRrmBb18CJ4xLIC8ywi:QUQ3MjNmeDhxUXp3MkRPZVdsbEhsWkZsTHVoWGtXa1JZNVRYb3JqV2dwck9wcERhTmFFVFhBLXp5SDh0NWR0N1BLTGFseFhrZ3hwNGd6ZURqcG9WYTN2OUpFZXlpYTdLUHB6Q0NmaER3VVFmaDh0c1JfODEtWURXYUphRjFYYUJJdExvRmcyZFNPc1JBZ0JTcXpzU3ozTzVvcGJ2SC1vSGtn \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e577193..cb38858 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@discordjs/opus": "github:discordjs/opus", "@discordjs/voice": "^0.7.5", - "@types/node": "^16.11.7", + "@types/node": "^17.0.0", "bufferutil": "^4.0.5", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", @@ -20,11 +20,11 @@ "minimist": "^1.2.5", "moment": "^2.29.1", "sodium": "^3.0.2", - "typescript": "^4.4.4", + "typescript": "^4.5.4", "utf-8-validate": "^5.0.7", "winston": "^3.3.3", "yt-search": "^2.10.2", - "ytdl-core": "^4.9.1", + "ytdl-core": "^4.9.2", "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" } @@ -78,32 +78,32 @@ } }, "node_modules/@discordjs/node-pre-gyp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.1.tgz", - "integrity": "sha512-PLYLPG3R+m9QlMROOjdy2htQq54g6f9vRb1xPfZ97CL53yj0uNTfpB/jtY/AXY6OKNtZtrre5SKjei8Hcc44HQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.2.tgz", + "integrity": "sha512-V239Czn+DXFGLhhuccwEDBoTdgMGrRu30dOlzm1GzrSIjwFj01ZJerNX7x+CEX1NG1Q/1gGfOOkeZFNHjycrRA==", "dependencies": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.5", "nopt": "^5.0.0", - "npmlog": "^5.0.0", + "npmlog": "^5.0.1", "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.8" + "tar": "^6.1.11" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" } }, "node_modules/@discordjs/opus": { - "version": "0.6.0", - "resolved": "git+ssh://git@github.com/discordjs/opus.git#38199a39066b9cbeea6739e8e9ed44d432c393a9", + "version": "0.7.0", + "resolved": "git+ssh://git@github.com/discordjs/opus.git#fbd68eeca7637559bf3141b0ae76d48873b8d18a", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@discordjs/node-pre-gyp": "^0.4.1", - "node-addon-api": "^4.0.0" + "@discordjs/node-pre-gyp": "^0.4.2", + "node-addon-api": "^4.2.0" }, "engines": { "node": ">=12.0.0" @@ -207,9 +207,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" }, "node_modules/@types/node-fetch": { "version": "2.5.12", @@ -221,9 +221,9 @@ } }, "node_modules/@types/ws": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", - "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", "dependencies": { "@types/node": "*" } @@ -245,11 +245,11 @@ } }, "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/aproba": { @@ -487,9 +487,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -541,21 +541,16 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.0.tgz", + "integrity": "sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" @@ -587,9 +582,9 @@ "integrity": "sha512-3iZKDAKqv0APFwpqP40gpro5msM+pwhQN7IhB42mjbL1W4M2V6A+MJy7RhA8y6lUM+1mQoLls3OePidmzVbncQ==" }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -651,6 +646,11 @@ "winston": "^3.3.3" } }, + "node_modules/discord-bot-quickstart/node_modules/@types/node": { + "version": "16.11.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz", + "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==" + }, "node_modules/discord-command-parser": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/discord-command-parser/-/discord-command-parser-1.5.3.tgz", @@ -701,9 +701,9 @@ ] }, "node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dependencies": { "domelementtype": "^2.2.0" }, @@ -741,6 +741,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -856,9 +861,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/gauge": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", - "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -866,8 +871,8 @@ "has-unicode": "^2.0.1", "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1 || ^2.0.0", - "strip-ansi": "^3.0.1 || ^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "wide-align": "^1.1.2" }, "engines": { @@ -959,11 +964,11 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-obj": { @@ -990,11 +995,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -1158,9 +1158,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dependencies": { "yallist": "^4.0.0" }, @@ -1246,6 +1246,45 @@ "nfzf": "bin/cli.js" } }, + "node_modules/node-fzf/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/node-fzf/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/node-fzf/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/node-fzf/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/node-gyp-build": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", @@ -1356,11 +1395,6 @@ "node": ">=0.10.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -1445,9 +1479,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "node_modules/simple-swizzle": { "version": "0.2.2", @@ -1483,26 +1517,27 @@ } }, "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/tar": { @@ -1585,9 +1620,9 @@ } }, "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1671,53 +1706,27 @@ } }, "node_modules/winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.1.tgz", + "integrity": "sha512-ciZRlU4CSjHqHe8RQG1iPxKMRVwv6ZJ0RC7DxStKWd0KjpAhPDy5gVYSCpIUq+5CUsP+IyNOTZy1X0tO2QZqjg==", "dependencies": { - "readable-stream": "^2.3.7", + "logform": "^2.2.0", + "readable-stream": "^3.4.0", "triple-beam": "^1.2.0" }, "engines": { "node": ">= 6.4.0" } }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/winston-transport/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/winston-transport/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", "engines": { "node": ">=10.0.0" }, @@ -1760,11 +1769,11 @@ } }, "node_modules/ytdl-core": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.1.tgz", - "integrity": "sha512-6Jbp5RDhUEozlaJQAR+l8oV8AHsx3WUXxSyPxzE6wOIAaLql7Hjiy0ZM58wZoyj1YEenlEPjEqcJIjKYKxvHtQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.2.tgz", + "integrity": "sha512-aTlsvsN++03MuOtyVD4DRF9Z/9UAeeuiNbjs+LjQBAiw4Hrdp48T3U9vAmRPyvREzupraY8pqRoBfKGqpq+eHA==", "dependencies": { - "m3u8stream": "^0.8.3", + "m3u8stream": "^0.8.4", "miniget": "^4.0.0", "sax": "^1.1.3" }, @@ -1832,27 +1841,27 @@ } }, "@discordjs/node-pre-gyp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.1.tgz", - "integrity": "sha512-PLYLPG3R+m9QlMROOjdy2htQq54g6f9vRb1xPfZ97CL53yj0uNTfpB/jtY/AXY6OKNtZtrre5SKjei8Hcc44HQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.2.tgz", + "integrity": "sha512-V239Czn+DXFGLhhuccwEDBoTdgMGrRu30dOlzm1GzrSIjwFj01ZJerNX7x+CEX1NG1Q/1gGfOOkeZFNHjycrRA==", "requires": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.5", "nopt": "^5.0.0", - "npmlog": "^5.0.0", + "npmlog": "^5.0.1", "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.8" + "tar": "^6.1.11" } }, "@discordjs/opus": { - "version": "git+ssh://git@github.com/discordjs/opus.git#38199a39066b9cbeea6739e8e9ed44d432c393a9", + "version": "git+ssh://git@github.com/discordjs/opus.git#fbd68eeca7637559bf3141b0ae76d48873b8d18a", "from": "@discordjs/opus@github:discordjs/opus", "requires": { - "@discordjs/node-pre-gyp": "^0.4.1", - "node-addon-api": "^4.0.0" + "@discordjs/node-pre-gyp": "^0.4.2", + "node-addon-api": "^4.2.0" } }, "@discordjs/voice": { @@ -1918,9 +1927,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" }, "@types/node-fetch": { "version": "2.5.12", @@ -1932,9 +1941,9 @@ } }, "@types/ws": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", - "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", "requires": { "@types/node": "*" } @@ -1953,9 +1962,9 @@ } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "aproba": { "version": "2.0.0", @@ -2169,9 +2178,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -2214,21 +2223,16 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.0.tgz", + "integrity": "sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==", "requires": { "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, "css-what": { @@ -2251,9 +2255,9 @@ "integrity": "sha512-3iZKDAKqv0APFwpqP40gpro5msM+pwhQN7IhB42mjbL1W4M2V6A+MJy7RhA8y6lUM+1mQoLls3OePidmzVbncQ==" }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -2292,6 +2296,13 @@ "moment": "^2.29.1", "typescript": "^4.4.4", "winston": "^3.3.3" + }, + "dependencies": { + "@types/node": { + "version": "16.11.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz", + "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==" + } } }, "discord-command-parser": { @@ -2331,9 +2342,9 @@ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "requires": { "domelementtype": "^2.2.0" } @@ -2356,6 +2367,11 @@ "is-obj": "^2.0.0" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -2464,9 +2480,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "gauge": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", - "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "requires": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -2474,8 +2490,8 @@ "has-unicode": "^2.0.1", "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1 || ^2.0.0", - "strip-ansi": "^3.0.1 || ^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "wide-align": "^1.1.2" } }, @@ -2548,9 +2564,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-obj": { "version": "2.0.0", @@ -2567,11 +2583,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -2707,9 +2718,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "requires": { "yallist": "^4.0.0" } @@ -2772,6 +2783,35 @@ "redstar": "0.0.2", "string-width": "~2.1.1", "ttys": "0.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "node-gyp-build": { @@ -2858,11 +2898,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -2918,9 +2953,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "simple-swizzle": { "version": "0.2.2", @@ -2952,20 +2987,21 @@ } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" } }, "tar": { @@ -3036,9 +3072,9 @@ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==" + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" }, "universalify": { "version": "2.0.0", @@ -3102,41 +3138,13 @@ } }, "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.1.tgz", + "integrity": "sha512-ciZRlU4CSjHqHe8RQG1iPxKMRVwv6ZJ0RC7DxStKWd0KjpAhPDy5gVYSCpIUq+5CUsP+IyNOTZy1X0tO2QZqjg==", "requires": { - "readable-stream": "^2.3.7", + "logform": "^2.2.0", + "readable-stream": "^3.4.0", "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "wrappy": { @@ -3145,9 +3153,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", "requires": {} }, "yallist": { @@ -3171,11 +3179,11 @@ } }, "ytdl-core": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.1.tgz", - "integrity": "sha512-6Jbp5RDhUEozlaJQAR+l8oV8AHsx3WUXxSyPxzE6wOIAaLql7Hjiy0ZM58wZoyj1YEenlEPjEqcJIjKYKxvHtQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.2.tgz", + "integrity": "sha512-aTlsvsN++03MuOtyVD4DRF9Z/9UAeeuiNbjs+LjQBAiw4Hrdp48T3U9vAmRPyvREzupraY8pqRoBfKGqpq+eHA==", "requires": { - "m3u8stream": "^0.8.3", + "m3u8stream": "^0.8.4", "miniget": "^4.0.0", "sax": "^1.1.3" } diff --git a/package.json b/package.json index b786eb5..cf3eab8 100755 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "dependencies": { "@discordjs/opus": "github:discordjs/opus", "@discordjs/voice": "^0.7.5", - "@types/node": "^16.11.7", + "@types/node": "^17.0.0", "bufferutil": "^4.0.5", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", @@ -21,11 +21,11 @@ "minimist": "^1.2.5", "moment": "^2.29.1", "sodium": "^3.0.2", - "typescript": "^4.4.4", + "typescript": "^4.5.4", "utf-8-validate": "^5.0.7", "winston": "^3.3.3", "yt-search": "^2.10.2", - "ytdl-core": "^4.9.1", + "ytdl-core": "^4.9.2", "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" } diff --git a/src/media/media-player.ts b/src/media/media-player.ts index bbc4f93..4145505 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -157,6 +157,7 @@ export class MediaPlayer { msg.react(this.config.emojis.playSong); msg.react(this.config.emojis.pauseSong); msg.react(this.config.emojis.skipSong); + this.determineStatus(); } }); this.dispatcher.on("debug", (info: string) => { @@ -231,7 +232,8 @@ export class MediaPlayer { .getStream(item) .then((stream) => { this.dispatchStream(stream, item); - this.dispatcher.play(this.audioResource); + this.dispatcher.play(this.audioResource); + }) } else if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Paused) { this.dispatcher.unpause(); diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts index dcefdf7..a94fe5c 100755 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -8,6 +8,8 @@ import * as ytpl from 'ytpl'; const youtubeType: string = 'youtube'; +const cookie : string = 'LOGI_INFO=AFmmF2swRAIgLw7aQC5MpW5f-J3k9J38ul2jhpPHjZlneUbTZ5thhooCIFbQCu84vKalHaf4FMtBGUj9CxRrmBb18CJ4xLIC8ywi:QUQ3MjNmeDhxUXp3MkRPZVdsbEhsWkZsTHVoWGtXa1JZNVRYb3JqV2dwck9wcERhTmFFVFhBLXp5SDh0NWR0N1BLTGFseFhrZ3hwNGd6ZURqcG9WYTN2OUpFZXlpYTdLUHB6Q0NmaER3VVFmaDh0c1JfODEtWURXYUphRjFYYUJJdExvRmcyZFNPc1JBZ0JTcXpzU3ozTzVvcGJ2SC1vSGtn; HSID=Aa3qWcushVQ9benXP; SID=FAgGb1ZvwAfBSg6OehJeTzpwIzLO4Mw-3SiTL4LSm7WZ3VpGUPwMuKS55xgKIsYTxdyseQ.; SSID=A7Gq7xRk2VK-BRLdh'; + export default class YoutubePlugin extends IBotPlugin { bot: RhythmBot; @@ -49,7 +51,9 @@ export default class YoutubePlugin extends IBotPlugin { .catch(err => error(err)); }), getStream: (item: MediaItem) => new Promise((done, error) => { - let stream = ytdl(item.url, { quality: 'highestaudio', + let stream = ytdl(item.url, { quality: 'highestaudio', requestOptions:{ headers: { + Cookie:cookie + }}, filter: (item.isLive ? ( format => format.isHLS === true ) : (format => format.container === 'webm' && format.codecs === 'opus')), highWaterMark: 1<<28, liveBuffer: 4999, dlChunkSize: 1<<12 }); From 75c3fe635437590e94187c6bf91ae8c07f03c60b Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sun, 19 Dec 2021 16:16:42 +0200 Subject: [PATCH 17/23] upgraded to latest ytdl-core version --- src/plugins/youtube.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts index a94fe5c..ef4e1f4 100755 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -8,7 +8,7 @@ import * as ytpl from 'ytpl'; const youtubeType: string = 'youtube'; -const cookie : string = 'LOGI_INFO=AFmmF2swRAIgLw7aQC5MpW5f-J3k9J38ul2jhpPHjZlneUbTZ5thhooCIFbQCu84vKalHaf4FMtBGUj9CxRrmBb18CJ4xLIC8ywi:QUQ3MjNmeDhxUXp3MkRPZVdsbEhsWkZsTHVoWGtXa1JZNVRYb3JqV2dwck9wcERhTmFFVFhBLXp5SDh0NWR0N1BLTGFseFhrZ3hwNGd6ZURqcG9WYTN2OUpFZXlpYTdLUHB6Q0NmaER3VVFmaDh0c1JfODEtWURXYUphRjFYYUJJdExvRmcyZFNPc1JBZ0JTcXpzU3ozTzVvcGJ2SC1vSGtn; HSID=Aa3qWcushVQ9benXP; SID=FAgGb1ZvwAfBSg6OehJeTzpwIzLO4Mw-3SiTL4LSm7WZ3VpGUPwMuKS55xgKIsYTxdyseQ.; SSID=A7Gq7xRk2VK-BRLdh'; +const cookie : string = 'LOGI_INFO=AFmmF2swRAIgLw7aQC5MpW5f-J3k9J38ul2jhpPHjZlneUbTZ5thhooCIFbQCu84vKalHaf4FMtBGUj9CxRrmBb18CJ4xLIC8ywi:QUQ3MjNmeDhxUXp3MkRPZVdsbEhsWkZsTHVoWGtXa1JZNVRYb3JqV2dwck9wcERhTmFFVFhBLXp5SDh0NWR0N1BLTGFseFhrZ3hwNGd6ZURqcG9WYTN2OUpFZXlpYTdLUHB6Q0NmaER3VVFmaDh0c1JfODEtWURXYUphRjFYYUJJdExvRmcyZFNPc1JBZ0JTcXpzU3ozTzVvcGJ2SC1vSGtn; HSID=Aa3qWcushVQ9benXP; SID=FAgGb1ZvwAfBSg6OehJeTzpwIzLO4Mw-3SiTL4LSm7WZ3VpGUPwMuKS55xgKIsYTxdyseQ; SSID=A7Gq7xRk2VK-BRLdh'; export default class YoutubePlugin extends IBotPlugin { bot: RhythmBot; From e7ade59deb97b143af3359e996ff70bf4c847c96 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Tue, 21 Dec 2021 19:06:11 +0200 Subject: [PATCH 18/23] added 2 radiostations, code cleanup/a bit of restructure required --- package-lock.json | 155 ++++++++++++++++-------------- package.json | 1 + src/bot/bot.ts | 144 ++++++++++++++++++---------- src/media/media-player.ts | 196 +++++++++++++++++++++++++------------- 4 files changed, 307 insertions(+), 189 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb38858..743c025 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", "discord.js": "^13.3.1", + "fluent-ffmpeg": "^2.1.2", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", @@ -126,53 +127,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@discordjs/voice/node_modules/@discordjs/opus": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.5.3.tgz", - "integrity": "sha512-IQhCwCy2WKXLe+qkOkwO1Wjgk20uqeAbqM62tCbzIqbTsXX4YAge8Me9RFnI77Lx+UTkgm4rSVM3VPVdS/GsUw==", - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "@discordjs/node-pre-gyp": "^0.4.0", - "node-addon-api": "^3.2.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@discordjs/voice/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "optional": true, - "peer": true - }, - "node_modules/@discordjs/voice/node_modules/prism-media": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", - "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", - "peerDependencies": { - "@discordjs/opus": "^0.5.0", - "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", - "node-opus": "^0.3.3", - "opusscript": "^0.0.8" - }, - "peerDependenciesMeta": { - "@discordjs/opus": { - "optional": true - }, - "ffmpeg-static": { - "optional": true - }, - "node-opus": { - "optional": true - }, - "opusscript": { - "optional": true - } - } - }, "node_modules/@sapphire/async-queue": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.9.tgz", @@ -826,6 +780,18 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, + "node_modules/fluent-ffmpeg": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", + "integrity": "sha1-yVLeIkD4EuvaCqgAbXd27irPfXQ=", + "dependencies": { + "async": ">=0.2.9", + "which": "^1.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -995,6 +961,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -1395,6 +1366,31 @@ "node": ">=0.10.0" } }, + "node_modules/prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "peerDependencies": { + "@discordjs/opus": "^0.5.0", + "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", + "node-opus": "^0.3.3", + "opusscript": "^0.0.8" + }, + "peerDependenciesMeta": { + "@discordjs/opus": { + "optional": true + }, + "ffmpeg-static": { + "optional": true + }, + "node-opus": { + "optional": true + }, + "opusscript": { + "optional": true + } + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -1678,6 +1674,17 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -1875,32 +1882,6 @@ "tiny-typed-emitter": "^2.1.0", "tslib": "^2.3.1", "ws": "^8.2.3" - }, - "dependencies": { - "@discordjs/opus": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.5.3.tgz", - "integrity": "sha512-IQhCwCy2WKXLe+qkOkwO1Wjgk20uqeAbqM62tCbzIqbTsXX4YAge8Me9RFnI77Lx+UTkgm4rSVM3VPVdS/GsUw==", - "optional": true, - "peer": true, - "requires": { - "@discordjs/node-pre-gyp": "^0.4.0", - "node-addon-api": "^3.2.1" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "optional": true, - "peer": true - }, - "prism-media": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", - "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", - "requires": {} - } } }, "@sapphire/async-queue": { @@ -2451,6 +2432,15 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, + "fluent-ffmpeg": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", + "integrity": "sha1-yVLeIkD4EuvaCqgAbXd27irPfXQ=", + "requires": { + "async": ">=0.2.9", + "which": "^1.1.1" + } + }, "fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -2583,6 +2573,11 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -2898,6 +2893,12 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "requires": {} + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3113,6 +3114,14 @@ "webidl-conversions": "^3.0.0" } }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", diff --git a/package.json b/package.json index cf3eab8..e40fd9f 100755 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", "discord.js": "^13.3.1", + "fluent-ffmpeg": "^2.1.2", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", diff --git a/src/bot/bot.ts b/src/bot/bot.ts index 68a5094..fccf264 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -96,12 +96,44 @@ export class RhythmBot extends IBot { embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], }); - // if (this.config.auto.play) this.player.play(); + // if (this.config.auto.play) this.player.play(); }) .catch((err) => { msg.channel.send({ embeds: [createErrorEmbed(err)] }); }); }) + .on("radiozu", (cmd: SuccessfulParsedMessage, msg: Message) => { + joinUserChannel(msg) + .then((connection) => { + this.player.connection = connection; + msg.channel.send({ + embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], + }); + this.player.playRadioZU(); + }) + .catch((err) => { + console.log(err); + msg.channel.send({ embeds: [createErrorEmbed("Mik, error")] }); + }); + }) + .on( + "radiovirgin", + (cmd: SuccessfulParsedMessage, msg: Message) => { + joinUserChannel(msg) + .then((connection) => { + this.player.connection = connection; + msg.channel.send({ + embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], + }); + this.player.playRadioVirgin(); + }) + .catch((err) => { + console.log(err); + msg.channel.send({ embeds: [createErrorEmbed("Mik, error")] }); + }); + } + ) + .on("leave", (cmd: SuccessfulParsedMessage, msg: Message) => { //todo if voice is in a voice channel if ( @@ -113,9 +145,13 @@ export class RhythmBot extends IBot { ) // this.player.dispatcher.stop(); this.player.clear(); - this.player.dispatcher.stop(true); - if( !(this.player.connection.state.status == - VoiceConnectionStatus.Disconnected)) + this.player.dispatcher.stop(true); + if ( + !( + this.player.connection.state.status == + VoiceConnectionStatus.Disconnected + ) + ) this.player.connection.disconnect(); }) .on("desc", (cmd: SuccessfulParsedMessage, msg: Message) => { @@ -136,16 +172,15 @@ export class RhythmBot extends IBot { }) .on("play", (cmd: SuccessfulParsedMessage, msg: Message) => { new Promise((done) => { - // if(this.player.dispatcher){ - joinUserChannel(msg).then((conn) => { - this.player.connection = conn; - /* msg.channel.send({ + joinUserChannel(msg).then((conn) => { + this.player.connection = conn; + /* msg.channel.send({ embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], });*/ - done(); - }); - /*}else*//* done();*/ + done(); + }); /* done();*/ + /*}else*/ }).then(() => { if ( cmd.body.match("^(http(s)://)?((w){3}.)?youtu(be|.be)?(.com)?/.+") @@ -212,9 +247,11 @@ export class RhythmBot extends IBot { }) .on("time", (cmd: SuccessfulParsedMessage, msg: Message) => { let media = this.player.queue.first; - // if (this.player.playing && this.player.dispatcher) { - if(this.player.dispatcher && ( this.player.dispatcher.state.status == - AudioPlayerStatus.Playing) ){ + // if (this.player.playing && this.player.dispatcher) { + if ( + this.player.dispatcher && + this.player.dispatcher.state.status == AudioPlayerStatus.Playing + ) { let elapsed = secondsToTimestamp( this.player.audioResource.playbackDuration / 1000 ); @@ -241,48 +278,51 @@ export class RhythmBot extends IBot { joinUserChannel(msg).then((conn) => { this.player.connection = conn; msg.channel.send({ - embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], + embeds: [ + createInfoEmbed(`Joined Channel: ${msg.guild.name}`), + ], }); done(); }); } else done(); - }).then(async ()=>{ - let noResults = false; + }).then(async () => { + let noResults = false; - if (cmd.body != null && cmd.body !== "") { - const videos = await yts({ query: cmd.body, pages: 1 }).then( - (res) => res.videos - ); - if (videos != null && videos.length > 0) { - await Promise.all( - videos.slice(0, 3).map((video) => { - const embed = createEmbed() - .setTitle(`${video.title}`) - .addField("Author:", `${video.author.name}`, true) - .addField("Duration", `${video.timestamp}`, true) - .setThumbnail(video.image) - .setURL(video.url); - msg.channel - .send({ embeds: [embed] }) - .then((m) => m.react(this.config.emojis.addSong)); - }) + if (cmd.body != null && cmd.body !== "") { + const videos = await yts({ query: cmd.body, pages: 1 }).then( + (res) => res.videos ); + if (videos != null && videos.length > 0) { + await Promise.all( + videos.slice(0, 3).map((video) => { + const embed = createEmbed() + .setTitle(`${video.title}`) + .addField("Author:", `${video.author.name}`, true) + .addField("Duration", `${video.timestamp}`, true) + .setThumbnail(video.image) + .setURL(video.url); + msg.channel + .send({ embeds: [embed] }) + .then((m) => m.react(this.config.emojis.addSong)); + }) + ); + } else { + noResults = true; + } } else { noResults = true; } - } else { - noResults = true; - } - if (noResults) { - msg.channel.send({ - embeds: [ - createErrorEmbed(`No songs found OR No search string provided`), - ], - }); - - } - }); + if (noResults) { + msg.channel.send({ + embeds: [ + createErrorEmbed( + `No songs found OR No search string provided` + ), + ], + }); + } + }); } ) .on( @@ -308,7 +348,8 @@ export class RhythmBot extends IBot { this.player.dispatcher.state.status == AudioPlayerStatus.Playing ) - )this.player.play(); + ) + this.player.play(); }); } else { this.player.addMedia({ @@ -472,7 +513,7 @@ export class RhythmBot extends IBot { } } ); - //stackoverflow solution ! + //stackoverflow solution ! client.on("voiceStateUpdate", (oldState, newState) => { // if nobody left the channel in question, return. if ( @@ -489,15 +530,14 @@ export class RhythmBot extends IBot { // if there's still 1 member, // this.player.skip(); this.player.dispatcher.stop(true); - this.player.clear(); - this.player.connection.disconnect(); - this.status.setBanner(`No Songs In Queue`); + this.player.clear(); + this.player.connection.disconnect(); + this.status.setBanner(`No Songs In Queue`); }, 30000); // (3 min in ms) }); } onReady(client: Client): void { - console.log(`Guilds: ${this.client.guilds.cache.size}`); this.client.guilds.cache.forEach((guild) => { console.log(`\nGuild Name: ${guild.name}`); diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 4145505..5005505 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -3,12 +3,13 @@ import { BotStatus } from "../bot/bot-status"; import { MediaQueue } from "./media-queue"; import { MediaItem } from "./media-item.model"; import { IMediaType } from "./media-type.model"; +import * as child_process from "child_process"; import { createEmbed, createErrorEmbed, createInfoEmbed } from "../helpers"; import { Logger, TextChannel, DMChannel, - NewsChannel /*, VoiceConnection, StreamDispatcher */, + NewsChannel, PartialDMChannel, ThreadChannel, } from "discord-bot-quickstart"; @@ -22,7 +23,6 @@ import { NoSubscriberBehavior, StreamType, VoiceConnection, - VoiceConnectionStatus, } from "@discordjs/voice"; import { Readable } from "stream"; @@ -32,6 +32,7 @@ export class MediaPlayer { config: IRhythmBotConfig; status: BotStatus; logger: Logger; + isRadio: Boolean = false; channel: | PartialDMChannel | DMChannel @@ -79,9 +80,8 @@ export class MediaPlayer { .addField("Position:", `${this.queue.indexOf(item) + 1}`, true) .addField("Requested By", item.requestor, true); this.channel.send({ embeds: [embed] }); - } - // this.determineStatus();//1 + // this.determineStatus();//1 }) .catch((err) => { if (this.channel) @@ -89,7 +89,6 @@ export class MediaPlayer { embeds: [createErrorEmbed(`Error adding track: ${err}`)], }); }); - } at(idx: number) { @@ -111,29 +110,31 @@ export class MediaPlayer { } clear() { - if ( (this.dispatcher.state.status == AudioPlayerStatus.Playing || - this.dispatcher.state.status == AudioPlayerStatus.Paused) - ) this.stop(); + if ( + this.dispatcher.state.status == AudioPlayerStatus.Playing || + this.dispatcher.state.status == AudioPlayerStatus.Paused + ) + this.stop(); this.queue.clear(); + this.status.setBanner(`No Songs In Queue`); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`Playlist Cleared!`)] }); } dispatchStream(stream: Readable, item: MediaItem) { - this.audioResource = createAudioResource(stream, { inlineVolume: true, - inputType: StreamType.WebmOpus, + // inputType: StreamType.WebmOpus, + inputType: StreamType.Arbitrary, }); - if (this.dispatcher) { + if (this.dispatcher) { this.dispatcher.stop(); - this.dispatcher = createAudioPlayer({ - behaviors: { - noSubscriber: NoSubscriberBehavior.Stop, - }, - }); - + this.dispatcher = createAudioPlayer({ + behaviors: { + noSubscriber: NoSubscriberBehavior.Stop, + }, + }); } this.dispatcher.on(AudioPlayerStatus.Buffering, async () => { @@ -146,7 +147,7 @@ export class MediaPlayer { } }); - this.dispatcher.on(AudioPlayerStatus.Playing, async () => { + this.dispatcher.on(AudioPlayerStatus.Playing, async () => { if (this.channel) { const embed = createEmbed() .setTitle("▶️ Now playing") @@ -182,13 +183,13 @@ export class MediaPlayer { this.audioResource = null; let track = this.queue.dequeue(); //this.play(); - + if (this.config.queue.repeat) this.queue.enqueue(track); setTimeout(() => { this.play(); }, 1000); } - this.determineStatus();//main + this.determineStatus(); //main }); this.connection.subscribe(this.dispatcher); @@ -197,12 +198,9 @@ export class MediaPlayer { this.logger.debug("Stream Finished"); //this.determineStatus();//2 }); - - - } - play() { + play() { if (this.queue.length == 0 && this.channel) this.channel.send({ embeds: [createInfoEmbed(`Queue is empty! Add some songs!`)], @@ -228,14 +226,14 @@ export class MediaPlayer { if (type) { //this.dispatcher = createAudioPlayer(); if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { - type - .getStream(item) - .then((stream) => { - this.dispatchStream(stream, item); - this.dispatcher.play(this.audioResource); - - }) - } else if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Paused) { + type.getStream(item).then((stream) => { + this.dispatchStream(stream, item); + this.dispatcher.play(this.audioResource); + }); + } else if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.Paused + ) { this.dispatcher.unpause(); if (this.channel) this.channel.send({ @@ -246,8 +244,65 @@ export class MediaPlayer { } } + playRadioVirgin() { + if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.Playing + ) + this.channel.send({ + embeds: [createInfoEmbed(`Already playing a song!`)], + }); + if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { + const ffmpeg = child_process.spawn("ffmpeg", [ + "-analyzeduration", + "0", + "-loglevel", + "0", + "-i", + "http://astreaming.virginradio.ro:8000/virgin_aacp_64k", + "-f", + "adts", + "pipe:1", + ]); + + this.dispatcher.play(createAudioResource(ffmpeg.stdout)); + this.connection.subscribe(this.dispatcher); + this.isRadio = true; + } + } + + playRadioZU() { + if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.Playing + ) + this.channel.send({ + embeds: [createInfoEmbed(`Already playing a song!`)], + }); + if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { + const ffmpeg = child_process.spawn("ffmpeg", [ + "-analyzeduration", + "0", + "-loglevel", + "0", + "-i", + "http://live4ro.antenaplay.ro//radiozu/radiozu-48000.m3u8", + "-f", + "opus", + "pipe:1", + ]); + + this.dispatcher.play(createAudioResource(ffmpeg.stdout)); + this.connection.subscribe(this.dispatcher); + this.isRadio = true; + } + } + stop() { - if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Playing) { + if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.Playing + ) { let item = this.queue.first; this.dispatcher.pause(); this.dispatcher.stop(true); @@ -259,28 +314,39 @@ export class MediaPlayer { } skip() { - if (this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Playing) { - let item = this.queue.first; - - // this.dispatcher.pause(); - + if (this.isRadio == true) { + this.isRadio = false; this.dispatcher.stop(true); - if (this.channel) - this.channel.send({ - embeds: [createInfoEmbed(`⏭️ ${item.name} skipped`)], - }); - } else if (this.queue.length > 0) { - let item = this.queue.first; - this.queue.dequeue(); - if (this.channel) - this.channel.send({ - embeds: [createInfoEmbed(`⏭️ ${item.name} skipped`)], - }); + } else { + if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.Playing + ) { + let item = this.queue.first; + + // this.dispatcher.pause(); + + this.dispatcher.stop(true); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`⏭️ ${item.name} skipped`)], + }); + } else if (this.queue.length > 0) { + let item = this.queue.first; + this.queue.dequeue(); + if (this.channel) + this.channel.send({ + embeds: [createInfoEmbed(`⏭️ ${item.name} skipped`)], + }); + } } } pause() { - if(this.dispatcher && this.dispatcher.state.status == AudioPlayerStatus.Playing){ + if ( + this.dispatcher && + this.dispatcher.state.status == AudioPlayerStatus.Playing + ) { this.dispatcher.pause(); if (this.channel) this.channel.send({ @@ -290,8 +356,13 @@ export class MediaPlayer { } shuffle() { - if(this.dispatcher && (this.dispatcher.state.status == AudioPlayerStatus.Playing || - this.dispatcher.state.status == AudioPlayerStatus.Paused || this.dispatcher.state.status == AudioPlayerStatus.AutoPaused)) this.stop(); + if ( + this.dispatcher && + (this.dispatcher.state.status == AudioPlayerStatus.Playing || + this.dispatcher.state.status == AudioPlayerStatus.Paused || + this.dispatcher.state.status == AudioPlayerStatus.AutoPaused) + ) + this.stop(); this.queue.shuffle(); if (this.channel) this.channel.send({ embeds: [createInfoEmbed(`🔀 Queue Shuffled`)] }); @@ -323,14 +394,14 @@ export class MediaPlayer { determineStatus() { let item = this.queue.first; console.log(`${this.dispatcher.state.status}`); - if (this.dispatcher) { + if (this.dispatcher && this.isRadio == false) { if (this.dispatcher.state.status == AudioPlayerStatus.Buffering) { this.status.setBanner(`Buffering...`); } if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { if (this.queue.length <= 0) this.status.setBanner(`No Songs In Queue`); - } - + } + if (this.dispatcher.state.status == AudioPlayerStatus.Paused) { this.status.setBanner( `Paused: "${item.name}" Requested by: ${item.requestor}` @@ -342,15 +413,13 @@ export class MediaPlayer { if ( this.dispatcher.state.status == AudioPlayerStatus.Idle && this.queue.length > 0 - ){ + ) { this.status.setBanner( - `Playing Next: "${item.name}" Requested by: ${item.requestor}`); - + `Playing Next: "${item.name}" Requested by: ${item.requestor}` + ); } - if ( - this.dispatcher.state.status == AudioPlayerStatus.Playing - ) { + if (this.dispatcher.state.status == AudioPlayerStatus.Playing) { this.status.setBanner( `Now Playing: "${item.name}" Requested by: ${item.requestor}${ this.queue.length > 1 ? `, Up Next "${this.queue[1].name}"` : "" @@ -363,15 +432,14 @@ export class MediaPlayer { `Playing ${item.name} stream Requested by : ${item.requestor}` ); } - }else{ + } else { if (this.queue.length > 0) { this.status.setBanner( `Playing? ${item.name} stream Requested by : ${item.requestor}` ); } + if (this.isRadio) this.status.setBanner(`Playing Radio`); } - - } } From 96268e720770b3897195ac56806cb1bbead4dc44 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 1 Jan 2022 15:05:31 +0200 Subject: [PATCH 19/23] Media Types as enum added, radio stations work with yt songs, few npm package update, readme update --- README.md | 22 ++-- helptext.txt | 2 + package.json | 6 +- src/bot/bot.ts | 51 ++++++++-- src/media/media-player.ts | 71 ++++++++++--- src/media/media-type.model.ts | 1 + src/media/media-type.ts | 4 + src/plugins/youtube.ts | 186 ++++++++++++++++++++++------------ 8 files changed, 243 insertions(+), 100 deletions(-) create mode 100644 src/media/media-type.ts diff --git a/README.md b/README.md index 342d4f4..2610251 100755 --- a/README.md +++ b/README.md @@ -1,12 +1,15 @@ -# Rhythm-Bot 2.1.5 Search / Rich Text / Buttons! -- New search command anything after !search will be searched against youtube and return the top 3 results +# Rhythm-Bot 3.0.0 Search / Rich Text / Buttons! +- Improved !search, !play commands ! - Press the thumbs up reaction emoji to add the item to your queue - Note that you will want to give the bot permission to remove emojis in the text channel, this is the MANAGE_MESSAGES permission -- Node version has updated from 10.x.x to 12.x.x due to discord.js update +- Node version has been updated to 16.x.x - New npm packages to install -- Replaced dependence on manually installing ffmpeg - - Now ffmpeg is installed via npm with ffmpeg-static when you do a simple npm install +- Reversed from ffmpeg-static npm package to manually compiled and configurated ffmpeg (because it just works better for me) + - ./configure --enable-nonfree --enable-opus --enable-libfdk-aac --enable-gpl - In addition to the reaction button interaction on the search command you can now use buttons for the new playing control +- Can play live Youtube video ! +- __!help will display command list__ + ![Image](https://imgur.com/B2xLVgU.png) @@ -20,12 +23,12 @@ Simple little music bot to queue up and play youtube audio over discord voice ch - `Python2.7` This version is required for node-gyp I think? - `node-gyp` command line tool -- `node.js` version 12.X.X or higher is required +- `node.js` version 16.X.X or higher is required - `typescript` types for javascript, enables easier group collaboration and simple right click to look up definitions ## Installation -- Install node latest stable release, this was built with node v12.16.1 +- Install node latest stable release, this was built with node v16.13.1 - For windows run `npm install --global --production --add-python-to-path windows-build-tools` - Run `npm install node-gyp -g` - Run `npm install typescript -g` @@ -42,3 +45,8 @@ Simple little music bot to queue up and play youtube audio over discord voice ch ## Running the Application - Run `npm start` + +## Limitations +- It cannot play ex-live videos +- It cannot play age restricted videos +- On very rare ocasions playing video is skipped \ No newline at end of file diff --git a/helptext.txt b/helptext.txt index 205f082..18ad23d 100755 --- a/helptext.txt +++ b/helptext.txt @@ -19,3 +19,5 @@ Commands: `volume [0-100/nothing]` - Will set or get the current volume `repeat` - Toggle queue repeat mode `desc` - Show song description +`radiozu` - Play Radio ZU +`radiovirgin` -Play Virgin Radio Romania diff --git a/package.json b/package.json index e40fd9f..d447b41 100755 --- a/package.json +++ b/package.json @@ -12,11 +12,11 @@ "dependencies": { "@discordjs/opus": "github:discordjs/opus", "@discordjs/voice": "^0.7.5", - "@types/node": "^17.0.0", + "@types/node": "^17.0.5", "bufferutil": "^4.0.5", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", - "discord.js": "^13.3.1", + "discord.js": "^13.5.0", "fluent-ffmpeg": "^2.1.2", "jsonfile": "^6.1.0", "minimist": "^1.2.5", @@ -25,7 +25,7 @@ "typescript": "^4.5.4", "utf-8-validate": "^5.0.7", "winston": "^3.3.3", - "yt-search": "^2.10.2", + "yt-search": "^2.10.3", "ytdl-core": "^4.9.2", "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" diff --git a/src/bot/bot.ts b/src/bot/bot.ts index fccf264..b198778 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -22,6 +22,7 @@ import { } from "discord-bot-quickstart"; import * as yts from "yt-search"; import { AudioPlayerStatus, VoiceConnectionStatus } from "@discordjs/voice"; +import { MEDIA_ITEM_TYPE } from "../media/media-type"; const helptext = readFile("../helptext.txt"); const random = (array) => { @@ -96,7 +97,6 @@ export class RhythmBot extends IBot { embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], }); - // if (this.config.auto.play) this.player.play(); }) .catch((err) => { msg.channel.send({ embeds: [createErrorEmbed(err)] }); @@ -109,7 +109,23 @@ export class RhythmBot extends IBot { msg.channel.send({ embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], }); - this.player.playRadioZU(); + + this.player + .addMedia({ + type: MEDIA_ITEM_TYPE.RADIO, + url: "Radio ZU", + requestor: msg.author.username, + }) + .then(() => { + if ( + this.player.dispatcher && + !( + this.player.dispatcher.state.status == + AudioPlayerStatus.Playing + ) + ) + this.player.play(); + }); }) .catch((err) => { console.log(err); @@ -125,7 +141,22 @@ export class RhythmBot extends IBot { msg.channel.send({ embeds: [createInfoEmbed(`Joined Channel: ${msg.guild.name}`)], }); - this.player.playRadioVirgin(); + this.player + .addMedia({ + type: MEDIA_ITEM_TYPE.RADIO, + url: "Virgin Radio Romania", + requestor: msg.author.username, + }) + .then(() => { + if ( + this.player.dispatcher && + !( + this.player.dispatcher.state.status == + AudioPlayerStatus.Playing + ) + ) + this.player.play(); + }); }) .catch((err) => { console.log(err); @@ -135,7 +166,6 @@ export class RhythmBot extends IBot { ) .on("leave", (cmd: SuccessfulParsedMessage, msg: Message) => { - //todo if voice is in a voice channel if ( this.player.connection && !( @@ -143,7 +173,7 @@ export class RhythmBot extends IBot { VoiceConnectionStatus.Disconnected ) ) - // this.player.dispatcher.stop(); + this.player.dispatcher.stop(); this.player.clear(); this.player.dispatcher.stop(true); if ( @@ -187,7 +217,7 @@ export class RhythmBot extends IBot { ) { this.player .addMedia({ - type: "youtube", + type: MEDIA_ITEM_TYPE.YOUTUBE, url: cmd.body, requestor: msg.author.username, }) @@ -221,7 +251,7 @@ export class RhythmBot extends IBot { msg.channel.send({ embeds: [embed] }).then(() => { this.player .addMedia({ - type: "youtube", + type: MEDIA_ITEM_TYPE.YOUTUBE, url: v.url, requestor: msg.author.username, }) @@ -247,7 +277,6 @@ export class RhythmBot extends IBot { }) .on("time", (cmd: SuccessfulParsedMessage, msg: Message) => { let media = this.player.queue.first; - // if (this.player.playing && this.player.dispatcher) { if ( this.player.dispatcher && this.player.dispatcher.state.status == AudioPlayerStatus.Playing @@ -337,7 +366,7 @@ export class RhythmBot extends IBot { if (items.length <= 1) { this.player .addMedia({ - type: "youtube", + type: MEDIA_ITEM_TYPE.YOUTUBE, url: arg, requestor: msg.author.username, }) @@ -353,7 +382,7 @@ export class RhythmBot extends IBot { }); } else { this.player.addMedia({ - type: "youtube", + type: MEDIA_ITEM_TYPE.YOUTUBE, url: arg, requestor: msg.author.username, }); @@ -486,7 +515,7 @@ export class RhythmBot extends IBot { ) { this.logger.debug(`Emoji Click: Adding Media: ${embed.url}`); this.player.addMedia({ - type: "youtube", + type: MEDIA_ITEM_TYPE.YOUTUBE, url: embed.url, requestor: user.username, }); diff --git a/src/media/media-player.ts b/src/media/media-player.ts index 5005505..c3a7c67 100755 --- a/src/media/media-player.ts +++ b/src/media/media-player.ts @@ -25,6 +25,7 @@ import { VoiceConnection, } from "@discordjs/voice"; import { Readable } from "stream"; +import { MEDIA_ITEM_TYPE } from "./media-type"; export class MediaPlayer { typeRegistry: Map = new Map(); @@ -58,7 +59,7 @@ export class MediaPlayer { addMedia(item: MediaItem): Promise { return new Promise((done, error) => { let type = this.typeRegistry.get(item.type); - if (type) { + if (type && item.type == MEDIA_ITEM_TYPE.YOUTUBE) { type .getDetails(item) .then((media) => { @@ -70,6 +71,13 @@ export class MediaPlayer { done(item); }) .catch((err) => error(err)); + } else if (item.type == MEDIA_ITEM_TYPE.RADIO) { + item.name = item.url; + item.duration = "Live"; + item.isLive = true; + item.description = "Live Radio Stream !"; + this.queue.enqueue(item); + done(item); } else error("Unknown Media Type!"); }) .then((item: MediaItem) => { @@ -81,7 +89,6 @@ export class MediaPlayer { .addField("Requested By", item.requestor, true); this.channel.send({ embeds: [embed] }); } - // this.determineStatus();//1 }) .catch((err) => { if (this.channel) @@ -122,11 +129,12 @@ export class MediaPlayer { } dispatchStream(stream: Readable, item: MediaItem) { - this.audioResource = createAudioResource(stream, { - inlineVolume: true, - // inputType: StreamType.WebmOpus, - inputType: StreamType.Arbitrary, - }); + if (item.type == MEDIA_ITEM_TYPE.YOUTUBE) + this.audioResource = createAudioResource(stream, { + inlineVolume: true, + // inputType: StreamType.WebmOpus, + inputType: StreamType.WebmOpus, + }); if (this.dispatcher) { this.dispatcher.stop(); @@ -158,7 +166,7 @@ export class MediaPlayer { msg.react(this.config.emojis.playSong); msg.react(this.config.emojis.pauseSong); msg.react(this.config.emojis.skipSong); - this.determineStatus(); + this.determineStatus(); } }); this.dispatcher.on("debug", (info: string) => { @@ -223,8 +231,7 @@ export class MediaPlayer { let item = this.queue.first; if (item && this.connection) { let type = this.typeRegistry.get(item.type); - if (type) { - //this.dispatcher = createAudioPlayer(); + if (type && item.type == MEDIA_ITEM_TYPE.YOUTUBE) { if (this.dispatcher.state.status == AudioPlayerStatus.Idle) { type.getStream(item).then((stream) => { this.dispatchStream(stream, item); @@ -240,6 +247,40 @@ export class MediaPlayer { embeds: [createInfoEmbed(`⏯️ ${this.queue.first.name}resumed`)], }); } + } else if (item.type == MEDIA_ITEM_TYPE.RADIO) { + if (item.name.includes("ZU")) { + const ffmpeg = child_process.spawn("ffmpeg", [ + "-analyzeduration", + "0", + "-loglevel", + "0", + "-i", + "http://live4ro.antenaplay.ro//radiozu/radiozu-48000.m3u8", + "-f", + "opus", + "pipe:1", + ]); + + this.dispatchStream(ffmpeg.stdout, item); + this.dispatcher.play(createAudioResource(ffmpeg.stdout)); + this.isRadio = true; + } else if (item.name.includes("Virgin")) { + const ffmpeg = child_process.spawn("ffmpeg", [ + "-analyzeduration", + "0", + "-loglevel", + "0", + "-i", + "http://astreaming.virginradio.ro:8000/virgin_aacp_64k", + "-f", + "adts", + "pipe:1", + ]); + this.dispatchStream(ffmpeg.stdout, item); + this.dispatcher.play(createAudioResource(ffmpeg.stdout)); + // this.dispatcher.play(createAudioResource(ffmpeg.stdout)); + this.isRadio = true; + } } } } @@ -266,7 +307,7 @@ export class MediaPlayer { ]); this.dispatcher.play(createAudioResource(ffmpeg.stdout)); - this.connection.subscribe(this.dispatcher); + // this.connection.subscribe(this.dispatcher); this.isRadio = true; } } @@ -293,7 +334,7 @@ export class MediaPlayer { ]); this.dispatcher.play(createAudioResource(ffmpeg.stdout)); - this.connection.subscribe(this.dispatcher); + // this.connection.subscribe(this.dispatcher); this.isRadio = true; } } @@ -340,6 +381,7 @@ export class MediaPlayer { }); } } + this.determineStatus(); } pause() { @@ -438,7 +480,10 @@ export class MediaPlayer { `Playing? ${item.name} stream Requested by : ${item.requestor}` ); } - if (this.isRadio) this.status.setBanner(`Playing Radio`); + if (this.isRadio) { + if (this.dispatcher.state.status == AudioPlayerStatus.Playing) + this.status.setBanner(`Playing ${item.name}`); + } } } } diff --git a/src/media/media-type.model.ts b/src/media/media-type.model.ts index efbce57..e787c8a 100755 --- a/src/media/media-type.model.ts +++ b/src/media/media-type.model.ts @@ -5,4 +5,5 @@ export interface IMediaType { getPlaylist(item: MediaItem): Promise; getDetails(item: MediaItem): Promise; getStream(item: MediaItem): Promise; + } diff --git a/src/media/media-type.ts b/src/media/media-type.ts new file mode 100644 index 0000000..e6fbd83 --- /dev/null +++ b/src/media/media-type.ts @@ -0,0 +1,4 @@ +export enum MEDIA_ITEM_TYPE { + YOUTUBE = "youtube", + RADIO = "radio", +} diff --git a/src/plugins/youtube.ts b/src/plugins/youtube.ts index ef4e1f4..1ce3160 100755 --- a/src/plugins/youtube.ts +++ b/src/plugins/youtube.ts @@ -1,77 +1,131 @@ -import { IRhythmBotConfig, RhythmBot } from '../bot'; -import { MediaItem } from '../media'; -import { secondsToTimestamp } from '../helpers'; -import { IBotPlugin, IBot, SuccessfulParsedMessage, Message, CommandMap, Client, IBotConfig } from 'discord-bot-quickstart'; -import { Readable } from 'stream'; -import * as ytdl from 'ytdl-core'; -import * as ytpl from 'ytpl'; +import { IRhythmBotConfig, RhythmBot } from "../bot"; +import { MediaItem } from "../media"; +import { secondsToTimestamp } from "../helpers"; +import { + IBotPlugin, + IBot, + SuccessfulParsedMessage, + Message, + CommandMap, + Client, + IBotConfig, +} from "discord-bot-quickstart"; +import { Readable } from "stream"; +import * as ytdl from "ytdl-core"; +import * as ytpl from "ytpl"; -const youtubeType: string = 'youtube'; - -const cookie : string = 'LOGI_INFO=AFmmF2swRAIgLw7aQC5MpW5f-J3k9J38ul2jhpPHjZlneUbTZ5thhooCIFbQCu84vKalHaf4FMtBGUj9CxRrmBb18CJ4xLIC8ywi:QUQ3MjNmeDhxUXp3MkRPZVdsbEhsWkZsTHVoWGtXa1JZNVRYb3JqV2dwck9wcERhTmFFVFhBLXp5SDh0NWR0N1BLTGFseFhrZ3hwNGd6ZURqcG9WYTN2OUpFZXlpYTdLUHB6Q0NmaER3VVFmaDh0c1JfODEtWURXYUphRjFYYUJJdExvRmcyZFNPc1JBZ0JTcXpzU3ozTzVvcGJ2SC1vSGtn; HSID=Aa3qWcushVQ9benXP; SID=FAgGb1ZvwAfBSg6OehJeTzpwIzLO4Mw-3SiTL4LSm7WZ3VpGUPwMuKS55xgKIsYTxdyseQ; SSID=A7Gq7xRk2VK-BRLdh'; +const youtubeType: string = "youtube"; +const cookie: string = + "LOGI_INFO=AFmmF2swRAIgLw7aQC5MpW5f-J3k9J38ul2jhpPHjZlneUbTZ5thhooCIFbQCu84vKalHaf4FMtBGUj9CxRrmBb18CJ4xLIC8ywi:QUQ3MjNmeDhxUXp3MkRPZVdsbEhsWkZsTHVoWGtXa1JZNVRYb3JqV2dwck9wcERhTmFFVFhBLXp5SDh0NWR0N1BLTGFseFhrZ3hwNGd6ZURqcG9WYTN2OUpFZXlpYTdLUHB6Q0NmaER3VVFmaDh0c1JfODEtWURXYUphRjFYYUJJdExvRmcyZFNPc1JBZ0JTcXpzU3ozTzVvcGJ2SC1vSGtn; HSID=Aa3qWcushVQ9benXP; SID=FAgGb1ZvwAfBSg6OehJeTzpwIzLO4Mw-3SiTL4LSm7WZ3VpGUPwMuKS55xgKIsYTxdyseQ; SSID=A7Gq7xRk2VK-BRLdh"; export default class YoutubePlugin extends IBotPlugin { - bot: RhythmBot; + bot: RhythmBot; + + preInitialize(bot: IBot): void { + this.bot = bot as RhythmBot; + this.bot.helptext += + "\n`youtube [url/idfragment]` - Add youtube audio to the queue\n"; + this.bot.helptext += "\n` !add youtube:*youtubecode*\n"; + } + + registerDiscordCommands( + map: CommandMap< + (cmd: SuccessfulParsedMessage, msg: Message) => void + > + ) { + map.on( + youtubeType, + (cmd: SuccessfulParsedMessage, msg: Message) => { + if (cmd.arguments.length > 0) { + cmd.arguments.forEach((arg) => { + this.bot.player.addMedia({ + type: youtubeType, + url: arg, + requestor: msg.author.username, + }); + }); + } + } + ); + + this.bot.player.typeRegistry.set(youtubeType, { + getPlaylist: (item: MediaItem) => + new Promise((done, error) => { + ytpl(item.url) + .then((playlist) => { + const items = playlist.items.map( + (item) => + { + type: youtubeType, + url: item.url, + name: item.title, + } + ); + done(items); + }) + .catch((err) => error(err)); + }), - preInitialize(bot: IBot): void { - this.bot = bot as RhythmBot; - this.bot.helptext += '\n`youtube [url/idfragment]` - Add youtube audio to the queue\n'; - this.bot.helptext += '\n` !add youtube:*youtubecode*\n' - } + getDetails: (item: MediaItem) => + new Promise((done, error) => { + ytdl + .getInfo(item.url) + .then((info) => { + item.name = info.videoDetails.title + ? info.videoDetails.title + : "Unknown"; + item.duration = secondsToTimestamp( + parseInt(info.videoDetails.lengthSeconds) || 0 + ); + item.description = info.videoDetails.description + ? info.videoDetails.description + : "No description available!"; + item.isLive = info.videoDetails.isLiveContent + ? info.videoDetails.isLiveContent + : false; + /* info.formats.forEach(element => { // ex-live videos won't work !!! + if(element.){ + console.log(element.quality); + console.log(element.codecs); + console.log(element.container); + console.log("--------------------------------------") + } + }); + */ - registerDiscordCommands(map: CommandMap<(cmd: SuccessfulParsedMessage, msg: Message) => void>) { - map.on(youtubeType, (cmd: SuccessfulParsedMessage, msg: Message) => { - if(cmd.arguments.length > 0) { - cmd.arguments.forEach(arg => { - this.bot.player.addMedia({ type: youtubeType, url: arg, requestor: msg.author.username }); - }); - } - }); + done(item); + }) + .catch((err) => error(err)); + }), + getStream: (item: MediaItem) => + new Promise((done, error) => { + let stream = ytdl(item.url, { + quality: "highestaudio", + requestOptions: { + headers: { + Cookie: cookie, + }, + }, + filter: item.isLive + ? (format) => format.isHLS === true + : (format) => + format.container === "webm" && format.codecs === "opus", + highWaterMark: 1 << 28, + liveBuffer: 4999, + dlChunkSize: 1 << 12, + }); - this.bot.player.typeRegistry.set( - youtubeType, - { - getPlaylist: (item: MediaItem) => new Promise((done, error) => { - ytpl(item.url) - .then(playlist => { - const items = playlist.items.map(item => ({ type: youtubeType, url: item.url, name: item.title })) - done(items); - }) - .catch(err => error(err)); - }), - getDetails: (item: MediaItem) => new Promise((done, error) => { - ytdl.getInfo(item.url) - .then( info => { - item.name = info.videoDetails.title ? info.videoDetails.title : 'Unknown'; - item.duration = secondsToTimestamp(parseInt(info.videoDetails.lengthSeconds) || 0); - item.description = info.videoDetails.description? info.videoDetails.description : "No description available!"; - item.isLive = info.videoDetails.isLiveContent? info.videoDetails.isLiveContent: false ; - done(item); - }) - .catch(err => error(err)); - }), - getStream: (item: MediaItem) => new Promise((done, error) => { - let stream = ytdl(item.url, { quality: 'highestaudio', requestOptions:{ headers: { - Cookie:cookie - }}, - filter: (item.isLive ? ( format => format.isHLS === true ) : (format => format.container === 'webm' && format.codecs === 'opus')), - highWaterMark: 1<<28, liveBuffer: 4999, dlChunkSize: 1<<12 }); - - if(stream) - done(stream); - else - error('Unable to get media stream'); - }) - } - ); - } + if (stream) done(stream); + else error("Unable to get media stream"); + }), + }); + } - registerConsoleCommands() { } + registerConsoleCommands() {} - clientBound() { } + clientBound() {} - postInitialize() { } - - onReady() { } + postInitialize() {} + onReady() {} } From 33056de102b352742c520f6ce29c6501a8f01247 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Fri, 18 Feb 2022 17:18:52 +0200 Subject: [PATCH 20/23] updated to latest dependecies --- package-lock.json | 725 +++++++++++++++++++---------------------- package.json | 18 +- src/bot/bot.ts | 15 +- src/helpers/helpers.ts | 2 +- 4 files changed, 355 insertions(+), 405 deletions(-) diff --git a/package-lock.json b/package-lock.json index 743c025..59ede13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,35 +1,43 @@ { "name": "rhythm-bot", - "version": "2.1.5", + "version": "2.1.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "rhythm-bot", - "version": "2.1.5", + "version": "2.1.6", "license": "ISC", "dependencies": { "@discordjs/opus": "github:discordjs/opus", - "@discordjs/voice": "^0.7.5", - "@types/node": "^17.0.0", - "bufferutil": "^4.0.5", + "@discordjs/voice": "^0.8.0", + "@types/node": "^17.0.18", + "bufferutil": "^4.0.6", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", - "discord.js": "^13.3.1", + "discord.js": "^13.6.0", "fluent-ffmpeg": "^2.1.2", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", "sodium": "^3.0.2", "typescript": "^4.5.4", - "utf-8-validate": "^5.0.7", - "winston": "^3.3.3", - "yt-search": "^2.10.2", - "ytdl-core": "^4.9.2", + "utf-8-validate": "^5.0.8", + "winston": "^3.6.0", + "yt-search": "^2.10.3", + "ytdl-core": "^4.10.1", "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -41,15 +49,15 @@ } }, "node_modules/@discordjs/builders": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", - "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", "dependencies": { "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.24.0", - "ow": "^0.27.0", + "discord-api-types": "^0.26.0", "ts-mixer": "^6.0.0", - "tslib": "^2.3.1" + "tslib": "^2.3.1", + "zod": "^3.11.6" }, "engines": { "node": ">=16.0.0", @@ -57,27 +65,14 @@ } }, "node_modules/@discordjs/collection": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", - "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@discordjs/node-pre-gyp": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.2.tgz", @@ -111,20 +106,66 @@ } }, "node_modules/@discordjs/voice": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.5.tgz", - "integrity": "sha512-lUk+CmIXNKslT6DkC9IF9rpsqhzlTiedauUCPBzepjd4XWxwBZiyVIzR6QpbAirxkAwCoAbbje+3Ho71PGLEAw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.8.0.tgz", + "integrity": "sha512-o0JfVLMs3eLjUzPf6oxMydEeum40I7xzfUc66SLN+RrKpSAsTbngf5qnCF53nm+KDNSvrwg1AZqNm4LEAdxJIA==", "dependencies": { "@types/ws": "^8.2.0", - "discord-api-types": "^0.24.0", + "discord-api-types": "^0.26.1", "prism-media": "^1.3.2", "tiny-typed-emitter": "^2.1.0", "tslib": "^2.3.1", - "ws": "^8.2.3" + "ws": "^8.4.2" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/voice/node_modules/@discordjs/opus": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.5.3.tgz", + "integrity": "sha512-IQhCwCy2WKXLe+qkOkwO1Wjgk20uqeAbqM62tCbzIqbTsXX4YAge8Me9RFnI77Lx+UTkgm4rSVM3VPVdS/GsUw==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "@discordjs/node-pre-gyp": "^0.4.0", + "node-addon-api": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@discordjs/voice/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true, + "peer": true + }, + "node_modules/@discordjs/voice/node_modules/prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "peerDependencies": { + "@discordjs/opus": "^0.5.0", + "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", + "node-opus": "^0.3.3", + "opusscript": "^0.0.8" + }, + "peerDependenciesMeta": { + "@discordjs/opus": { + "optional": true + }, + "ffmpeg-static": { + "optional": true + }, + "node-opus": { + "optional": true + }, + "opusscript": { + "optional": true + } } }, "node_modules/@sapphire/async-queue": { @@ -161,9 +202,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", + "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, "node_modules/@types/node-fetch": { "version": "2.5.12", @@ -174,6 +215,19 @@ "form-data": "^3.0.0" } }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/ws": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", @@ -224,9 +278,9 @@ } }, "node_modules/async": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", - "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "node_modules/async.parallellimit": { "version": "0.5.2", @@ -335,9 +389,9 @@ } }, "node_modules/bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -346,14 +400,6 @@ "node": ">=6.14.2" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/cheerio": { "version": "1.0.0-rc.10", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", @@ -457,14 +503,6 @@ "color-support": "bin.js" } }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", @@ -496,9 +534,9 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "node_modules/css-select": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.0.tgz", - "integrity": "sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dependencies": { "boolbase": "^1.0.0", "css-what": "^5.1.0", @@ -531,9 +569,9 @@ } }, "node_modules/dasu": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.4.2.tgz", - "integrity": "sha512-3iZKDAKqv0APFwpqP40gpro5msM+pwhQN7IhB42mjbL1W4M2V6A+MJy7RhA8y6lUM+1mQoLls3OePidmzVbncQ==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.4.3.tgz", + "integrity": "sha512-AFwspl5k7V8MW8H7tyIGJ0gtOauUg7JC+DgiRFUIXvPNNDFXTMtvnCkZY0macN6JLGqBjNP38WVnQN7Iv3RSlg==" }, "node_modules/debug": { "version": "4.3.3", @@ -576,9 +614,10 @@ } }, "node_modules/discord-api-types": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", - "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==", + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "deprecated": "No longer supported. Install the latest release!", "engines": { "node": ">=12" } @@ -601,9 +640,9 @@ } }, "node_modules/discord-bot-quickstart/node_modules/@types/node": { - "version": "16.11.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz", - "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==" + "version": "16.11.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.17.tgz", + "integrity": "sha512-C1vTZME8cFo8uxY2ui41xcynEotVkczIVI5AjLmy5pkpBv/FtG+jhtOlfcPysI8VRVwoOMv6NJm44LGnoMSWkw==" }, "node_modules/discord-command-parser": { "version": "1.5.3", @@ -611,19 +650,19 @@ "integrity": "sha512-YWgalkrbly0dJCyLw7p9SX3RC7HIxOrSTz/8vKjlmYPyyZmMCGmKwpXu6HkPXRZ20L6QqftVWigSw6fDK2zemg==" }, "node_modules/discord.js": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", - "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", - "dependencies": { - "@discordjs/builders": "^0.8.1", - "@discordjs/collection": "^0.3.2", - "@discordjs/form-data": "^3.0.1", - "@sapphire/async-queue": "^1.1.8", + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", + "dependencies": { + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", "@types/node-fetch": "^2.5.12", - "@types/ws": "^8.2.0", - "discord-api-types": "^0.24.0", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", "node-fetch": "^2.6.1", - "ws": "^8.2.3" + "ws": "^8.4.0" }, "engines": { "node": ">=16.6.0", @@ -681,20 +720,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -798,9 +823,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -937,14 +962,6 @@ "node": ">=8" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -995,20 +1012,15 @@ "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, "node_modules/logform": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.0.tgz", - "integrity": "sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", + "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", "dependencies": { - "colors": "^1.2.1", + "@colors/colors": "1.5.0", "fecha": "^4.2.0", "ms": "^2.1.1", - "safe-stable-stringify": "^1.1.0", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" } }, @@ -1032,15 +1044,15 @@ } }, "node_modules/m3u8stream": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.4.tgz", - "integrity": "sha512-sco80Db+30RvcaIOndenX6E6oQNgTiBKeJbFPc+yDXwPQIkryfboEbCvXPlBRq3mQTCVPQO93TDVlfRwqpD35w==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.6.tgz", + "integrity": "sha512-LZj8kIVf9KCphiHmH7sbFQTVe4tOemb202fWwvJwR9W5ENW/1hxJN6ksAWGhQgSBSa3jyWhnjKU1Fw1GaOdbyA==", "dependencies": { - "miniget": "^4.0.0", + "miniget": "^4.2.2", "sax": "^1.2.4" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/make-dir": { @@ -1105,11 +1117,11 @@ } }, "node_modules/miniget": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.1.tgz", - "integrity": "sha512-O/DduzDR6f+oDtVype9S/Qu5hhnx73EDYGyZKwU/qN82lehFZdfhoa4DT51SpsO+8epYrB3gcRmws56ROfTIoQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.2.tgz", + "integrity": "sha512-a7voNL1N5lDMxvTMExOkg+Fq89jM2vY8pAi9ZEWzZtfNmdfP6RXkvUtFnCAXoCv2T9k1v/fUJVaAEuepGcvLYA==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/minimatch": { @@ -1191,14 +1203,22 @@ "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" }, "node_modules/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/node-fzf": { @@ -1326,25 +1346,6 @@ "fn.name": "1.x.x" } }, - "node_modules/ow": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", - "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", - "dependencies": { - "@sindresorhus/is": "^4.0.1", - "callsites": "^3.1.0", - "dot-prop": "^6.0.1", - "lodash.isequal": "^4.5.0", - "type-fest": "^1.2.1", - "vali-date": "^1.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -1366,31 +1367,6 @@ "node": ">=0.10.0" } }, - "node_modules/prism-media": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", - "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", - "peerDependencies": { - "@discordjs/opus": "^0.5.0", - "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", - "node-opus": "^0.3.3", - "opusscript": "^0.0.8" - }, - "peerDependenciesMeta": { - "@discordjs/opus": { - "optional": true - }, - "ffmpeg-static": { - "optional": true - }, - "node-opus": { - "optional": true - }, - "opusscript": { - "optional": true - } - } - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -1446,9 +1422,12 @@ ] }, "node_modules/safe-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "engines": { + "node": ">=10" + } }, "node_modules/sax": { "version": "1.2.4", @@ -1604,17 +1583,6 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, - "node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", @@ -1636,9 +1604,9 @@ } }, "node_modules/utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -1652,14 +1620,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -1694,32 +1654,33 @@ } }, "node_modules/winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.6.0.tgz", + "integrity": "sha512-9j8T75p+bcN6D00sF/zjFVmPp+t8KMPB1MzbbzYjeN9VWxdsYnTB40TkbNUEXAmILEfChMvAMgidlX64OG3p6w==", "dependencies": { "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.4.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "winston-transport": "^4.5.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" } }, "node_modules/winston-transport": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.1.tgz", - "integrity": "sha512-ciZRlU4CSjHqHe8RQG1iPxKMRVwv6ZJ0RC7DxStKWd0KjpAhPDy5gVYSCpIUq+5CUsP+IyNOTZy1X0tO2QZqjg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", "dependencies": { - "logform": "^2.2.0", - "readable-stream": "^3.4.0", - "triple-beam": "^1.2.0" + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" }, "engines": { "node": ">= 6.4.0" @@ -1731,9 +1692,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "engines": { "node": ">=10.0.0" }, @@ -1756,14 +1717,14 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yt-search": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.2.tgz", - "integrity": "sha512-cwg8yK3pVuwczfoADOqhVHj5i/Qv8xb7/wYh3gwvfGiHsxpgDtMKKuBWyOenrXwwC7A/nj3YQYsfDlZ2/rk83w==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.3.tgz", + "integrity": "sha512-msITxMhn+1f3RIlS2R0d5/275grX0nUgaD570Fap3gvPmwfvR9w31JG8B9++4Xtm6BLAzhdITK7kAWRInef8QQ==", "dependencies": { "async.parallellimit": "~0.5.2", "boolstring": "~1.0.2", "cheerio": "^1.0.0-rc.10", - "dasu": "~0.4.2", + "dasu": "~0.4.3", "human-time": "0.0.2", "jsonpath-plus": "~5.0.2", "minimist": "~1.2.5", @@ -1776,11 +1737,11 @@ } }, "node_modules/ytdl-core": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.2.tgz", - "integrity": "sha512-aTlsvsN++03MuOtyVD4DRF9Z/9UAeeuiNbjs+LjQBAiw4Hrdp48T3U9vAmRPyvREzupraY8pqRoBfKGqpq+eHA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.10.1.tgz", + "integrity": "sha512-idBhW+e7HCzs5fR5cqp7Ci+mJhEch41YAaWabYlneQFCL6IGf6Hycv99yVx01Zl1Ci0t/70faOelMSrXaQTE/A==", "dependencies": { - "m3u8stream": "^0.8.4", + "m3u8stream": "^0.8.6", "miniget": "^4.0.0", "sax": "^1.1.3" }, @@ -1807,9 +1768,22 @@ "dependencies": { "nan": "^2.14.0" } + }, + "node_modules/zod": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.11.6.tgz", + "integrity": "sha512-daZ80A81I3/9lIydI44motWe6n59kRBfNzTuS2bfzVh1nAXi667TOTWWtatxyG+fwgNUiagSj/CWZwRRbevJIg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + }, "@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -1821,31 +1795,21 @@ } }, "@discordjs/builders": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", - "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", "requires": { "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.24.0", - "ow": "^0.27.0", + "discord-api-types": "^0.26.0", "ts-mixer": "^6.0.0", - "tslib": "^2.3.1" + "tslib": "^2.3.1", + "zod": "^3.11.6" } }, "@discordjs/collection": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", - "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==" - }, - "@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==" }, "@discordjs/node-pre-gyp": { "version": "0.4.2", @@ -1872,16 +1836,42 @@ } }, "@discordjs/voice": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.5.tgz", - "integrity": "sha512-lUk+CmIXNKslT6DkC9IF9rpsqhzlTiedauUCPBzepjd4XWxwBZiyVIzR6QpbAirxkAwCoAbbje+3Ho71PGLEAw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.8.0.tgz", + "integrity": "sha512-o0JfVLMs3eLjUzPf6oxMydEeum40I7xzfUc66SLN+RrKpSAsTbngf5qnCF53nm+KDNSvrwg1AZqNm4LEAdxJIA==", "requires": { "@types/ws": "^8.2.0", - "discord-api-types": "^0.24.0", + "discord-api-types": "^0.26.1", "prism-media": "^1.3.2", "tiny-typed-emitter": "^2.1.0", "tslib": "^2.3.1", - "ws": "^8.2.3" + "ws": "^8.4.2" + }, + "dependencies": { + "@discordjs/opus": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.5.3.tgz", + "integrity": "sha512-IQhCwCy2WKXLe+qkOkwO1Wjgk20uqeAbqM62tCbzIqbTsXX4YAge8Me9RFnI77Lx+UTkgm4rSVM3VPVdS/GsUw==", + "optional": true, + "peer": true, + "requires": { + "@discordjs/node-pre-gyp": "^0.4.0", + "node-addon-api": "^3.2.1" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true, + "peer": true + }, + "prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "requires": {} + } } }, "@sapphire/async-queue": { @@ -1908,9 +1898,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", + "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, "@types/node-fetch": { "version": "2.5.12", @@ -1919,6 +1909,18 @@ "requires": { "@types/node": "*", "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "@types/ws": { @@ -1962,9 +1964,9 @@ } }, "async": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", - "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "async.parallellimit": { "version": "0.5.2", @@ -2073,18 +2075,13 @@ } }, "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "requires": { "node-gyp-build": "^4.3.0" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, "cheerio": { "version": "1.0.0-rc.10", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", @@ -2172,11 +2169,6 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, "colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", @@ -2205,9 +2197,9 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "css-select": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.0.tgz", - "integrity": "sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "requires": { "boolbase": "^1.0.0", "css-what": "^5.1.0", @@ -2231,9 +2223,9 @@ } }, "dasu": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.4.2.tgz", - "integrity": "sha512-3iZKDAKqv0APFwpqP40gpro5msM+pwhQN7IhB42mjbL1W4M2V6A+MJy7RhA8y6lUM+1mQoLls3OePidmzVbncQ==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/dasu/-/dasu-0.4.3.tgz", + "integrity": "sha512-AFwspl5k7V8MW8H7tyIGJ0gtOauUg7JC+DgiRFUIXvPNNDFXTMtvnCkZY0macN6JLGqBjNP38WVnQN7Iv3RSlg==" }, "debug": { "version": "4.3.3", @@ -2259,9 +2251,9 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "discord-api-types": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", - "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==" + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" }, "discord-bot-quickstart": { "version": "git+ssh://git@github.com/spectral369/Discord-Bot-Quickstart.git#433859db404e64f41d93f0cf5d60d112c13672b8", @@ -2280,9 +2272,9 @@ }, "dependencies": { "@types/node": { - "version": "16.11.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz", - "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==" + "version": "16.11.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.17.tgz", + "integrity": "sha512-C1vTZME8cFo8uxY2ui41xcynEotVkczIVI5AjLmy5pkpBv/FtG+jhtOlfcPysI8VRVwoOMv6NJm44LGnoMSWkw==" } } }, @@ -2292,19 +2284,19 @@ "integrity": "sha512-YWgalkrbly0dJCyLw7p9SX3RC7HIxOrSTz/8vKjlmYPyyZmMCGmKwpXu6HkPXRZ20L6QqftVWigSw6fDK2zemg==" }, "discord.js": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", - "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", - "requires": { - "@discordjs/builders": "^0.8.1", - "@discordjs/collection": "^0.3.2", - "@discordjs/form-data": "^3.0.1", - "@sapphire/async-queue": "^1.1.8", + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", + "requires": { + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", "@types/node-fetch": "^2.5.12", - "@types/ws": "^8.2.0", - "discord-api-types": "^0.24.0", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", "node-fetch": "^2.6.1", - "ws": "^8.2.3" + "ws": "^8.4.0" } }, "dom-serializer": { @@ -2340,14 +2332,6 @@ "domhandler": "^4.2.0" } }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2447,9 +2431,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -2558,11 +2542,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -2602,20 +2581,15 @@ "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, "logform": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.0.tgz", - "integrity": "sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", + "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", "requires": { - "colors": "^1.2.1", + "@colors/colors": "1.5.0", "fecha": "^4.2.0", "ms": "^2.1.1", - "safe-stable-stringify": "^1.1.0", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" } }, @@ -2636,11 +2610,11 @@ } }, "m3u8stream": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.4.tgz", - "integrity": "sha512-sco80Db+30RvcaIOndenX6E6oQNgTiBKeJbFPc+yDXwPQIkryfboEbCvXPlBRq3mQTCVPQO93TDVlfRwqpD35w==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.6.tgz", + "integrity": "sha512-LZj8kIVf9KCphiHmH7sbFQTVe4tOemb202fWwvJwR9W5ENW/1hxJN6ksAWGhQgSBSa3jyWhnjKU1Fw1GaOdbyA==", "requires": { - "miniget": "^4.0.0", + "miniget": "^4.2.2", "sax": "^1.2.4" } }, @@ -2695,9 +2669,9 @@ } }, "miniget": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.1.tgz", - "integrity": "sha512-O/DduzDR6f+oDtVype9S/Qu5hhnx73EDYGyZKwU/qN82lehFZdfhoa4DT51SpsO+8epYrB3gcRmws56ROfTIoQ==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.2.tgz", + "integrity": "sha512-a7voNL1N5lDMxvTMExOkg+Fq89jM2vY8pAi9ZEWzZtfNmdfP6RXkvUtFnCAXoCv2T9k1v/fUJVaAEuepGcvLYA==" }, "minimatch": { "version": "3.0.4", @@ -2760,9 +2734,9 @@ "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" } @@ -2862,19 +2836,6 @@ "fn.name": "1.x.x" } }, - "ow": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", - "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", - "requires": { - "@sindresorhus/is": "^4.0.1", - "callsites": "^3.1.0", - "dot-prop": "^6.0.1", - "lodash.isequal": "^4.5.0", - "type-fest": "^1.2.1", - "vali-date": "^1.0.0" - } - }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -2893,12 +2854,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "prism-media": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", - "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", - "requires": {} - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -2931,9 +2886,9 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" }, "sax": { "version": "1.2.4", @@ -3067,11 +3022,6 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" - }, "typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", @@ -3083,9 +3033,9 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", "requires": { "node-gyp-build": "^4.3.0" } @@ -3095,11 +3045,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" - }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -3131,29 +3076,30 @@ } }, "winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.6.0.tgz", + "integrity": "sha512-9j8T75p+bcN6D00sF/zjFVmPp+t8KMPB1MzbbzYjeN9VWxdsYnTB40TkbNUEXAmILEfChMvAMgidlX64OG3p6w==", "requires": { "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.4.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "winston-transport": "^4.5.0" } }, "winston-transport": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.1.tgz", - "integrity": "sha512-ciZRlU4CSjHqHe8RQG1iPxKMRVwv6ZJ0RC7DxStKWd0KjpAhPDy5gVYSCpIUq+5CUsP+IyNOTZy1X0tO2QZqjg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", "requires": { - "logform": "^2.2.0", - "readable-stream": "^3.4.0", - "triple-beam": "^1.2.0" + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" } }, "wrappy": { @@ -3162,9 +3108,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "requires": {} }, "yallist": { @@ -3173,14 +3119,14 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yt-search": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.2.tgz", - "integrity": "sha512-cwg8yK3pVuwczfoADOqhVHj5i/Qv8xb7/wYh3gwvfGiHsxpgDtMKKuBWyOenrXwwC7A/nj3YQYsfDlZ2/rk83w==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/yt-search/-/yt-search-2.10.3.tgz", + "integrity": "sha512-msITxMhn+1f3RIlS2R0d5/275grX0nUgaD570Fap3gvPmwfvR9w31JG8B9++4Xtm6BLAzhdITK7kAWRInef8QQ==", "requires": { "async.parallellimit": "~0.5.2", "boolstring": "~1.0.2", "cheerio": "^1.0.0-rc.10", - "dasu": "~0.4.2", + "dasu": "~0.4.3", "human-time": "0.0.2", "jsonpath-plus": "~5.0.2", "minimist": "~1.2.5", @@ -3188,11 +3134,11 @@ } }, "ytdl-core": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.9.2.tgz", - "integrity": "sha512-aTlsvsN++03MuOtyVD4DRF9Z/9UAeeuiNbjs+LjQBAiw4Hrdp48T3U9vAmRPyvREzupraY8pqRoBfKGqpq+eHA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.10.1.tgz", + "integrity": "sha512-idBhW+e7HCzs5fR5cqp7Ci+mJhEch41YAaWabYlneQFCL6IGf6Hycv99yVx01Zl1Ci0t/70faOelMSrXaQTE/A==", "requires": { - "m3u8stream": "^0.8.4", + "m3u8stream": "^0.8.6", "miniget": "^4.0.0", "sax": "^1.1.3" } @@ -3212,6 +3158,11 @@ "requires": { "nan": "^2.14.0" } + }, + "zod": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.11.6.tgz", + "integrity": "sha512-daZ80A81I3/9lIydI44motWe6n59kRBfNzTuS2bfzVh1nAXi667TOTWWtatxyG+fwgNUiagSj/CWZwRRbevJIg==" } } } diff --git a/package.json b/package.json index d447b41..3faf0c7 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rhythm-bot", - "version": "2.1.5", + "version": "2.1.6", "description": "", "main": "dist/app.js", "scripts": { @@ -11,23 +11,23 @@ "license": "ISC", "dependencies": { "@discordjs/opus": "github:discordjs/opus", - "@discordjs/voice": "^0.7.5", - "@types/node": "^17.0.5", - "bufferutil": "^4.0.5", + "@discordjs/voice": "^0.8.0", + "@types/node": "^17.0.18", + "bufferutil": "^4.0.6", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", - "discord.js": "^13.5.0", + "discord.js": "^13.6.0", "fluent-ffmpeg": "^2.1.2", "jsonfile": "^6.1.0", "minimist": "^1.2.5", "moment": "^2.29.1", "sodium": "^3.0.2", "typescript": "^4.5.4", - "utf-8-validate": "^5.0.7", - "winston": "^3.3.3", + "utf-8-validate": "^5.0.8", + "winston": "^3.6.0", "yt-search": "^2.10.3", - "ytdl-core": "^4.9.2", + "ytdl-core": "^4.10.1", "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" } -} +} \ No newline at end of file diff --git a/src/bot/bot.ts b/src/bot/bot.ts index b198778..505c5d9 100755 --- a/src/bot/bot.ts +++ b/src/bot/bot.ts @@ -173,8 +173,8 @@ export class RhythmBot extends IBot { VoiceConnectionStatus.Disconnected ) ) - this.player.dispatcher.stop(); - this.player.clear(); + this.player.dispatcher.stop(); + this.player.clear(); this.player.dispatcher.stop(true); if ( !( @@ -413,8 +413,7 @@ export class RhythmBot extends IBot { .on("list", (cmd: SuccessfulParsedMessage, msg: Message) => { let items = this.player.queue.map( (item, idx) => - `${idx + 1}. Type: "${item.type}", Title: "${item.name}${ - item.requestor ? `", Requested By: ${item.requestor}` : "" + `${idx + 1}. Type: "${item.type}", Title: "${item.name}${item.requestor ? `", Requested By: ${item.requestor}` : "" }"` ); if (items.length > 0) @@ -434,9 +433,9 @@ export class RhythmBot extends IBot { .on("move", (cmd: SuccessfulParsedMessage, msg: Message) => { if (cmd.arguments.length > 1) { let current = Math.min( - Math.max(parseInt(cmd.arguments[0]), 0), - this.player.queue.length - 1 - ), + Math.max(parseInt(cmd.arguments[0]), 0), + this.player.queue.length - 1 + ), targetDesc = cmd.arguments[0], target = 0; if (targetDesc == "up") target = Math.min(current - 1, 0); @@ -592,5 +591,5 @@ export class RhythmBot extends IBot { onRegisterConsoleCommands( map: CommandMap<(args: ParsedArgs, rl: Interface) => void> - ): void {} + ): void { } } diff --git a/src/helpers/helpers.ts b/src/helpers/helpers.ts index a886671..d1ddae5 100755 --- a/src/helpers/helpers.ts +++ b/src/helpers/helpers.ts @@ -1,5 +1,5 @@ -import { joinVoiceChannel, VoiceConnection, VoiceConnectionStatus } from '@discordjs/voice'; +import { joinVoiceChannel, VoiceConnection } from '@discordjs/voice'; import { Message, MessageEmbed } from 'discord.js'; import * as moment from 'moment'; From ade6e875d4691a66cc7bd3db475b0e978a6e6f00 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Fri, 4 Mar 2022 18:19:16 +0200 Subject: [PATCH 21/23] dependencies update --- package-lock.json | 55 +++++++++++++++++++++++++++++++++++------------ package.json | 7 +++--- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59ede13..1eaff78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,17 +11,18 @@ "dependencies": { "@discordjs/opus": "github:discordjs/opus", "@discordjs/voice": "^0.8.0", - "@types/node": "^17.0.18", + "@types/node": "^17.0.21", "bufferutil": "^4.0.6", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", "discord.js": "^13.6.0", "fluent-ffmpeg": "^2.1.2", "jsonfile": "^6.1.0", + "libsodium-wrappers": "^0.7.9", "minimist": "^1.2.5", "moment": "^2.29.1", "sodium": "^3.0.2", - "typescript": "^4.5.4", + "typescript": "^4.6.2", "utf-8-validate": "^5.0.8", "winston": "^3.6.0", "yt-search": "^2.10.3", @@ -202,9 +203,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "node_modules/@types/node": { - "version": "17.0.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", - "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" }, "node_modules/@types/node-fetch": { "version": "2.5.12", @@ -1012,6 +1013,19 @@ "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, + "node_modules/libsodium": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", + "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + }, + "node_modules/libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "dependencies": { + "libsodium": "^0.7.0" + } + }, "node_modules/logform": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", @@ -1584,9 +1598,9 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1898,9 +1912,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "17.0.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", - "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" }, "@types/node-fetch": { "version": "2.5.12", @@ -2581,6 +2595,19 @@ "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, + "libsodium": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", + "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" + }, + "libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", + "requires": { + "libsodium": "^0.7.0" + } + }, "logform": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", @@ -3023,9 +3050,9 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==" }, "universalify": { "version": "2.0.0", diff --git a/package.json b/package.json index 3faf0c7..cda9cea 100755 --- a/package.json +++ b/package.json @@ -12,17 +12,18 @@ "dependencies": { "@discordjs/opus": "github:discordjs/opus", "@discordjs/voice": "^0.8.0", - "@types/node": "^17.0.18", + "@types/node": "^17.0.21", "bufferutil": "^4.0.6", "discord-bot-quickstart": "github:spectral369/Discord-Bot-Quickstart#v0.0.154", "discord-command-parser": "^1.5.3", "discord.js": "^13.6.0", "fluent-ffmpeg": "^2.1.2", "jsonfile": "^6.1.0", + "libsodium-wrappers": "^0.7.9", "minimist": "^1.2.5", "moment": "^2.29.1", "sodium": "^3.0.2", - "typescript": "^4.5.4", + "typescript": "^4.6.2", "utf-8-validate": "^5.0.8", "winston": "^3.6.0", "yt-search": "^2.10.3", @@ -30,4 +31,4 @@ "ytpl": "^2.2.3", "zlib-sync": "^0.1.7" } -} \ No newline at end of file +} From 78db6d96359561f8ff122eff5589f7e56decbce2 Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 12 Mar 2022 11:27:11 +0200 Subject: [PATCH 22/23] dependecies update --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 8 ++++---- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1eaff78..998efab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "2.1.6", "license": "ISC", "dependencies": { - "@discordjs/opus": "github:discordjs/opus", + "@discordjs/opus": "^0.7.0", "@discordjs/voice": "^0.8.0", "@types/node": "^17.0.21", "bufferutil": "^4.0.6", @@ -26,8 +26,8 @@ "utf-8-validate": "^5.0.8", "winston": "^3.6.0", "yt-search": "^2.10.3", - "ytdl-core": "^4.10.1", - "ytpl": "^2.2.3", + "ytdl-core": "^4.11.0", + "ytpl": "^2.3.0", "zlib-sync": "^0.1.7" } }, @@ -1751,24 +1751,24 @@ } }, "node_modules/ytdl-core": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.10.1.tgz", - "integrity": "sha512-idBhW+e7HCzs5fR5cqp7Ci+mJhEch41YAaWabYlneQFCL6IGf6Hycv99yVx01Zl1Ci0t/70faOelMSrXaQTE/A==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.11.0.tgz", + "integrity": "sha512-Q3hCLiUA9AOGQXzPvno14GN+HgF9wsO1ZBHlj0COTcyxjIyFpWvMfii0UC4/cAbVaIjEdbWB71GdcGuc4J1Lmw==", "dependencies": { "m3u8stream": "^0.8.6", - "miniget": "^4.0.0", + "miniget": "^4.2.2", "sax": "^1.1.3" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/ytpl": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.2.3.tgz", - "integrity": "sha512-d18HibT8wzEWzWsXFS6u6kUKCCFL20roFVwpjyGCzl+nP8sOAz5xSLafxLflkkoeXJU8AFuO7BEsJXIREASvFQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.3.0.tgz", + "integrity": "sha512-Cfw2rxq3PFK6qgWr2Z8gsRefVahEzbn9XEuiJldqdXHE6GhO7kTfEvbZKdfXing1SmgW635uJ/UL2g8r0fvu2Q==", "dependencies": { - "miniget": "^4.2.1" + "miniget": "^4.2.2" }, "engines": { "node": ">=8" @@ -1843,7 +1843,7 @@ }, "@discordjs/opus": { "version": "git+ssh://git@github.com/discordjs/opus.git#fbd68eeca7637559bf3141b0ae76d48873b8d18a", - "from": "@discordjs/opus@github:discordjs/opus", + "from": "@discordjs/opus@^0.7.0", "requires": { "@discordjs/node-pre-gyp": "^0.4.2", "node-addon-api": "^4.2.0" @@ -3161,21 +3161,21 @@ } }, "ytdl-core": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.10.1.tgz", - "integrity": "sha512-idBhW+e7HCzs5fR5cqp7Ci+mJhEch41YAaWabYlneQFCL6IGf6Hycv99yVx01Zl1Ci0t/70faOelMSrXaQTE/A==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.11.0.tgz", + "integrity": "sha512-Q3hCLiUA9AOGQXzPvno14GN+HgF9wsO1ZBHlj0COTcyxjIyFpWvMfii0UC4/cAbVaIjEdbWB71GdcGuc4J1Lmw==", "requires": { "m3u8stream": "^0.8.6", - "miniget": "^4.0.0", + "miniget": "^4.2.2", "sax": "^1.1.3" } }, "ytpl": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.2.3.tgz", - "integrity": "sha512-d18HibT8wzEWzWsXFS6u6kUKCCFL20roFVwpjyGCzl+nP8sOAz5xSLafxLflkkoeXJU8AFuO7BEsJXIREASvFQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.3.0.tgz", + "integrity": "sha512-Cfw2rxq3PFK6qgWr2Z8gsRefVahEzbn9XEuiJldqdXHE6GhO7kTfEvbZKdfXing1SmgW635uJ/UL2g8r0fvu2Q==", "requires": { - "miniget": "^4.2.1" + "miniget": "^4.2.2" } }, "zlib-sync": { diff --git a/package.json b/package.json index cda9cea..3725e30 100755 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "author": "Malexion, spectral369", "license": "ISC", "dependencies": { - "@discordjs/opus": "github:discordjs/opus", + "@discordjs/opus": "^0.7.0", "@discordjs/voice": "^0.8.0", "@types/node": "^17.0.21", "bufferutil": "^4.0.6", @@ -27,8 +27,8 @@ "utf-8-validate": "^5.0.8", "winston": "^3.6.0", "yt-search": "^2.10.3", - "ytdl-core": "^4.10.1", - "ytpl": "^2.2.3", + "ytdl-core": "^4.11.0", + "ytpl": "^2.3.0", "zlib-sync": "^0.1.7" } -} +} \ No newline at end of file From a0dd668ad7ead215a1b3205afa8de8b83642e2cc Mon Sep 17 00:00:00 2001 From: spectral369 Date: Sat, 12 Mar 2022 11:36:15 +0200 Subject: [PATCH 23/23] fix depricated package --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 998efab..61712a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "moment": "^2.29.1", "sodium": "^3.0.2", "typescript": "^4.6.2", - "utf-8-validate": "^5.0.8", + "utf-8-validate": "^5.0.9", "winston": "^3.6.0", "yt-search": "^2.10.3", "ytdl-core": "^4.11.0", @@ -1618,9 +1618,9 @@ } }, "node_modules/utf-8-validate": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", - "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -3060,9 +3060,9 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "utf-8-validate": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", - "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", "requires": { "node-gyp-build": "^4.3.0" } diff --git a/package.json b/package.json index 3725e30..3a6f59e 100755 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "moment": "^2.29.1", "sodium": "^3.0.2", "typescript": "^4.6.2", - "utf-8-validate": "^5.0.8", + "utf-8-validate": "^5.0.9", "winston": "^3.6.0", "yt-search": "^2.10.3", "ytdl-core": "^4.11.0",