1
0
Эх сурвалжийг харах

update dependencies and small fixes

Markus-Rost 4 жил өмнө
parent
commit
50453806f8

+ 1 - 1
cmds/wiki/general.js

@@ -181,7 +181,7 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
 				if ( reaction ) reaction.removeEmoji();
 			}
 			else if ( ( querypage.missing !== undefined && querypage.known === undefined && !( noRedirect || querypage.categoryinfo ) ) || querypage.invalid !== undefined ) {
-				got.get( wiki + 'api.php?action=query&prop=pageimages|categoryinfo|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&generator=search&gsrnamespace=4|12|14|' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json' ).then( srresponse => {
+				got.get( wiki + 'api.php?action=query&prop=pageimages|categoryinfo|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle|page_image_free|infoboxes&explaintext=true&exsectionformat=raw&exlimit=1&generator=search&gsrnamespace=4|12|14|' + querypage.ns + '|' + Object.values(body.query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&gsrlimit=1&gsrsearch=' + encodeURIComponent( title ) + '&format=json' ).then( srresponse => {
 					var srbody = srresponse.body;
 					if ( srbody && srbody.warnings ) log_warn(srbody.warnings);
 					if ( srresponse.statusCode !== 200 || !srbody || srbody.batchcomplete === undefined ) {

+ 1 - 1
cmds/wiki/search.js

@@ -22,7 +22,7 @@ function gamepedia_search(lang, msg, searchterm, wiki, query, reaction, spoiler)
 		embed.setTitle( 'Special:Search' ).setURL( pagelink );
 	}
 	var description = [];
-	got.get( wiki + 'api.php?action=query&titles=Special:Search&list=search&srinfo=totalhits&srprop=redirecttitle|sectiontitle&srnamespace=4|12|14|' + Object.values(query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&srlimit=10&srsearch=' + encodeURIComponent( ( searchterm || ' ' ) ) + '&format=json' ).then( response => {
+	got.get( wiki + 'api.php?action=query&titles=Special:Search&list=search&srinfo=totalhits&srprop=redirecttitle|sectiontitle&srnamespace=4|12|14|' + ( Object.values(( query?.pages || {ns:0} ))?.[0]?.ns || '0' ) + '|' + Object.values(query.namespaces).filter( ns => ns.content !== undefined ).map( ns => ns.id ).join('|') + '&srlimit=10&srsearch=' + encodeURIComponent( ( searchterm || ' ' ) ) + '&format=json' ).then( response => {
 		var body = response.body;
 		if ( body && body.warnings ) log_warn(body.warnings);
 		if ( response.statusCode !== 200 || !body || !body.query || !body.query.search || body.batchcomplete === undefined ) {

+ 1 - 1
cmds/wiki/user.js

@@ -3,7 +3,7 @@ const global_block = require('../../functions/global_block.js');
 const parse_page = require('../../functions/parse_page.js');
 const extract_desc = require('../../util/extract_desc.js');
 const {timeoptions, usergroups} = require('../../util/default.json');
-const {toMarkdown, toPlaintext, htmlToPlain, htmlToDiscord} = require('../../util/functions.js');
+const {parse_infobox, toMarkdown, toPlaintext, htmlToPlain, htmlToDiscord} = require('../../util/functions.js');
 
 var allSites = [];
 const getAllSites = require('../../util/allSites.js');

+ 5 - 3
dashboard/i18n.js

@@ -17,6 +17,7 @@ const i18n = {
 	ru: require('./i18n/ru.json'),
 	th: require('./i18n/th.json'),
 	tr: require('./i18n/tr.json'),
+	vi: require('./i18n/vi.json'),
 	zh: require('./i18n/zh-hans.json'),
 	'zh-hans': require('./i18n/zh-hans.json'),
 	'zh-hant': require('./i18n/zh-hant.json')
@@ -53,7 +54,7 @@ class Lang {
 		let lang = this.lang;
 		let text = i18n?.[lang];
 		let fallback = 0;
-		for (let n = 0; n < keys.length; n++) {
+		for ( let n = 0; n < keys.length; n++ ) {
 			if ( text ) {
 				text = text?.[keys[n]];
 				if ( typeof text === 'string' ) text = text.trim()
@@ -128,13 +129,14 @@ function plural(lang, number, args) {
 		case 'de':
 		case 'en':
 		case 'es':
+		case 'it':
 		case 'ja':
+		case 'ko':
 		case 'nl':
 		case 'pt-br':
 		case 'th':
 		case 'tr':
-		case 'ja':
-		case 'ko':
+		case 'vi':
 		case 'zh-hans':
 		case 'zh-hant':
 		default:

+ 183 - 206
package-lock.json

@@ -57,9 +57,9 @@
       }
     },
     "@types/node": {
-      "version": "14.0.27",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz",
-      "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g=="
+      "version": "14.14.14",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.14.tgz",
+      "integrity": "sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ=="
     },
     "@types/responselike": {
       "version": "1.0.0",
@@ -220,9 +220,9 @@
       }
     },
     "cacheable-lookup": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz",
-      "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w=="
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
+      "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
     },
     "cacheable-request": {
       "version": "7.0.1",
@@ -245,33 +245,44 @@
       "optional": true
     },
     "cheerio": {
-      "version": "1.0.0-rc.3",
-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
-      "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
-      "requires": {
-        "css-select": "~1.2.0",
-        "dom-serializer": "~0.1.1",
-        "entities": "~1.1.1",
-        "htmlparser2": "^3.9.1",
-        "lodash": "^4.15.0",
-        "parse5": "^3.0.1"
+      "version": "1.0.0-rc.5",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz",
+      "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==",
+      "requires": {
+        "cheerio-select-tmp": "^0.1.0",
+        "dom-serializer": "~1.2.0",
+        "domhandler": "^4.0.0",
+        "entities": "~2.1.0",
+        "htmlparser2": "^6.0.0",
+        "parse5": "^6.0.0",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0"
       },
       "dependencies": {
         "htmlparser2": {
-          "version": "3.10.1",
-          "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
-          "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz",
+          "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==",
           "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.4.4",
+            "entities": "^2.0.0"
           }
         }
       }
     },
+    "cheerio-select-tmp": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.0.tgz",
+      "integrity": "sha512-kx/pq9hxLo6FhjiYqUheSOV0Eb729ZwkXXPrPTeK6kl/VMgaUlsYoAOv3nOJZcHk++V9pI17YNNngtbLVPTB9A==",
+      "requires": {
+        "css-select": "^3.1.2",
+        "css-what": "^4.0.0",
+        "domelementtype": "^2.1.0",
+        "domhandler": "^4.0.0",
+        "domutils": "^2.4.4"
+      }
+    },
     "chownr": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
@@ -314,20 +325,21 @@
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
     "css-select": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
-      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz",
+      "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==",
       "requires": {
-        "boolbase": "~1.0.0",
-        "css-what": "2.1",
-        "domutils": "1.5.1",
-        "nth-check": "~1.0.1"
+        "boolbase": "^1.0.0",
+        "css-what": "^4.0.0",
+        "domhandler": "^4.0.0",
+        "domutils": "^2.4.3",
+        "nth-check": "^2.0.0"
       }
     },
     "css-what": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
-      "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz",
+      "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A=="
     },
     "dashdash": {
       "version": "1.14.1",
@@ -392,9 +404,9 @@
       "integrity": "sha512-9lEt1Rp9rruFPiVQOPbe2rKJXB40fO2u9Ozjz3n/TlVYnIxCTeohVkNI/c5AoLFDZcSxFc2MtDTf9iG0X7BkRg=="
     },
     "discord.js": {
-      "version": "12.5.0",
-      "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.0.tgz",
-      "integrity": "sha512-MXZcnBIosHEOX26ipWEcZdUrTyfTbb4sDYYp0Go5N05PyI78LR8Ds7yAfMu0zUDmxFHYLSYX0pCdiO2pd4CP6w==",
+      "version": "12.5.1",
+      "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.1.tgz",
+      "integrity": "sha512-VwZkVaUAIOB9mKdca0I5MefPMTQJTNg0qdgi1huF3iwsFwJ0L5s/Y69AQe+iPmjuV6j9rtKoG0Ta0n9vgEIL6w==",
       "requires": {
         "@discordjs/collection": "^0.1.6",
         "@discordjs/form-data": "^3.0.1",
@@ -407,34 +419,36 @@
       }
     },
     "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.2.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz",
+      "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
       "requires": {
-        "domelementtype": "^1.3.0",
-        "entities": "^1.1.1"
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.0.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.1.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
+      "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
     },
     "domhandler": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
+      "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
       "requires": {
-        "domelementtype": "1"
+        "domelementtype": "^2.1.0"
       }
     },
     "domutils": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz",
+      "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
       "requires": {
-        "dom-serializer": "0",
-        "domelementtype": "1"
+        "dom-serializer": "^1.0.1",
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.0.0"
       }
     },
     "dotenv": {
@@ -461,9 +475,9 @@
       }
     },
     "entities": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+      "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
     },
     "event-target-shim": {
       "version": "5.0.1",
@@ -587,9 +601,9 @@
       }
     },
     "got": {
-      "version": "11.8.0",
-      "resolved": "https://registry.npmjs.org/got/-/got-11.8.0.tgz",
-      "integrity": "sha512-k9noyoIIY9EejuhaBNLyZ31D5328LeqnyPNXJQb2XlJZcKakLqN5m6O/ikhq/0lw56kUYS54fVm+D1x57YC9oQ==",
+      "version": "11.8.1",
+      "resolved": "https://registry.npmjs.org/got/-/got-11.8.1.tgz",
+      "integrity": "sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q==",
       "requires": {
         "@sindresorhus/is": "^4.0.0",
         "@szmarczak/http-timer": "^4.0.5",
@@ -632,54 +646,14 @@
       "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
     },
     "htmlparser2": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz",
-      "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz",
+      "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==",
       "requires": {
         "domelementtype": "^2.0.1",
-        "domhandler": "^3.3.0",
-        "domutils": "^2.4.2",
+        "domhandler": "^4.0.0",
+        "domutils": "^2.4.4",
         "entities": "^2.0.0"
-      },
-      "dependencies": {
-        "dom-serializer": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz",
-          "integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==",
-          "requires": {
-            "domelementtype": "^2.0.1",
-            "domhandler": "^3.0.0",
-            "entities": "^2.0.0"
-          }
-        },
-        "domelementtype": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
-          "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA=="
-        },
-        "domhandler": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
-          "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
-          "requires": {
-            "domelementtype": "^2.0.1"
-          }
-        },
-        "domutils": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz",
-          "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==",
-          "requires": {
-            "dom-serializer": "^1.0.1",
-            "domelementtype": "^2.0.1",
-            "domhandler": "^3.3.0"
-          }
-        },
-        "entities": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
-          "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
-        }
       }
     },
     "http-cache-semantics": {
@@ -738,9 +712,9 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "ini": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
     },
     "is-fullwidth-code-point": {
       "version": "1.0.0",
@@ -822,11 +796,6 @@
         "json-buffer": "3.0.1"
       }
     },
