浏览代码

Add bot list widgets and other fixes

Markus-Rost 4 年之前
父节点
当前提交
b657b49fea
共有 10 个文件被更改,包括 253 次插入183 次删除
  1. 11 5
      README.md
  2. 3 1
      cmds/test.js
  3. 2 2
      cmds/verify.js
  4. 3 1
      dashboard/guilds.js
  5. 4 0
      dashboard/i18n/en.json
  6. 2 1
      dashboard/oauth.js
  7. 7 0
      dashboard/src/index.css
  8. 61 1
      dashboard/util.js
  9. 2 2
      functions/global_block.js
  10. 158 170
      package-lock.json

+ 11 - 5
README.md

@@ -3,7 +3,7 @@
 
 
 **Wiki-Bot** is a bot for [Discord](https://discord.com/) with the purpose to easily link and search [MediaWiki](https://www.mediawiki.org/wiki/MediaWiki) sites like [Wikipedia](https://www.wikipedia.org/) and [Fandom](https://www.fandom.com/) wikis. **Wiki-Bot** shows short descriptions and additional info about pages and is able to resolve redirects and follow interwiki links.
 **Wiki-Bot** is a bot for [Discord](https://discord.com/) with the purpose to easily link and search [MediaWiki](https://www.mediawiki.org/wiki/MediaWiki) sites like [Wikipedia](https://www.wikipedia.org/) and [Fandom](https://www.fandom.com/) wikis. **Wiki-Bot** shows short descriptions and additional info about pages and is able to resolve redirects and follow interwiki links.
 
 
-**Wiki-Bot** has translations for English, Bengali, German, French, Hindi, Dutch, Polish, Portuguese, Russian, Turkish and Chinese.
+**Wiki-Bot** has translations for Bengali, German, English, Spanish, French, Hindi, Korean, Dutch, Polish, Brazilian Portuguese, Russian, Turkish, Simplified Chinese and Traditional Chinese.
 
 
 [Use this link to invite **Wiki-Bot** to your Discord server.](https://discord.com/oauth2/authorize?client_id=461189216198590464&permissions=939904064&scope=bot%20applications.commands)
 [Use this link to invite **Wiki-Bot** to your Discord server.](https://discord.com/oauth2/authorize?client_id=461189216198590464&permissions=939904064&scope=bot%20applications.commands)
 
 
@@ -94,10 +94,16 @@ Use `!wiki voice` to get the format for the role name.
 [<img src="https://translate.wikibot.de/widgets/wiki-bot/-/multi-auto.svg" alt="Translation status" width="100%" />](https://translate.wikibot.de/engage/wiki-bot/?utm_source=widget)
 [<img src="https://translate.wikibot.de/widgets/wiki-bot/-/multi-auto.svg" alt="Translation status" width="100%" />](https://translate.wikibot.de/engage/wiki-bot/?utm_source=widget)
 
 
 ## Bot Lists
 ## Bot Lists
-[![Wiki-Bot](https://bots.ondiscord.xyz/bots/461189216198590464/embed?theme=dark&showGuilds=true)](https://bots.ondiscord.xyz/bots/461189216198590464)
-[![Wiki-Bot](https://botsfordiscord.com/api/bot/461189216198590464/widget?theme=dark)](https://botsfordiscord.com/bot/461189216198590464)
-[![Wiki-Bot](https://discord.boats/api/widget/461189216198590464)](https://discord.boats/bot/461189216198590464)
-[![Wiki-Bot](https://top.gg/api/widget/461189216198590464.svg)](https://top.gg/bot/461189216198590464)
+Help other users find Wiki-Bot by voting on bot lists:
+
+[<img src="https://blist.xyz/api/v2/bot/461189216198590464/widget" alt="blist.xyz" height="150px" />](https://blist.xyz/bot/461189216198590464)
+[<img src="https://botlists.com/bot/461189216198590464/widget" alt="botlists.com" height="150px" />](https://botlists.com/bot/461189216198590464)
+[<img src="https://bots.ondiscord.xyz/bots/461189216198590464/embed?theme=dark&showGuilds=true" alt="bots.ondiscord.xyz" height="150px" />](https://bots.ondiscord.xyz/bots/461189216198590464)
+[<img src="https://botsfordiscord.com/api/bot/461189216198590464/widget?theme=dark" alt="botsfordiscord.com" height="150px" />](https://botsfordiscord.com/bots/461189216198590464)
+[<img src="https://discord.boats/api/widget/461189216198590464" alt="discord.boats" height="150px" />](https://discord.boats/bot/461189216198590464)
+[<img src="https://infinitybotlist.com/bots/461189216198590464/widget?size=medium" alt="infinitybotlist.com" height="150px" />](https://infinitybotlist.com/bots/461189216198590464)
+[<img src="https://top.gg/api/widget/461189216198590464.svg" alt="top.gg" height="150px" />](https://top.gg/bot/461189216198590464)
+[<img src="https://voidbots.net/api/embed/461189216198590464?theme=dark" alt="voidbots.net" height="150px" />](https://voidbots.net/bot/461189216198590464)
 
 
 ## Other
 ## Other
 Credits to [Encredechine](https://community.fandom.com/wiki/User:Encredechine) for the **Wiki-Bot** logo.
 Credits to [Encredechine](https://community.fandom.com/wiki/User:Encredechine) for the **Wiki-Bot** logo.

+ 3 - 1
cmds/test.js

@@ -38,7 +38,9 @@ function cmd_test(lang, msg, args, line, wiki) {
 			var then = Date.now();
 			var then = Date.now();
 			var embed = new MessageEmbed().setTitle( lang.get('test.time') ).setFooter( 'Shard: ' + global.shardId ).addField( 'Discord', ( then - now ).toLocaleString(lang.get('dateformat')) + 'ms' );
 			var embed = new MessageEmbed().setTitle( lang.get('test.time') ).setFooter( 'Shard: ' + global.shardId ).addField( 'Discord', ( then - now ).toLocaleString(lang.get('dateformat')) + 'ms' );
 			now = Date.now();
 			now = Date.now();
-			got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general|extensions&format=json' ).then( response => {
+			got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general|extensions&format=json', {
+				timeout: 10000
+			} ).then( response => {
 				then = Date.now();
 				then = Date.now();
 				var body = response.body;
 				var body = response.body;
 				if ( body && body.warnings ) log_warn(body.warnings);
 				if ( body && body.warnings ) log_warn(body.warnings);

+ 2 - 2
cmds/verify.js

@@ -106,7 +106,7 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 			}
 			}
 			
 			
 			var comment = [];
 			var comment = [];
-			if ( wiki.isFandom() ) return got.get( 'https://ucp.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1&cache=' + Date.now(), {
+			if ( wiki.isFandom() ) return got.get( 'https://community.fandom.com/wiki/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1&cache=' + Date.now(), {
 				responseType: 'text'
 				responseType: 'text'
 			} ).then( gbresponse => {
 			} ).then( gbresponse => {
 				if ( gbresponse.statusCode !== 200 || !gbresponse.body ) {
 				if ( gbresponse.statusCode !== 200 || !gbresponse.body ) {
@@ -121,7 +121,7 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 							reply: lang.get('verify.user_disabled_reply', username.escapeFormatting())
 							reply: lang.get('verify.user_disabled_reply', username.escapeFormatting())
 						});
 						});
 					}
 					}
-					else if ( $('script').eq(1).html().includes( '"isBlockedInPhalanx":true' ) ) {
+					else if ( $('#mw-content-text .userprofile.mw-warning-with-logexcerpt').length ) {
 						return Promise.reject({
 						return Promise.reject({
 							desc: lang.get('verify.user_gblocked', '[' + username.escapeFormatting() + '](' + pagelink + ')', queryuser.gender),
 							desc: lang.get('verify.user_gblocked', '[' + username.escapeFormatting() + '](' + pagelink + ')', queryuser.gender),
 							reply: lang.get('verify.user_gblocked_reply', username.escapeFormatting(), queryuser.gender)
 							reply: lang.get('verify.user_gblocked_reply', username.escapeFormatting(), queryuser.gender)

+ 3 - 1
dashboard/guilds.js

@@ -2,7 +2,7 @@ const cheerio = require('cheerio');
 const {defaultPermissions} = require('../util/default.json');
 const {defaultPermissions} = require('../util/default.json');
 const Lang = require('./i18n.js');
 const Lang = require('./i18n.js');
 const allLangs = Lang.allLangs().names;
 const allLangs = Lang.allLangs().names;
-const {settingsData, createNotice} = require('./util.js');
+const {settingsData, addWidgets, createNotice} = require('./util.js');
 
 
 const forms = {
 const forms = {
 	settings: require('./settings.js').get,
 	settings: require('./settings.js').get,
@@ -137,6 +137,7 @@ function dashboard_guilds(res, dashboardLang, theme, state, reqURL, action, acti
 				$('<img alt="Discord">').attr('src', 'https://discord.com/assets/f8389ca1a741a115313bede9ac02e2c0.svg')
 				$('<img alt="Discord">').attr('src', 'https://discord.com/assets/f8389ca1a741a115313bede9ac02e2c0.svg')
 			)
 			)
 		);
 		);
+		addWidgets($, dashboardLang);
 	}
 	}
 	else if ( args[0] === 'owner' ) {
 	else if ( args[0] === 'owner' ) {
 		let guild = {
 		let guild = {
@@ -210,6 +211,7 @@ function dashboard_guilds(res, dashboardLang, theme, state, reqURL, action, acti
 				)
 				)
 			);
 			);
 		}
 		}
+		addWidgets($, dashboardLang);
 	}
 	}
 	let body = $.html();
 	let body = $.html();
 	res.writeHead(200, {'Content-Length': Buffer.byteLength(body)});
 	res.writeHead(200, {'Content-Length': Buffer.byteLength(body)});

+ 4 - 0
dashboard/i18n/en.json

@@ -7,6 +7,10 @@
         " "
         " "
     ],
     ],
     "general": {
     "general": {
+        "botlist": {
+            "text": "Help other users find Wiki-Bot by voting on bot lists:",
+            "title": "Bot Lists"
+        },
         "delete": "Delete",
         "delete": "Delete",
         "invite": "Invite Wiki-Bot",
         "invite": "Invite Wiki-Bot",
         "language": "Change Language",
         "language": "Change Language",

+ 2 - 1
dashboard/oauth.js

@@ -3,7 +3,7 @@ const cheerio = require('cheerio');
 const {defaultPermissions} = require('../util/default.json');
 const {defaultPermissions} = require('../util/default.json');
 const Wiki = require('../util/wiki.js');
 const Wiki = require('../util/wiki.js');
 const allLangs = require('./i18n.js').allLangs().names;
 const allLangs = require('./i18n.js').allLangs().names;
-const {got, settingsData, sendMsg, createNotice, hasPerm} = require('./util.js');
+const {got, settingsData, sendMsg, addWidgets, createNotice, hasPerm} = require('./util.js');
 
 
 const DiscordOauth2 = require('discord-oauth2');
 const DiscordOauth2 = require('discord-oauth2');
 const oauth = new DiscordOauth2( {
 const oauth = new DiscordOauth2( {
@@ -68,6 +68,7 @@ function dashboard_login(res, dashboardLang, theme, state, action) {
 		prompt, state
 		prompt, state
 	} );
 	} );
 	$('.channel#login, #login-button').attr('href', url);
 	$('.channel#login, #login-button').attr('href', url);
+	addWidgets($, dashboardLang);
 	let body = $.html();
 	let body = $.html();
 	res.writeHead(responseCode, {
 	res.writeHead(responseCode, {
 		'Set-Cookie': [
 		'Set-Cookie': [

+ 7 - 0
dashboard/src/index.css

@@ -376,6 +376,13 @@ code {
 	-ms-user-select: all;
 	-ms-user-select: all;
 	user-select: all;
 	user-select: all;
 }
 }
+.widgets {
+	margin-top: 250px;
+}
+.widgets img {
+	height: 150px;
+	max-width: 100%;
+}
 .notice {
 .notice {
 	padding: 5px 10px;
 	padding: 5px 10px;
 	line-height: 1.6;
 	line-height: 1.6;

+ 61 - 1
dashboard/util.js

@@ -96,6 +96,66 @@ function sendMsg(message) {
 	} );
 	} );
 	return promise;
 	return promise;
 }
 }
+var botLists = [];
+if ( process.env.botlist ) {
+	let supportedLists = {
+		'blist.xyz': {
+			link: 'https://blist.xyz/bot/' + process.env.bot,
+			widget: 'https://blist.xyz/api/v2/bot/' + process.env.bot + '/widget'
+		},
+		'botlists.com': {
+			link: 'https://botlists.com/bot/' + process.env.bot,
+			widget: 'https://botlists.com/bot/' + process.env.bot + '/widget'
+		},
+		'bots.ondiscord.xyz': {
+			link: 'https://bots.ondiscord.xyz/bots/' + process.env.bot,
+			widget: 'https://bots.ondiscord.xyz/bots/' + process.env.bot + '/embed?theme=dark&showGuilds=true'
+		},
+		'botsfordiscord.com': {
+			link: 'https://botsfordiscord.com/bots/' + process.env.bot,
+			widget: 'https://botsfordiscord.com/api/bot/' + process.env.bot + '/widget?theme=dark'
+		},
+		'discord.boats': {
+			link: 'https://discord.boats/bot/' + process.env.bot,
+			widget: 'https://discord.boats/api/widget/' + process.env.bot
+		},
+		'infinitybotlist.com': {
+			link: 'https://infinitybotlist.com/bots/' + process.env.bot,
+			widget: 'https://infinitybotlist.com/bots/' + process.env.bot + '/widget?size=medium'
+		},
+		'top.gg': {
+			link: 'https://top.gg/bot/' + process.env.bot,
+			widget: 'https://top.gg/api/widget/' + process.env.bot + '.svg'
+		},
+		'voidbots.net': {
+			link: 'https://voidbots.net/bot/' + process.env.bot,
+			widget: 'https://voidbots.net/api/embed/' + process.env.bot + '?theme=dark'
+		}
+	};
+
+	botLists = Object.keys(JSON.parse(process.env.botlist)).filter( botList => {
+		return supportedLists.hasOwnProperty(botList);
+	} ).map( botList => {
+		return `<a href="${supportedLists[botList].link}" target="_blank">
+			<img src="${supportedLists[botList].widget}" alt="${botList}" height="150px" loading="lazy" />
+		</a>`;
+	} );
+}
+
+/**
+ * Add bot list widgets.
+ * @param {import('cheerio')} $ - The cheerio static
+ * @param {import('./i18n.js')} dashboardLang - The user language
+ * @returns {import('cheerio')}
+*/
+function addWidgets($, dashboardLang) {
+	if ( !botLists.length ) return;
+	return $('<div class="widgets">').append(
+		$('<h3 id="bot-lists">').text(dashboardLang.get('general.botlist.title')),
+		$('<p>').text(dashboardLang.get('general.botlist.text')),
+		...botLists
+	).appendTo('#text');
+}
 
 
 /**
 /**
  * Create a red notice
  * Create a red notice
@@ -261,4 +321,4 @@ function hasPerm(all = 0, ...permission) {
 	} ).every( perm => perm );
 	} ).every( perm => perm );
 }
 }
 
 
-module.exports = {got, db, settingsData, sendMsg, createNotice, escapeText, hasPerm};
+module.exports = {got, db, settingsData, sendMsg, addWidgets, createNotice, escapeText, hasPerm};

+ 2 - 2
functions/global_block.js

@@ -28,7 +28,7 @@ function global_block(lang, msg, username, text, embed, wiki, spoiler, gender) {
 	}
 	}
 	
 	
 	Promise.all([
 	Promise.all([
-		got.get( 'https://ucp.fandom.com/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1', {
+		got.get( 'https://community.fandom.com/wiki/Special:Contributions/' + encodeURIComponent( username ) + '?limit=1', {
 			responseType: 'text'
 			responseType: 'text'
 		} ).then( response => {
 		} ).then( response => {
 			var body = response.body;
 			var body = response.body;
@@ -41,7 +41,7 @@ function global_block(lang, msg, username, text, embed, wiki, spoiler, gender) {
 					if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.disabled') + '**' );
 					if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.disabled') + '**' );
 					else text += '\n\n**' + lang.get('user.gblock.disabled') + '**';
 					else text += '\n\n**' + lang.get('user.gblock.disabled') + '**';
 				}
 				}
-				else if ( $('head script').eq(1).html().includes( '"isBlockedInPhalanx":true' ) ) {
+				else if ( $('#mw-content-text .userprofile.mw-warning-with-logexcerpt').length ) {
 					if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**' );
 					if ( msg.showEmbed() ) embed.addField( '\u200b', '**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**' );
 					else text += '\n\n**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**';
 					else text += '\n\n**' + lang.get('user.gblock.header', username, gender).escapeFormatting() + '**';
 				}
 				}

+ 158 - 170
package-lock.json

@@ -87,9 +87,9 @@
       }
       }
     },
     },
     "node_modules/@types/node": {
     "node_modules/@types/node": {
-      "version": "14.14.35",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz",
-      "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag=="
+      "version": "14.14.37",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz",
+      "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw=="
     },
     },
     "node_modules/@types/responselike": {
     "node_modules/@types/responselike": {
       "version": "1.0.0",
       "version": "1.0.0",
@@ -278,18 +278,18 @@
       "integrity": "sha512-9lEt1Rp9rruFPiVQOPbe2rKJXB40fO2u9Ozjz3n/TlVYnIxCTeohVkNI/c5AoLFDZcSxFc2MtDTf9iG0X7BkRg=="
       "integrity": "sha512-9lEt1Rp9rruFPiVQOPbe2rKJXB40fO2u9Ozjz3n/TlVYnIxCTeohVkNI/c5AoLFDZcSxFc2MtDTf9iG0X7BkRg=="
     },
     },
     "node_modules/discord.js": {
     "node_modules/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": "12.5.3",
+      "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz",
+      "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==",
       "dependencies": {
       "dependencies": {
         "@discordjs/collection": "^0.1.6",
         "@discordjs/collection": "^0.1.6",
         "@discordjs/form-data": "^3.0.1",
         "@discordjs/form-data": "^3.0.1",
         "abort-controller": "^3.0.0",
         "abort-controller": "^3.0.0",
         "node-fetch": "^2.6.1",
         "node-fetch": "^2.6.1",
-        "prism-media": "^1.2.2",
+        "prism-media": "^1.2.9",
         "setimmediate": "^1.0.5",
         "setimmediate": "^1.0.5",
         "tweetnacl": "^1.0.3",
         "tweetnacl": "^1.0.3",
-        "ws": "^7.3.1"
+        "ws": "^7.4.4"
       },
       },
       "engines": {
       "engines": {
         "node": ">=12.0.0"
         "node": ">=12.0.0"
@@ -309,9 +309,9 @@
       }
       }
     },
     },
     "node_modules/domelementtype": {
     "node_modules/domelementtype": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
-      "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+      "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
       "funding": [
       "funding": [
         {
         {
           "type": "github",
           "type": "github",
@@ -320,11 +320,11 @@
       ]
       ]
     },
     },
     "node_modules/domhandler": {
     "node_modules/domhandler": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
-      "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.1.0.tgz",
+      "integrity": "sha512-/6/kmsGlMY4Tup/nGVutdrK9yQi4YjWVcVeoQmixpzjOUK1U7pQkvAPHBJeUxOgxF0J8f8lwCJSlCfD0V4CMGQ==",
       "dependencies": {
       "dependencies": {
-        "domelementtype": "^2.1.0"
+        "domelementtype": "^2.2.0"
       },
       },
       "engines": {
       "engines": {
         "node": ">= 4"
         "node": ">= 4"
@@ -334,13 +334,13 @@
       }
       }
     },
     },
     "node_modules/domutils": {
     "node_modules/domutils": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz",
-      "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==",
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.1.tgz",
+      "integrity": "sha512-hO1XwHMGAthA/1KL7c83oip/6UWo3FlUNIuWiWKltoiQ5oCOiqths8KknvY2jpOohUoUgnwa/+Rm7UpwpSbY/Q==",
       "dependencies": {
       "dependencies": {
         "dom-serializer": "^1.0.1",
         "dom-serializer": "^1.0.1",
-        "domelementtype": "^2.0.1",
-        "domhandler": "^4.0.0"
+        "domelementtype": "^2.2.0",
+        "domhandler": "^4.1.0"
       },
       },
       "funding": {
       "funding": {
         "url": "https://github.com/fb55/domutils?sponsor=1"
         "url": "https://github.com/fb55/domutils?sponsor=1"
@@ -379,9 +379,9 @@
       }
       }
     },
     },
     "node_modules/full-icu": {
     "node_modules/full-icu": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/full-icu/-/full-icu-1.3.1.tgz",
-      "integrity": "sha512-VMtK//85QJomhk3cXOCksNwOYaw1KWnYTS37GYGgyf7A3ajdBoPGhaJuJWAH2S2kq8GZeXkdKn+3Mfmgy11cVw==",
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/full-icu/-/full-icu-1.3.4.tgz",
+      "integrity": "sha512-BERy9j2ybYSfP8QmXyg496NjVrGXfM73TZckQ5s5hgDV2lpKshjGfPEYYWU3hhE2kU8atZXUZNLSeNz4OQ8hNA==",
       "hasInstallScript": true,
       "hasInstallScript": true,
       "bin": {
       "bin": {
         "node-full-icu-path": "node-icu-data.js"
         "node-full-icu-path": "node-icu-data.js"
@@ -487,19 +487,19 @@
       }
       }
     },
     },
     "node_modules/mime-db": {
     "node_modules/mime-db": {
-      "version": "1.46.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
-      "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
+      "version": "1.47.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
+      "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
       "engines": {
       "engines": {
         "node": ">= 0.6"
         "node": ">= 0.6"
       }
       }
     },
     },
     "node_modules/mime-types": {
     "node_modules/mime-types": {
-      "version": "2.1.29",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
-      "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+      "version": "2.1.30",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
+      "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
       "dependencies": {
       "dependencies": {
-        "mime-db": "1.46.0"
+        "mime-db": "1.47.0"
       },
       },
       "engines": {
       "engines": {
         "node": ">= 0.6"
         "node": ">= 0.6"
@@ -530,9 +530,9 @@
       }
       }
     },
     },
     "node_modules/npm": {
     "node_modules/npm": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/npm/-/npm-7.6.3.tgz",
-      "integrity": "sha512-+Cs8TEtkfdQGTIPw8AeqVtNNHyo1Zw8HATzAFFWYnK7jQYgT/CatEy85+BlEoEpqvga2uaKqVrXsTAYj28emjg==",
+      "version": "7.8.0",
+      "resolved": "https://registry.npmjs.org/npm/-/npm-7.8.0.tgz",
+      "integrity": "sha512-9AC3Dj9OUWaUdmTmEVttE/1MWkfF7+sAKPRo9tKEyjo49AXmHQBn+RC33M9dima91mEMqDIA71xyRm4VmhDipg==",
       "bundleDependencies": [
       "bundleDependencies": [
         "@npmcli/arborist",
         "@npmcli/arborist",
         "@npmcli/ci-detect",
         "@npmcli/ci-detect",
@@ -602,16 +602,16 @@
         "write-file-atomic"
         "write-file-atomic"
       ],
       ],
       "dependencies": {
       "dependencies": {
-        "@npmcli/arborist": "^2.2.8",
+        "@npmcli/arborist": "^2.3.0",
         "@npmcli/ci-detect": "^1.2.0",
         "@npmcli/ci-detect": "^1.2.0",
-        "@npmcli/config": "^1.2.9",
-        "@npmcli/run-script": "^1.8.3",
+        "@npmcli/config": "^2.1.0",
+        "@npmcli/run-script": "^1.8.4",
         "abbrev": "~1.1.1",
         "abbrev": "~1.1.1",
         "ansicolors": "~0.3.2",
         "ansicolors": "~0.3.2",
         "ansistyles": "~0.1.3",
         "ansistyles": "~0.1.3",
         "archy": "~1.0.0",
         "archy": "~1.0.0",
         "byte-size": "^7.0.1",
         "byte-size": "^7.0.1",
-        "cacache": "^15.0.5",
+        "cacache": "^15.0.6",
         "chalk": "^4.1.0",
         "chalk": "^4.1.0",
         "chownr": "^2.0.0",
         "chownr": "^2.0.0",
         "cli-columns": "^3.1.2",
         "cli-columns": "^3.1.2",
@@ -619,7 +619,7 @@
         "columnify": "~1.5.4",
         "columnify": "~1.5.4",
         "glob": "^7.1.4",
         "glob": "^7.1.4",
         "graceful-fs": "^4.2.6",
         "graceful-fs": "^4.2.6",
-        "hosted-git-info": "^3.0.8",
+        "hosted-git-info": "^4.0.2",
         "ini": "^2.0.0",
         "ini": "^2.0.0",
         "init-package-json": "^2.0.2",
         "init-package-json": "^2.0.2",
         "is-cidr": "^4.0.2",
         "is-cidr": "^4.0.2",
@@ -634,7 +634,7 @@
         "libnpmpublish": "^4.0.0",
         "libnpmpublish": "^4.0.0",
         "libnpmsearch": "^3.1.0",
         "libnpmsearch": "^3.1.0",
         "libnpmteam": "^2.0.2",
         "libnpmteam": "^2.0.2",
-        "libnpmversion": "^1.0.11",
+        "libnpmversion": "^1.1.0",
         "make-fetch-happen": "^8.0.14",
         "make-fetch-happen": "^8.0.14",
         "minipass": "^3.1.3",
         "minipass": "^3.1.3",
         "minipass-pipeline": "^1.2.4",
         "minipass-pipeline": "^1.2.4",
@@ -644,14 +644,14 @@
         "node-gyp": "^7.1.2",
         "node-gyp": "^7.1.2",
         "nopt": "^5.0.0",
         "nopt": "^5.0.0",
         "npm-audit-report": "^2.1.4",
         "npm-audit-report": "^2.1.4",
-        "npm-package-arg": "^8.1.1",
-        "npm-pick-manifest": "^6.1.0",
+        "npm-package-arg": "^8.1.2",
+        "npm-pick-manifest": "^6.1.1",
         "npm-profile": "^5.0.2",
         "npm-profile": "^5.0.2",
         "npm-registry-fetch": "^9.0.0",
         "npm-registry-fetch": "^9.0.0",
         "npm-user-validate": "^1.0.1",
         "npm-user-validate": "^1.0.1",
         "npmlog": "~4.1.2",
         "npmlog": "~4.1.2",
         "opener": "^1.5.2",
         "opener": "^1.5.2",
-        "pacote": "^11.3.0",
+        "pacote": "^11.3.1",
         "parse-conflict-json": "^1.1.1",
         "parse-conflict-json": "^1.1.1",
         "qrcode-terminal": "^0.12.0",
         "qrcode-terminal": "^0.12.0",
         "read": "~1.0.7",
         "read": "~1.0.7",
@@ -659,7 +659,7 @@
         "read-package-json-fast": "^2.0.2",
         "read-package-json-fast": "^2.0.2",
         "readdir-scoped-modules": "^1.1.0",
         "readdir-scoped-modules": "^1.1.0",
         "rimraf": "^3.0.2",
         "rimraf": "^3.0.2",
-        "semver": "^7.3.4",
+        "semver": "^7.3.5",
         "ssri": "^8.0.1",
         "ssri": "^8.0.1",
         "tar": "^6.1.0",
         "tar": "^6.1.0",
         "text-table": "~0.2.0",
         "text-table": "~0.2.0",
@@ -678,7 +678,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/@npmcli/arborist": {
     "node_modules/npm/node_modules/@npmcli/arborist": {
-      "version": "2.2.8",
+      "version": "2.3.0",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -693,7 +693,7 @@
         "cacache": "^15.0.3",
         "cacache": "^15.0.3",
         "common-ancestor-path": "^1.0.1",
         "common-ancestor-path": "^1.0.1",
         "json-parse-even-better-errors": "^2.3.1",
         "json-parse-even-better-errors": "^2.3.1",
-        "json-stringify-nice": "^1.1.1",
+        "json-stringify-nice": "^1.1.2",
         "mkdirp-infer-owner": "^2.0.0",
         "mkdirp-infer-owner": "^2.0.0",
         "npm-install-checks": "^4.0.0",
         "npm-install-checks": "^4.0.0",
         "npm-package-arg": "^8.1.0",
         "npm-package-arg": "^8.1.0",
@@ -705,7 +705,7 @@
         "promise-call-limit": "^1.0.1",
         "promise-call-limit": "^1.0.1",
         "read-package-json-fast": "^2.0.2",
         "read-package-json-fast": "^2.0.2",
         "readdir-scoped-modules": "^1.1.0",
         "readdir-scoped-modules": "^1.1.0",
-        "semver": "^7.3.4",
+        "semver": "^7.3.5",
         "tar": "^6.1.0",
         "tar": "^6.1.0",
         "treeverse": "^1.0.4",
         "treeverse": "^1.0.4",
         "walk-up-path": "^1.0.0"
         "walk-up-path": "^1.0.0"
@@ -720,7 +720,7 @@
       "license": "ISC"
       "license": "ISC"
     },
     },
     "node_modules/npm/node_modules/@npmcli/config": {
     "node_modules/npm/node_modules/@npmcli/config": {
-      "version": "1.2.9",
+      "version": "2.1.0",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -791,7 +791,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
     "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
-      "version": "1.1.0",
+      "version": "1.1.1",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -831,7 +831,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/@npmcli/run-script": {
     "node_modules/npm/node_modules/@npmcli/run-script": {
-      "version": "1.8.3",
+      "version": "1.8.4",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -839,7 +839,6 @@
         "@npmcli/promise-spawn": "^1.3.2",
         "@npmcli/promise-spawn": "^1.3.2",
         "infer-owner": "^1.0.4",
         "infer-owner": "^1.0.4",
         "node-gyp": "^7.1.0",
         "node-gyp": "^7.1.0",
-        "puka": "^1.0.1",
         "read-package-json-fast": "^2.0.1"
         "read-package-json-fast": "^2.0.1"
       }
       }
     },
     },
@@ -1057,7 +1056,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/cacache": {
     "node_modules/npm/node_modules/cacache": {
-      "version": "15.0.5",
+      "version": "15.0.6",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -1075,7 +1074,7 @@
         "p-map": "^4.0.0",
         "p-map": "^4.0.0",
         "promise-inflight": "^1.0.1",
         "promise-inflight": "^1.0.1",
         "rimraf": "^3.0.2",
         "rimraf": "^3.0.2",
-        "ssri": "^8.0.0",
+        "ssri": "^8.0.1",
         "tar": "^6.0.2",
         "tar": "^6.0.2",
         "unique-filename": "^1.1.1"
         "unique-filename": "^1.1.1"
       },
       },
@@ -1174,7 +1173,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/cli-table3/node_modules/string-width": {
     "node_modules/npm/node_modules/cli-table3/node_modules/string-width": {
-      "version": "4.2.0",
+      "version": "4.2.2",
       "inBundle": true,
       "inBundle": true,
       "license": "MIT",
       "license": "MIT",
       "dependencies": {
       "dependencies": {
@@ -1399,7 +1398,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/env-paths": {
     "node_modules/npm/node_modules/env-paths": {
-      "version": "2.2.0",
+      "version": "2.2.1",
       "inBundle": true,
       "inBundle": true,
       "license": "MIT",
       "license": "MIT",
       "engines": {
       "engines": {
@@ -1597,7 +1596,7 @@
       "license": "ISC"
       "license": "ISC"
     },
     },
     "node_modules/npm/node_modules/hosted-git-info": {
     "node_modules/npm/node_modules/hosted-git-info": {
-      "version": "3.0.8",
+      "version": "4.0.2",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -1828,7 +1827,7 @@
       "license": "MIT"
       "license": "MIT"
     },
     },
     "node_modules/npm/node_modules/json-stringify-nice": {
     "node_modules/npm/node_modules/json-stringify-nice": {
-      "version": "1.1.1",
+      "version": "1.1.3",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "funding": {
       "funding": {
@@ -1996,13 +1995,13 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/libnpmversion": {
     "node_modules/npm/node_modules/libnpmversion": {
-      "version": "1.0.11",
+      "version": "1.1.0",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
         "@npmcli/git": "^2.0.6",
         "@npmcli/git": "^2.0.6",
         "@npmcli/run-script": "^1.8.3",
         "@npmcli/run-script": "^1.8.3",
-        "read-package-json-fast": "^2.0.1",
+        "json-parse-even-better-errors": "^2.3.1",
         "semver": "^7.3.4",
         "semver": "^7.3.4",
         "stringify-package": "^1.0.1"
         "stringify-package": "^1.0.1"
       }
       }
@@ -2044,7 +2043,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/mime-db": {
     "node_modules/npm/node_modules/mime-db": {
-      "version": "1.45.0",
+      "version": "1.46.0",
       "inBundle": true,
       "inBundle": true,
       "license": "MIT",
       "license": "MIT",
       "engines": {
       "engines": {
@@ -2052,11 +2051,11 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/mime-types": {
     "node_modules/npm/node_modules/mime-types": {
-      "version": "2.1.28",
+      "version": "2.1.29",
       "inBundle": true,
       "inBundle": true,
       "license": "MIT",
       "license": "MIT",
       "dependencies": {
       "dependencies": {
-        "mime-db": "1.45.0"
+        "mime-db": "1.46.0"
       },
       },
       "engines": {
       "engines": {
         "node": ">= 0.6"
         "node": ">= 0.6"
@@ -2237,13 +2236,13 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/normalize-package-data": {
     "node_modules/npm/node_modules/normalize-package-data": {
-      "version": "3.0.0",
+      "version": "3.0.2",
       "inBundle": true,
       "inBundle": true,
       "license": "BSD-2-Clause",
       "license": "BSD-2-Clause",
       "dependencies": {
       "dependencies": {
-        "hosted-git-info": "^3.0.6",
-        "resolve": "^1.17.0",
-        "semver": "^7.3.2",
+        "hosted-git-info": "^4.0.1",
+        "resolve": "^1.20.0",
+        "semver": "^7.3.4",
         "validate-npm-package-license": "^3.0.1"
         "validate-npm-package-license": "^3.0.1"
       },
       },
       "engines": {
       "engines": {
@@ -2286,12 +2285,12 @@
       "license": "ISC"
       "license": "ISC"
     },
     },
     "node_modules/npm/node_modules/npm-package-arg": {
     "node_modules/npm/node_modules/npm-package-arg": {
-      "version": "8.1.1",
+      "version": "8.1.2",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
-        "hosted-git-info": "^3.0.6",
-        "semver": "^7.0.0",
+        "hosted-git-info": "^4.0.1",
+        "semver": "^7.3.4",
         "validate-npm-package-name": "^3.0.0"
         "validate-npm-package-name": "^3.0.0"
       },
       },
       "engines": {
       "engines": {
@@ -2299,7 +2298,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/npm-packlist": {
     "node_modules/npm/node_modules/npm-packlist": {
-      "version": "2.1.4",
+      "version": "2.1.5",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -2316,13 +2315,14 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/npm-pick-manifest": {
     "node_modules/npm/node_modules/npm-pick-manifest": {
-      "version": "6.1.0",
+      "version": "6.1.1",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
         "npm-install-checks": "^4.0.0",
         "npm-install-checks": "^4.0.0",
-        "npm-package-arg": "^8.0.0",
-        "semver": "^7.0.0"
+        "npm-normalize-package-bin": "^1.0.1",
+        "npm-package-arg": "^8.1.2",
+        "semver": "^7.3.4"
       }
       }
     },
     },
     "node_modules/npm/node_modules/npm-profile": {
     "node_modules/npm/node_modules/npm-profile": {
@@ -2425,7 +2425,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/pacote": {
     "node_modules/npm/node_modules/pacote": {
-      "version": "11.3.0",
+      "version": "11.3.1",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -2535,14 +2535,6 @@
       "inBundle": true,
       "inBundle": true,
       "license": "MIT"
       "license": "MIT"
     },
     },
-    "node_modules/npm/node_modules/puka": {
-      "version": "1.0.1",
-      "inBundle": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/npm/node_modules/punycode": {
     "node_modules/npm/node_modules/punycode": {
       "version": "2.1.1",
       "version": "2.1.1",
       "inBundle": true,
       "inBundle": true,
@@ -2720,7 +2712,7 @@
       "license": "MIT"
       "license": "MIT"
     },
     },
     "node_modules/npm/node_modules/semver": {
     "node_modules/npm/node_modules/semver": {
-      "version": "7.3.4",
+      "version": "7.3.5",
       "inBundle": true,
       "inBundle": true,
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
@@ -2753,7 +2745,7 @@
       }
       }
     },
     },
     "node_modules/npm/node_modules/socks": {
     "node_modules/npm/node_modules/socks": {
-      "version": "2.5.1",
+      "version": "2.6.0",
       "inBundle": true,
       "inBundle": true,
       "license": "MIT",
       "license": "MIT",
       "dependencies": {
       "dependencies": {
@@ -3235,14 +3227,14 @@
       }
       }
     },
     },
     "node_modules/prism-media": {
     "node_modules/prism-media": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.8.tgz",
-      "integrity": "sha512-bJ8J9PKpUdG6GmtnlaPSi2cMdGDLsS9o4iOlOncJasku73uJucgcN9Yr7/jlENqfh7hoR6LDqPr17JEzp6srjg==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz",
+      "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==",
       "peerDependencies": {
       "peerDependencies": {
-        "@discordjs/opus": "^0.4.0",
+        "@discordjs/opus": "^0.5.0",
         "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0",
         "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0",
         "node-opus": "^0.3.3",
         "node-opus": "^0.3.3",
-        "opusscript": "^0.0.7"
+        "opusscript": "^0.0.8"
       },
       },
       "peerDependenciesMeta": {
       "peerDependenciesMeta": {
         "@discordjs/opus": {
         "@discordjs/opus": {
@@ -3443,9 +3435,9 @@
       }
       }
     },
     },
     "@types/node": {
     "@types/node": {
-      "version": "14.14.35",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz",
-      "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag=="
+      "version": "14.14.37",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz",
+      "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw=="
     },
     },
     "@types/responselike": {
     "@types/responselike": {
       "version": "1.0.0",
       "version": "1.0.0",
@@ -3587,18 +3579,18 @@
       "integrity": "sha512-9lEt1Rp9rruFPiVQOPbe2rKJXB40fO2u9Ozjz3n/TlVYnIxCTeohVkNI/c5AoLFDZcSxFc2MtDTf9iG0X7BkRg=="
       "integrity": "sha512-9lEt1Rp9rruFPiVQOPbe2rKJXB40fO2u9Ozjz3n/TlVYnIxCTeohVkNI/c5AoLFDZcSxFc2MtDTf9iG0X7BkRg=="
     },
     },
     "discord.js": {
     "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": "12.5.3",
+      "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz",
+      "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==",
       "requires": {
       "requires": {
         "@discordjs/collection": "^0.1.6",
         "@discordjs/collection": "^0.1.6",
         "@discordjs/form-data": "^3.0.1",
         "@discordjs/form-data": "^3.0.1",
         "abort-controller": "^3.0.0",
         "abort-controller": "^3.0.0",
         "node-fetch": "^2.6.1",
         "node-fetch": "^2.6.1",
-        "prism-media": "^1.2.2",
+        "prism-media": "^1.2.9",
         "setimmediate": "^1.0.5",
         "setimmediate": "^1.0.5",
         "tweetnacl": "^1.0.3",
         "tweetnacl": "^1.0.3",
-        "ws": "^7.3.1"
+        "ws": "^7.4.4"
       }
       }
     },
     },
     "dom-serializer": {
     "dom-serializer": {
@@ -3612,26 +3604,26 @@
       }
       }
     },
     },
     "domelementtype": {
     "domelementtype": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
-      "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+      "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
     },
     },
     "domhandler": {
     "domhandler": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
-      "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.1.0.tgz",
+      "integrity": "sha512-/6/kmsGlMY4Tup/nGVutdrK9yQi4YjWVcVeoQmixpzjOUK1U7pQkvAPHBJeUxOgxF0J8f8lwCJSlCfD0V4CMGQ==",
       "requires": {
       "requires": {
-        "domelementtype": "^2.1.0"
+        "domelementtype": "^2.2.0"
       }
       }
     },
     },
     "domutils": {
     "domutils": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz",
-      "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==",
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.1.tgz",
+      "integrity": "sha512-hO1XwHMGAthA/1KL7c83oip/6UWo3FlUNIuWiWKltoiQ5oCOiqths8KknvY2jpOohUoUgnwa/+Rm7UpwpSbY/Q==",
       "requires": {
       "requires": {
         "dom-serializer": "^1.0.1",
         "dom-serializer": "^1.0.1",
-        "domelementtype": "^2.0.1",
-        "domhandler": "^4.0.0"
+        "domelementtype": "^2.2.0",
+        "domhandler": "^4.1.0"
       }
       }
     },
     },
     "dotenv": {
     "dotenv": {
@@ -3658,9 +3650,9 @@
       "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
       "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
     },
     },
     "full-icu": {
     "full-icu": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/full-icu/-/full-icu-1.3.1.tgz",
-      "integrity": "sha512-VMtK//85QJomhk3cXOCksNwOYaw1KWnYTS37GYGgyf7A3ajdBoPGhaJuJWAH2S2kq8GZeXkdKn+3Mfmgy11cVw=="
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/full-icu/-/full-icu-1.3.4.tgz",
+      "integrity": "sha512-BERy9j2ybYSfP8QmXyg496NjVrGXfM73TZckQ5s5hgDV2lpKshjGfPEYYWU3hhE2kU8atZXUZNLSeNz4OQ8hNA=="
     },
     },
     "get-stream": {
     "get-stream": {
       "version": "5.2.0",
       "version": "5.2.0",
@@ -3737,16 +3729,16 @@
       "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
       "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
     },
     },
     "mime-db": {
     "mime-db": {
-      "version": "1.46.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
-      "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
+      "version": "1.47.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
+      "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="
     },
     },
     "mime-types": {
     "mime-types": {
-      "version": "2.1.29",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
-      "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+      "version": "2.1.30",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
+      "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
       "requires": {
       "requires": {
-        "mime-db": "1.46.0"
+        "mime-db": "1.47.0"
       }
       }
     },
     },
     "mimic-response": {
     "mimic-response": {
@@ -3765,20 +3757,20 @@
       "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
       "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
     },
     },
     "npm": {
     "npm": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/npm/-/npm-7.6.3.tgz",
-      "integrity": "sha512-+Cs8TEtkfdQGTIPw8AeqVtNNHyo1Zw8HATzAFFWYnK7jQYgT/CatEy85+BlEoEpqvga2uaKqVrXsTAYj28emjg==",
+      "version": "7.8.0",
+      "resolved": "https://registry.npmjs.org/npm/-/npm-7.8.0.tgz",
+      "integrity": "sha512-9AC3Dj9OUWaUdmTmEVttE/1MWkfF7+sAKPRo9tKEyjo49AXmHQBn+RC33M9dima91mEMqDIA71xyRm4VmhDipg==",
       "requires": {
       "requires": {
-        "@npmcli/arborist": "^2.2.8",
+        "@npmcli/arborist": "^2.3.0",
         "@npmcli/ci-detect": "^1.2.0",
         "@npmcli/ci-detect": "^1.2.0",
-        "@npmcli/config": "^1.2.9",
-        "@npmcli/run-script": "^1.8.3",
+        "@npmcli/config": "^2.1.0",
+        "@npmcli/run-script": "^1.8.4",
         "abbrev": "~1.1.1",
         "abbrev": "~1.1.1",
         "ansicolors": "~0.3.2",
         "ansicolors": "~0.3.2",
         "ansistyles": "~0.1.3",
         "ansistyles": "~0.1.3",
         "archy": "~1.0.0",
         "archy": "~1.0.0",
         "byte-size": "^7.0.1",
         "byte-size": "^7.0.1",
-        "cacache": "^15.0.5",
+        "cacache": "^15.0.6",
         "chalk": "^4.1.0",
         "chalk": "^4.1.0",
         "chownr": "^2.0.0",
         "chownr": "^2.0.0",
         "cli-columns": "^3.1.2",
         "cli-columns": "^3.1.2",
@@ -3786,7 +3778,7 @@
         "columnify": "~1.5.4",
         "columnify": "~1.5.4",
         "glob": "^7.1.4",
         "glob": "^7.1.4",
         "graceful-fs": "^4.2.6",
         "graceful-fs": "^4.2.6",
-        "hosted-git-info": "^3.0.8",
+        "hosted-git-info": "^4.0.2",
         "ini": "^2.0.0",
         "ini": "^2.0.0",
         "init-package-json": "^2.0.2",
         "init-package-json": "^2.0.2",
         "is-cidr": "^4.0.2",
         "is-cidr": "^4.0.2",
@@ -3801,7 +3793,7 @@
         "libnpmpublish": "^4.0.0",
         "libnpmpublish": "^4.0.0",
         "libnpmsearch": "^3.1.0",
         "libnpmsearch": "^3.1.0",
         "libnpmteam": "^2.0.2",
         "libnpmteam": "^2.0.2",
-        "libnpmversion": "^1.0.11",
+        "libnpmversion": "^1.1.0",
         "make-fetch-happen": "^8.0.14",
         "make-fetch-happen": "^8.0.14",
         "minipass": "^3.1.3",
         "minipass": "^3.1.3",
         "minipass-pipeline": "^1.2.4",
         "minipass-pipeline": "^1.2.4",
@@ -3811,14 +3803,14 @@
         "node-gyp": "^7.1.2",
         "node-gyp": "^7.1.2",
         "nopt": "^5.0.0",
         "nopt": "^5.0.0",
         "npm-audit-report": "^2.1.4",
         "npm-audit-report": "^2.1.4",
-        "npm-package-arg": "^8.1.1",
-        "npm-pick-manifest": "^6.1.0",
+        "npm-package-arg": "^8.1.2",
+        "npm-pick-manifest": "^6.1.1",
         "npm-profile": "^5.0.2",
         "npm-profile": "^5.0.2",
         "npm-registry-fetch": "^9.0.0",
         "npm-registry-fetch": "^9.0.0",
         "npm-user-validate": "^1.0.1",
         "npm-user-validate": "^1.0.1",
         "npmlog": "~4.1.2",
         "npmlog": "~4.1.2",
         "opener": "^1.5.2",
         "opener": "^1.5.2",
-        "pacote": "^11.3.0",
+        "pacote": "^11.3.1",
         "parse-conflict-json": "^1.1.1",
         "parse-conflict-json": "^1.1.1",
         "qrcode-terminal": "^0.12.0",
         "qrcode-terminal": "^0.12.0",
         "read": "~1.0.7",
         "read": "~1.0.7",
@@ -3826,7 +3818,7 @@
         "read-package-json-fast": "^2.0.2",
         "read-package-json-fast": "^2.0.2",
         "readdir-scoped-modules": "^1.1.0",
         "readdir-scoped-modules": "^1.1.0",
         "rimraf": "^3.0.2",
         "rimraf": "^3.0.2",
-        "semver": "^7.3.4",
+        "semver": "^7.3.5",
         "ssri": "^8.0.1",
         "ssri": "^8.0.1",
         "tar": "^6.1.0",
         "tar": "^6.1.0",
         "text-table": "~0.2.0",
         "text-table": "~0.2.0",
@@ -3838,7 +3830,7 @@
       },
       },
       "dependencies": {
       "dependencies": {
         "@npmcli/arborist": {
         "@npmcli/arborist": {
-          "version": "2.2.8",
+          "version": "2.3.0",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "@npmcli/installed-package-contents": "^1.0.7",
             "@npmcli/installed-package-contents": "^1.0.7",
@@ -3852,7 +3844,7 @@
             "cacache": "^15.0.3",
             "cacache": "^15.0.3",
             "common-ancestor-path": "^1.0.1",
             "common-ancestor-path": "^1.0.1",
             "json-parse-even-better-errors": "^2.3.1",
             "json-parse-even-better-errors": "^2.3.1",
-            "json-stringify-nice": "^1.1.1",
+            "json-stringify-nice": "^1.1.2",
             "mkdirp-infer-owner": "^2.0.0",
             "mkdirp-infer-owner": "^2.0.0",
             "npm-install-checks": "^4.0.0",
             "npm-install-checks": "^4.0.0",
             "npm-package-arg": "^8.1.0",
             "npm-package-arg": "^8.1.0",
@@ -3864,7 +3856,7 @@
             "promise-call-limit": "^1.0.1",
             "promise-call-limit": "^1.0.1",
             "read-package-json-fast": "^2.0.2",
             "read-package-json-fast": "^2.0.2",
             "readdir-scoped-modules": "^1.1.0",
             "readdir-scoped-modules": "^1.1.0",
-            "semver": "^7.3.4",
+            "semver": "^7.3.5",
             "tar": "^6.1.0",
             "tar": "^6.1.0",
             "treeverse": "^1.0.4",
             "treeverse": "^1.0.4",
             "walk-up-path": "^1.0.0"
             "walk-up-path": "^1.0.0"
@@ -3875,7 +3867,7 @@
           "bundled": true
           "bundled": true
         },
         },
         "@npmcli/config": {
         "@npmcli/config": {
-          "version": "1.2.9",
+          "version": "2.1.0",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "ini": "^2.0.0",
             "ini": "^2.0.0",
@@ -3926,7 +3918,7 @@
           }
           }
         },
         },
         "@npmcli/metavuln-calculator": {
         "@npmcli/metavuln-calculator": {
-          "version": "1.1.0",
+          "version": "1.1.1",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "cacache": "^15.0.5",
             "cacache": "^15.0.5",
@@ -3958,14 +3950,13 @@
           }
           }
         },
         },
         "@npmcli/run-script": {
         "@npmcli/run-script": {
-          "version": "1.8.3",
+          "version": "1.8.4",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "@npmcli/node-gyp": "^1.0.2",
             "@npmcli/node-gyp": "^1.0.2",
             "@npmcli/promise-spawn": "^1.3.2",
             "@npmcli/promise-spawn": "^1.3.2",
             "infer-owner": "^1.0.4",
             "infer-owner": "^1.0.4",
             "node-gyp": "^7.1.0",
             "node-gyp": "^7.1.0",
-            "puka": "^1.0.1",
             "read-package-json-fast": "^2.0.1"
             "read-package-json-fast": "^2.0.1"
           }
           }
         },
         },
@@ -4117,7 +4108,7 @@
           "bundled": true
           "bundled": true
         },
         },
         "cacache": {
         "cacache": {
-          "version": "15.0.5",
+          "version": "15.0.6",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "@npmcli/move-file": "^1.0.1",
             "@npmcli/move-file": "^1.0.1",
@@ -4134,7 +4125,7 @@
             "p-map": "^4.0.0",
             "p-map": "^4.0.0",
             "promise-inflight": "^1.0.1",
             "promise-inflight": "^1.0.1",
             "rimraf": "^3.0.2",
             "rimraf": "^3.0.2",
-            "ssri": "^8.0.0",
+            "ssri": "^8.0.1",
             "tar": "^6.0.2",
             "tar": "^6.0.2",
             "unique-filename": "^1.1.1"
             "unique-filename": "^1.1.1"
           }
           }
@@ -4192,7 +4183,7 @@
               "bundled": true
               "bundled": true
             },
             },
             "string-width": {
             "string-width": {
-              "version": "4.2.0",
+              "version": "4.2.2",
               "bundled": true,
               "bundled": true,
               "requires": {
               "requires": {
                 "emoji-regex": "^8.0.0",
                 "emoji-regex": "^8.0.0",
@@ -4347,7 +4338,7 @@
           }
           }
         },
         },
         "env-paths": {
         "env-paths": {
-          "version": "2.2.0",
+          "version": "2.2.1",
           "bundled": true
           "bundled": true
         },
         },
         "err-code": {
         "err-code": {
@@ -4485,7 +4476,7 @@
           "bundled": true
           "bundled": true
         },
         },
         "hosted-git-info": {
         "hosted-git-info": {
-          "version": "3.0.8",
+          "version": "4.0.2",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "lru-cache": "^6.0.0"
             "lru-cache": "^6.0.0"
@@ -4648,7 +4639,7 @@
           "bundled": true
           "bundled": true
         },
         },
         "json-stringify-nice": {
         "json-stringify-nice": {
-          "version": "1.1.1",
+          "version": "1.1.3",
           "bundled": true
           "bundled": true
         },
         },
         "json-stringify-safe": {
         "json-stringify-safe": {
@@ -4764,12 +4755,12 @@
           }
           }
         },
         },
         "libnpmversion": {
         "libnpmversion": {
-          "version": "1.0.11",
+          "version": "1.1.0",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "@npmcli/git": "^2.0.6",
             "@npmcli/git": "^2.0.6",
             "@npmcli/run-script": "^1.8.3",
             "@npmcli/run-script": "^1.8.3",
-            "read-package-json-fast": "^2.0.1",
+            "json-parse-even-better-errors": "^2.3.1",
             "semver": "^7.3.4",
             "semver": "^7.3.4",
             "stringify-package": "^1.0.1"
             "stringify-package": "^1.0.1"
           }
           }
@@ -4803,14 +4794,14 @@
           }
           }
         },
         },
         "mime-db": {
         "mime-db": {
-          "version": "1.45.0",
+          "version": "1.46.0",
           "bundled": true
           "bundled": true
         },
         },
         "mime-types": {
         "mime-types": {
-          "version": "2.1.28",
+          "version": "2.1.29",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
-            "mime-db": "1.45.0"
+            "mime-db": "1.46.0"
           }
           }
         },
         },
         "minimatch": {
         "minimatch": {
@@ -4926,12 +4917,12 @@
           }
           }
         },
         },
         "normalize-package-data": {
         "normalize-package-data": {
-          "version": "3.0.0",
+          "version": "3.0.2",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
-            "hosted-git-info": "^3.0.6",
-            "resolve": "^1.17.0",
-            "semver": "^7.3.2",
+            "hosted-git-info": "^4.0.1",
+            "resolve": "^1.20.0",
+            "semver": "^7.3.4",
             "validate-npm-package-license": "^3.0.1"
             "validate-npm-package-license": "^3.0.1"
           }
           }
         },
         },
@@ -4961,16 +4952,16 @@
           "bundled": true
           "bundled": true
         },
         },
         "npm-package-arg": {
         "npm-package-arg": {
-          "version": "8.1.1",
+          "version": "8.1.2",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
-            "hosted-git-info": "^3.0.6",
-            "semver": "^7.0.0",
+            "hosted-git-info": "^4.0.1",
+            "semver": "^7.3.4",
             "validate-npm-package-name": "^3.0.0"
             "validate-npm-package-name": "^3.0.0"
           }
           }
         },
         },
         "npm-packlist": {
         "npm-packlist": {
-          "version": "2.1.4",
+          "version": "2.1.5",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "glob": "^7.1.6",
             "glob": "^7.1.6",
@@ -4980,12 +4971,13 @@
           }
           }
         },
         },
         "npm-pick-manifest": {
         "npm-pick-manifest": {
-          "version": "6.1.0",
+          "version": "6.1.1",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "npm-install-checks": "^4.0.0",
             "npm-install-checks": "^4.0.0",
-            "npm-package-arg": "^8.0.0",
-            "semver": "^7.0.0"
+            "npm-normalize-package-bin": "^1.0.1",
+            "npm-package-arg": "^8.1.2",
+            "semver": "^7.3.4"
           }
           }
         },
         },
         "npm-profile": {
         "npm-profile": {
@@ -5054,7 +5046,7 @@
           }
           }
         },
         },
         "pacote": {
         "pacote": {
-          "version": "11.3.0",
+          "version": "11.3.1",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "@npmcli/git": "^2.0.1",
             "@npmcli/git": "^2.0.1",
@@ -5134,10 +5126,6 @@
           "version": "1.8.0",
           "version": "1.8.0",
           "bundled": true
           "bundled": true
         },
         },
-        "puka": {
-          "version": "1.0.1",
-          "bundled": true
-        },
         "punycode": {
         "punycode": {
           "version": "2.1.1",
           "version": "2.1.1",
           "bundled": true
           "bundled": true
@@ -5266,7 +5254,7 @@
           "bundled": true
           "bundled": true
         },
         },
         "semver": {
         "semver": {
-          "version": "7.3.4",
+          "version": "7.3.5",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "lru-cache": "^6.0.0"
             "lru-cache": "^6.0.0"
@@ -5285,7 +5273,7 @@
           "bundled": true
           "bundled": true
         },
         },
         "socks": {
         "socks": {
-          "version": "2.5.1",
+          "version": "2.6.0",
           "bundled": true,
           "bundled": true,
           "requires": {
           "requires": {
             "ip": "^1.1.5",
             "ip": "^1.1.5",
@@ -5651,9 +5639,9 @@
       }
       }
     },
     },
     "prism-media": {
     "prism-media": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.8.tgz",
-      "integrity": "sha512-bJ8J9PKpUdG6GmtnlaPSi2cMdGDLsS9o4iOlOncJasku73uJucgcN9Yr7/jlENqfh7hoR6LDqPr17JEzp6srjg==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz",
+      "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==",
       "requires": {}
       "requires": {}
     },
     },
     "pump": {
     "pump": {