-    "lodash": {
-      "version": "4.17.19",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
-      "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
-    },
     "lowercase-keys": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
@@ -990,20 +959,19 @@
       "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
     },
     "npm": {
-      "version": "7.0.13",
-      "resolved": "https://registry.npmjs.org/npm/-/npm-7.0.13.tgz",
-      "integrity": "sha512-B7avOtnrtmFA1X4c8RvHHfyOr6ra7SDb7KMn1HtjmvlOj15m8ujtV6gn9ktAvSWSWUbfyXFcZA/4aHX3CEnFXQ==",
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/npm/-/npm-7.3.0.tgz",
+      "integrity": "sha512-VfWmOWtU5+CFVRW6ougMZNe3SAPI24aNH21RpBPCW1sA2Ec0IeZAqeDCeMlP9STmxZUxfvljXRTWye5hfUHLFA==",
       "requires": {
-        "@npmcli/arborist": "^1.0.12",
+        "@npmcli/arborist": "^2.0.2",
         "@npmcli/ci-detect": "^1.2.0",
-        "@npmcli/config": "^1.2.1",
-        "@npmcli/run-script": "^1.8.0",
+        "@npmcli/config": "^1.2.8",
+        "@npmcli/run-script": "^1.8.1",
         "abbrev": "~1.1.1",
         "ansicolors": "~0.3.2",
         "ansistyles": "~0.1.3",
         "aproba": "^2.0.0",
         "archy": "~1.0.0",
-        "bin-links": "^2.2.1",
         "byte-size": "^7.0.0",
         "cacache": "^15.0.5",
         "chalk": "^4.1.0",
@@ -1011,31 +979,31 @@
         "cli-columns": "^3.1.2",
         "cli-table3": "^0.6.0",
         "columnify": "~1.5.4",
-        "editor": "~1.0.0",
         "glob": "^7.1.4",
         "graceful-fs": "^4.2.3",
         "hosted-git-info": "^3.0.6",
-        "inherits": "^2.0.4",
-        "ini": "^1.3.5",
+        "ini": "^2.0.0",
         "init-package-json": "^2.0.1",
         "is-cidr": "^4.0.2",
+        "json-parse-even-better-errors": "*",
         "leven": "^3.1.0",
         "libnpmaccess": "^4.0.1",
-        "libnpmfund": "^1.0.1",
+        "libnpmfund": "^1.0.2",
         "libnpmhook": "^6.0.1",
         "libnpmorg": "^2.0.1",
         "libnpmpack": "^2.0.0",
         "libnpmpublish": "^4.0.0",
-        "libnpmsearch": "^3.0.1",
+        "libnpmsearch": "^3.1.0",
         "libnpmteam": "^2.0.2",
         "libnpmversion": "^1.0.7",
-        "make-fetch-happen": "^8.0.9",
+        "make-fetch-happen": "^8.0.12",
+        "minipass": "^3.1.3",
+        "minipass-pipeline": "^1.2.4",
         "mkdirp": "^1.0.4",
         "mkdirp-infer-owner": "^2.0.0",
         "ms": "^2.1.2",
         "node-gyp": "^7.1.2",
         "nopt": "^5.0.0",
-        "normalize-package-data": "^3.0.0",
         "npm-audit-report": "^2.1.4",
         "npm-package-arg": "^8.1.0",
         "npm-pick-manifest": "^6.1.0",
@@ -1050,13 +1018,14 @@
         "read": "~1.0.7",
         "read-package-json": "^3.0.0",
         "read-package-json-fast": "^1.2.1",
+        "readdir-scoped-modules": "^1.1.0",
         "rimraf": "^3.0.2",
-        "semver": "^7.3.2",
-        "sorted-object": "~2.0.1",
+        "semver": "^7.3.4",
         "ssri": "^8.0.0",
         "tar": "^6.0.5",
         "text-table": "~0.2.0",
         "tiny-relative-date": "^1.3.0",
+        "treeverse": "^1.0.4",
         "uuid": "^8.3.1",
         "validate-npm-package-name": "~3.0.0",
         "which": "^2.0.2",
@@ -1064,7 +1033,7 @@
       },
       "dependencies": {
         "@npmcli/arborist": {
-          "version": "1.0.12",
+          "version": "2.0.2",
           "bundled": true,
           "requires": {
             "@npmcli/installed-package-contents": "^1.0.5",
@@ -1072,8 +1041,8 @@
             "@npmcli/metavuln-calculator": "^1.0.0",
             "@npmcli/move-file": "^1.0.1",
             "@npmcli/name-from-folder": "^1.0.1",
-            "@npmcli/node-gyp": "^1.0.0",
-            "@npmcli/run-script": "^1.8.0",
+            "@npmcli/node-gyp": "^1.0.1",
+            "@npmcli/run-script": "^1.8.1",
             "bin-links": "^2.2.1",
             "cacache": "^15.0.3",
             "common-ancestor-path": "^1.0.1",
@@ -1081,15 +1050,15 @@
             "json-stringify-nice": "^1.1.1",
             "mkdirp-infer-owner": "^2.0.0",
             "npm-install-checks": "^4.0.0",
-            "npm-package-arg": "^8.0.0",
+            "npm-package-arg": "^8.1.0",
             "npm-pick-manifest": "^6.1.0",
-            "pacote": "^11.1.10",
+            "pacote": "^11.1.13",
             "parse-conflict-json": "^1.1.1",
             "promise-all-reject-late": "^1.0.0",
             "promise-call-limit": "^1.0.1",
             "read-package-json-fast": "^1.2.1",
             "readdir-scoped-modules": "^1.1.0",
-            "semver": "^7.1.2",
+            "semver": "^7.3.4",
             "treeverse": "^1.0.4",
             "walk-up-path": "^1.0.0"
           }
@@ -1099,12 +1068,13 @@
           "bundled": true
         },
         "@npmcli/config": {
-          "version": "1.2.1",
+          "version": "1.2.8",
           "bundled": true,
           "requires": {
-            "ini": "^1.3.5",
+            "ini": "^2.0.0",
             "mkdirp-infer-owner": "^2.0.0",
             "nopt": "^5.0.0",
+            "semver": "^7.3.4",
             "walk-up-path": "^1.0.0"
           }
         },
@@ -1175,7 +1145,7 @@
           }
         },
         "@npmcli/run-script": {
-          "version": "1.8.0",
+          "version": "1.8.1",
           "bundled": true,
           "requires": {
             "@npmcli/node-gyp": "^1.0.0",
@@ -1287,7 +1257,7 @@
           "bundled": true
         },
         "aws4": {
-          "version": "1.10.1",
+          "version": "1.11.0",
           "bundled": true
         },
         "balanced-match": {
@@ -1493,10 +1463,16 @@
           }
         },
         "debug": {
-          "version": "4.2.0",
+          "version": "4.3.1",
           "bundled": true,
           "requires": {
             "ms": "2.1.2"
+          },
+          "dependencies": {
+            "ms": {
+              "version": "2.1.2",
+              "bundled": true
+            }
           }
         },
         "debuglog": {
@@ -1538,10 +1514,6 @@
             "safer-buffer": "^2.1.0"
           }
         },
-        "editor": {
-          "version": "1.0.0",
-          "bundled": true
-        },
         "emoji-regex": {
           "version": "8.0.0",
           "bundled": true
@@ -1602,6 +1574,10 @@
           "version": "1.0.0",
           "bundled": true
         },
+        "function-bind": {
+          "version": "1.1.1",
+          "bundled": true
+        },
         "gauge": {
           "version": "2.7.4",
           "bundled": true,
@@ -1673,6 +1649,13 @@
             "har-schema": "^2.0.0"
           }
         },
+        "has": {
+          "version": "1.0.3",
+          "bundled": true,
+          "requires": {
+            "function-bind": "^1.1.1"
+          }
+        },
         "has-flag": {
           "version": "4.0.0",
           "bundled": true
@@ -1765,7 +1748,7 @@
           "bundled": true
         },
         "ini": {
-          "version": "1.3.5",
+          "version": "2.0.0",
           "bundled": true
         },
         "init-package-json": {
@@ -1797,6 +1780,13 @@
             "cidr-regex": "^3.1.1"
           }
         },
+        "is-core-module": {
+          "version": "2.2.0",
+          "bundled": true,
+          "requires": {
+            "has": "^1.0.3"
+          }
+        },
         "is-fullwidth-code-point": {
           "version": "2.0.0",
           "bundled": true
@@ -1882,10 +1872,10 @@
           }
         },
         "libnpmfund": {
-          "version": "1.0.1",
+          "version": "1.0.2",
           "bundled": true,
           "requires": {
-            "@npmcli/arborist": "^0.0.33 || ^1.x"
+            "@npmcli/arborist": "^2.0.0"
           }
         },
         "libnpmhook": {
@@ -1925,7 +1915,7 @@
           }
         },
         "libnpmsearch": {
-          "version": "3.0.1",
+          "version": "3.1.0",
           "bundled": true,
           "requires": {
             "npm-registry-fetch": "^9.0.0"
@@ -1958,21 +1948,21 @@
           }
         },
         "make-fetch-happen": {
-          "version": "8.0.10",
+          "version": "8.0.12",
           "bundled": true,
           "requires": {
-            "agentkeepalive": "^4.1.0",
-            "cacache": "^15.0.0",
-            "http-cache-semantics": "^4.0.4",
+            "agentkeepalive": "^4.1.3",
+            "cacache": "^15.0.5",
+            "http-cache-semantics": "^4.1.0",
             "http-proxy-agent": "^4.0.1",
             "https-proxy-agent": "^5.0.0",
             "is-lambda": "^1.0.1",
             "lru-cache": "^6.0.0",
             "minipass": "^3.1.3",
             "minipass-collect": "^1.0.2",
-            "minipass-fetch": "^1.3.0",
+            "minipass-fetch": "^1.3.2",
             "minipass-flush": "^1.0.5",
-            "minipass-pipeline": "^1.2.2",
+            "minipass-pipeline": "^1.2.4",
             "promise-retry": "^1.1.1",
             "socks-proxy-agent": "^5.0.0",
             "ssri": "^8.0.0"
@@ -2071,7 +2061,7 @@
           }
         },
         "ms": {
-          "version": "2.1.2",
+          "version": "2.1.3",
           "bundled": true
         },
         "mute-stream": {
@@ -2404,6 +2394,14 @@
             "uuid": "^3.3.2"
           },
           "dependencies": {
+            "tough-cookie": {
+              "version": "2.5.0",
+              "bundled": true,
+              "requires": {
+                "psl": "^1.1.28",
+                "punycode": "^2.1.1"
+              }
+            },
             "uuid": {
               "version": "3.4.0",
               "bundled": true
@@ -2411,9 +2409,10 @@
           }
         },
         "resolve": {
-          "version": "1.17.0",
+          "version": "1.19.0",
           "bundled": true,
           "requires": {
+            "is-core-module": "^2.1.0",
             "path-parse": "^1.0.6"
           }
         },
@@ -2437,8 +2436,11 @@
           "bundled": true
         },
         "semver": {
-          "version": "7.3.2",
-          "bundled": true
+          "version": "7.3.4",
+          "bundled": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
         },
         "set-blocking": {
           "version": "2.0.0",
@@ -2453,7 +2455,7 @@
           "bundled": true
         },
         "socks": {
-          "version": "2.4.4",
+          "version": "2.5.1",
           "bundled": true,
           "requires": {
             "ip": "^1.1.5",
@@ -2469,10 +2471,6 @@
             "socks": "^2.3.3"
           }
         },
-        "sorted-object": {
-          "version": "2.0.1",
-          "bundled": true
-        },
         "spdx-correct": {
           "version": "3.1.1",
           "bundled": true,
@@ -2494,7 +2492,7 @@
           }
         },
         "spdx-license-ids": {
-          "version": "3.0.6",
+          "version": "3.0.7",
           "bundled": true
         },
         "sshpk": {
@@ -2585,14 +2583,6 @@
           "version": "1.3.0",
           "bundled": true
         },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "bundled": true,
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        },
         "treeverse": {
           "version": "1.0.4",
           "bundled": true
@@ -2641,7 +2631,7 @@
           "bundled": true
         },
         "uuid": {
-          "version": "8.3.1",
+          "version": "8.3.2",
           "bundled": true
         },
         "validate-npm-package-license": {
@@ -2748,11 +2738,11 @@
       }
     },
     "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.0",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
+      "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
       "requires": {
-        "boolbase": "~1.0.0"
+        "boolbase": "^1.0.0"
       }
     },
     "number-is-nan": {
@@ -2804,11 +2794,16 @@
       "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg=="
     },
     "parse5": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
-      "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+      "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": {
-        "@types/node": "*"
+        "parse5": "^6.0.1"
       }
     },
     "path-is-absolute": {
@@ -2823,9 +2818,9 @@
       "optional": true
     },
     "prism-media": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz",
-      "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw=="
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.3.tgz",
+      "integrity": "sha512-fSrR66n0l6roW9Rx4rSLMyTPTjRTiXy5RVqDOurACQ6si1rKHHKDU5gwBJoCsIV0R3o9gi+K50akl/qyw1C74A=="
     },
     "process-nextick-args": {
       "version": "2.0.1",
@@ -2875,16 +2870,6 @@
         "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==",
-      "requires": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      }
-    },
     "request": {
       "version": "2.88.2",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -3014,14 +2999,6 @@
         "strip-ansi": "^3.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": "3.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -3124,9 +3101,9 @@
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
     "ws": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
-      "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ=="
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz",
+      "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ=="
     },
     "yallist": {
       "version": "3.1.1",

+ 5 - 5
package.json

@@ -15,14 +15,14 @@
     "node": ">=14.0.0"
   },
   "dependencies": {
-    "cheerio": "^1.0.0-rc.3",
+    "cheerio": "^1.0.0-rc.5",
     "discord-oauth2": "^2.6.0",
-    "discord.js": "^12.5.0",
+    "discord.js": "^12.5.1",
     "dotenv": "^8.2.0",
     "full-icu": "^1.3.1",
-    "got": "^11.8.0",
-    "htmlparser2": "^5.0.1",
-    "npm": "^7.0.13",
+    "got": "^11.8.1",
+    "htmlparser2": "^6.0.0",
+    "npm": "^7.3.0",
     "sqlite3": "^5.0.0"
   },
   "repository": {

+ 4 - 3
util/i18n.js

@@ -54,7 +54,7 @@ class Lang {
 		let lang = this.lang;
 		let text = i18n?.[lang];
 		let fallback = 0;
-		for (let n = 0; n < keys.length; n++) {
+		for ( let n = 0; n < keys.length; n++ ) {
 			if ( text ) {
 				text = text?.[keys[n]];
 				if ( typeof text === 'string' ) text = text.trim()
@@ -192,13 +192,14 @@ function plural(lang, number, args) {
 		case 'de':
 		case 'en':
 		case 'es':
+		case 'it':
 		case 'ja':
+		case 'ko':
 		case 'nl':
 		case 'pt-br':
 		case 'th':
 		case 'tr':
-		case 'ja':
-		case 'ko':
+		case 'vi':
 		case 'zh-hans':
 		case 'zh-hant':
 		default: