Bladeren bron

Merge branch 'master' into rcgcdb

MarkusRost 4 jaren geleden
bovenliggende
commit
7183098a15
31 gewijzigde bestanden met toevoegingen van 1909 en 690 verwijderingen
  1. 2 0
      .gitattributes
  2. 19 0
      .github/workflows/tabindent.yml
  3. 15 0
      LICENSE
  4. 2 2
      bot.js
  5. 1 1
      cmds/help.js
  6. 1 1
      cmds/info.js
  7. 2 2
      cmds/rcscript.js
  8. 10 10
      cmds/settings.js
  9. 3 1
      cmds/test.js
  10. 2 2
      cmds/verification.js
  11. 6 2
      cmds/verify.js
  12. 2 2
      cmds/wiki/fandom/user.js
  13. 3 1
      cmds/wiki/gamepedia/search.js
  14. 2 2
      cmds/wiki/gamepedia/user.js
  15. 1 1
      functions/helpserver.js
  16. 30 15
      i18n/allLangs.json
  17. 136 21
      i18n/de.json
  18. 52 20
      i18n/en.json
  19. 35 15
      i18n/fr.json
  20. 40 17
      i18n/nl.json
  21. 146 18
      i18n/pl.json
  22. 39 19
      i18n/pt.json
  23. 39 14
      i18n/ru.json
  24. 40 17
      i18n/tr.json
  25. 630 0
      i18n/zh-hans.json
  26. 630 0
      i18n/zh-hant.json
  27. 0 492
      i18n/zh.json
  28. 2 2
      package.json
  29. 3 3
      util/database.js
  30. 15 9
      util/i18n.js
  31. 1 1
      util/newMessage.js

+ 2 - 0
.gitattributes

@@ -0,0 +1,2 @@
+*.json  filter=tabindent
+package.json -filter

+ 19 - 0
.github/workflows/tabindent.yml

@@ -0,0 +1,19 @@
+name: Change indentation to tabs
+
+on:
+  push:
+    branches: [ translations ]
+
+jobs:
+  run:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - run: |
+          git config filter.tabindent.smudge 'unexpand --tabs=4 --first-only'
+          git config filter.tabindent.clean 'unexpand --tabs=4 --first-only'
+          git config user.name Markus-Rost
+          git config user.email 37275477+Markus-Rost@users.noreply.github.com
+          git add .
+          git commit -m "Change indentation to tabs"
+          git push

+ 15 - 0
LICENSE

@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2020, MarkusRost
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

+ 2 - 2
bot.js

@@ -274,7 +274,7 @@ client.on( 'message', msg => {
 				console.log( msg.guild.name + ': ' + msg.content );
 				db.get( 'SELECT lang FROM discord WHERE guild = ? AND (channel = ? OR channel IS NULL) ORDER BY channel DESC', [msg.guild.id, msg.channel.id], (dberror, row) => {
 					if ( dberror ) console.log( '- Error while getting the lang: ' + dberror );
-					msg.replyMsg( new Lang(( row || defaultSettings ).lang).get('prefix', patreons[msg.guild.id]), {}, true );
+					msg.replyMsg( new Lang(( row || defaultSettings ).lang).get('general.prefix', patreons[msg.guild.id]), {}, true );
 				} );
 			}
 		}
@@ -290,7 +290,7 @@ client.on( 'message', msg => {
 					db.get( 'SELECT lang FROM discord WHERE guild = ? AND (channel = ? OR channel IS NULL) ORDER BY channel DESC', [msg.guild.id, msg.channel.id], (dberror, row) => {
 						if ( dberror ) console.log( '- Error while getting the lang: ' + dberror );
 						if ( msg.content.hasPrefix(( patreons[msg.guild.id] || process.env.prefix ), 'm') ) {
-							msg.replyMsg( new Lang(( row || defaultSettings ).lang).get('missingperm') + ' `' + missing.join('`, `') + '`', {}, true );
+							msg.replyMsg( new Lang(( row || defaultSettings ).lang).get('general.missingperm') + ' `' + missing.join('`, `') + '`', {}, true );
 						}
 					} );
 				}

+ 1 - 1
cmds/help.js

@@ -63,7 +63,7 @@ const helplist = {
 
 const restrictions = {
 	fandom: ['discussion'],
-	minecraft: ['command', 'bug'],
+	minecraft: ['minecraftHelp', 'command', 'bug'],
 	admin: ['settings', 'verification', 'rcscript', 'voice', 'pause'],
 	inline: ['inline.link', 'inline.template'],
 	patreon: ['settings.prefix']

+ 1 - 1
cmds/info.js

@@ -11,7 +11,7 @@ const help_server = require('../functions/helpserver.js');
 function cmd_info(lang, msg, args, line, wiki) {
 	if ( args.join('') ) this.LINK(lang, msg, line, wiki);
 	else {
-		msg.sendChannel( lang.get('disclaimer', '*MarkusRost*') + '\n<' + process.env.patreon + '>' );
+		msg.sendChannel( lang.get('general.disclaimer', '*MarkusRost*') + '\n<' + process.env.patreon + '>' );
 		help_server(lang, msg);
 		this.invite(lang, msg, args, line, wiki);
 	}

+ 2 - 2
cmds/rcscript.js

@@ -28,7 +28,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 	if ( !msg.isAdmin() ) return msg.reactEmoji('❌');
 	if ( !msg.channel.permissionsFor(msg.client.user).has('MANAGE_WEBHOOKS') ) {
 		console.log( msg.guild.id + ': Missing permissions - MANAGE_WEBHOOKS' );
-		return msg.replyMsg( lang.get('missingperm') + ' `MANAGE_WEBHOOKS`' );
+		return msg.replyMsg( lang.get('general.missingperm') + ' `MANAGE_WEBHOOKS`' );
 	}
 	
 	db.all( 'SELECT configid, webhook, wiki, lang, display, wikiid, rcid FROM rcgcdw WHERE guild = ? ORDER BY configid ASC', [msg.guild.id], (dberror, rows) => {
@@ -315,7 +315,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 					return msg.replyMsg( lang.get('rcscript.current_display') + ' `' + display_types[selected_row.display] + '`\n`' + cmd + ' display (' + display.join('|') + ')`\n' + display.map( display_type => '`' + display_type + '`: ' + lang.get('rcscript.help_display_' + display_type) ).join('\n'), {}, true );
 				}
 				if ( !display.includes( args[1] ) ) {
-					return msg.replyMsg( lang.get('patreon') + '\n<' + process.env.patreon + '>', {}, true );
+					return msg.replyMsg( lang.get('general.patreon') + '\n<' + process.env.patreon + '>', {}, true );
 				}
 
 				msg.client.fetchWebhook(...selected_row.webhook.split('/')).then( webhook => {

+ 10 - 10
cmds/settings.js

@@ -32,13 +32,13 @@ function cmd_settings(lang, msg, args, line, wiki) {
 		var inlinepage = ( lang.localNames.page || 'page' );
 		var text = lang.get('settings.missing', '`' + prefix + 'settings lang`', '`' + prefix + 'settings wiki`');
 		if ( rows.length ) {
-			text = lang.get('settings.current') + '\n' + lang.get('settings.currentlang') + ' `' + allLangs.names[guild.lang][1] + '` - `' + prefix + 'settings lang`';
+			text = lang.get('settings.current') + '\n' + lang.get('settings.currentlang') + ' `' + allLangs.names[guild.lang] + '` - `' + prefix + 'settings lang`';
 			if ( msg.guild.id in patreons ) text += '\n' + lang.get('settings.currentprefix') + ' `' + prefix + '` - `' + prefix + 'settings prefix`';
 			text += '\n' + lang.get('settings.currentinline') + ' ' + ( guild.inline ? '~~' : '' ) + '`[[' + inlinepage + ']]`' + ( guild.inline ? '~~' : '' ) + ' - `' + prefix + 'settings inline`';
 			text += '\n' + lang.get('settings.currentwiki') + ' ' + guild.wiki + ' - `' + prefix + 'settings wiki`';
 			text += '\n' + lang.get('settings.currentchannel') + ' `' + prefix + 'settings channel`\n';
 			if ( rows.length === 1 ) text += lang.get('settings.nochannels');
-			else text += rows.filter( row => row !== guild ).map( row => '<#' + row.channel + '>: ' + ( msg.guild.id in patreons ? '`' + allLangs.names[row.lang][1] + '` - ' : '' ) + '<' + row.wiki + '>' + ( msg.guild.id in patreons ? ' - ' + ( row.inline ? '~~' : '' ) + '`[[' + inlinepage + ']]`' + ( row.inline ? '~~' : '' ) : '' ) ).join('\n');
+			else text += rows.filter( row => row !== guild ).map( row => '<#' + row.channel + '>: ' + ( msg.guild.id in patreons ? '`' + allLangs.names[row.lang] + '` - ' : '' ) + '<' + row.wiki + '>' + ( msg.guild.id in patreons ? ' - ' + ( row.inline ? '~~' : '' ) + '`[[' + inlinepage + ']]`' + ( row.inline ? '~~' : '' ) : '' ) ).join('\n');
 		}
 		
 		if ( !args.length ) {
@@ -55,7 +55,7 @@ function cmd_settings(lang, msg, args, line, wiki) {
 			if ( !channel ) channel = Object.assign({channel:msg.channel.id}, guild);
 			text = lang.get('settings.' + prelang + 'current');
 			if ( msg.guild.id in patreons ) {
-				text += '\n' + lang.get('settings.currentlang') + ' `' + allLangs.names[channel.lang][1] + '` - `' + prefix + 'settings channel lang`';
+				text += '\n' + lang.get('settings.currentlang') + ' `' + allLangs.names[channel.lang] + '` - `' + prefix + 'settings channel lang`';
 				text += '\n' + lang.get('settings.currentinline') + ' ' + ( channel.inline ? '~~' : '' ) + '`[[' + inlinepage + ']]`' + ( channel.inline ? '~~' : '' ) + ' - `' + prefix + 'settings channel inline`';
 			}
 			text += '\n' + lang.get('settings.currentwiki') + ' ' + channel.wiki + ' - `' + prefix + 'settings channel wiki`';
@@ -204,11 +204,11 @@ function cmd_settings(lang, msg, args, line, wiki) {
 		}
 		
 		if ( args[0] === 'lang' ) {
-			if ( channel && !( msg.guild.id in patreons ) ) return msg.replyMsg( lang.get('patreon') + '\n<' + process.env.patreon + '>', {}, true );
+			if ( channel && !( msg.guild.id in patreons ) ) return msg.replyMsg( lang.get('general.patreon') + '\n<' + process.env.patreon + '>', {}, true );
 			prelang += 'lang';
-			var langhelp = '\n' + lang.get('settings.langhelp', prefix + 'settings ' + prelang) + ' `' + Object.values(allLangs.names).map( val => val[0] ).join('`, `') + '`';
+			var langhelp = '\n' + lang.get('settings.langhelp', prefix + 'settings ' + prelang) + ' `' + Object.values(allLangs.names).join('`, `') + '`';
 			if ( !args[1] ) {
-				return msg.replyMsg( lang.get('settings.' + prelang) + ' `' + allLangs.names[( channel || guild ).lang][1] + '`' + langhelp, {}, true );
+				return msg.replyMsg( lang.get('settings.' + prelang) + ' `' + allLangs.names[( channel || guild ).lang] + '`' + langhelp, {}, true );
 			}
 			if ( !( args[1] in allLangs.map ) ) {
 				return msg.replyMsg( lang.get('settings.langinvalid') + langhelp, {}, true );
@@ -224,7 +224,7 @@ function cmd_settings(lang, msg, args, line, wiki) {
 				sqlargs[2] = msg.channel.id;
 				if ( !rows.includes( channel ) ) {
 					if ( channel.lang === allLangs.map[args[1]] ) {
-						return msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' `' + allLangs.names[channel.lang][1] + '`' + langhelp, {}, true );
+						return msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' `' + allLangs.names[channel.lang] + '`' + langhelp, {}, true );
 					}
 					sql = 'INSERT INTO discord(lang, guild, channel, wiki, prefix) VALUES(?, ?, ?, ?, ?)';
 					sqlargs.push(guild.wiki, guild.prefix);
@@ -246,7 +246,7 @@ function cmd_settings(lang, msg, args, line, wiki) {
 					if ( msg.guild.id in voice ) voice[msg.guild.id] = guild.lang;
 				}
 				if ( channel || !( msg.guild.id in patreons ) || !rows.some( row => row.channel === msg.channel.id ) ) lang = new Lang(allLangs.map[args[1]]);
-				msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' `' + allLangs.names[allLangs.map[args[1]]][1] + '`\n' + lang.get('settings.langhelp', prefix + 'settings ' + prelang) + ' `' + Object.values(allLangs.names).map( val => val[0] ).join('`, `') + '`', {}, true );
+				msg.replyMsg( lang.get('settings.' + prelang + 'changed') + ' `' + allLangs.names[allLangs.map[args[1]]] + '`\n' + lang.get('settings.langhelp', prefix + 'settings ' + prelang) + ' `' + Object.values(allLangs.names).join('`, `') + '`', {}, true );
 				var channels = rows.filter( row => row.channel && row.lang === guild.lang && row.wiki === guild.wiki && row.prefix === guild.prefix && row.inline === guild.inline ).map( row => row.channel );
 				if ( channels.length ) db.run( 'DELETE FROM discord WHERE channel IN (' + channels.map( row => '?' ).join(', ') + ')', channels, function (delerror) {
 					if ( delerror ) {
@@ -260,7 +260,7 @@ function cmd_settings(lang, msg, args, line, wiki) {
 		
 		if ( args[0] === 'prefix' && !channel ) {
 			if ( !( msg.guild.id in patreons ) ) {
-				return msg.replyMsg( lang.get('patreon') + '\n<' + process.env.patreon + '>', {}, true );
+				return msg.replyMsg( lang.get('general.patreon') + '\n<' + process.env.patreon + '>', {}, true );
 			}
 			var prefixhelp = '\n' + lang.get('settings.prefixhelp', prefix + 'settings prefix');
 			args[1] = args[1].replace( /(?<!\\)_$/, ' ' ).replace( /\\([_\W])/g, '$1' );
@@ -290,7 +290,7 @@ function cmd_settings(lang, msg, args, line, wiki) {
 		}
 		
 		if ( args[0] === 'inline' ) {
-			if ( channel && !( msg.guild.id in patreons ) ) return msg.replyMsg( lang.get('patreon') + '\n<' + process.env.patreon + '>', {}, true );
+			if ( channel && !( msg.guild.id in patreons ) ) return msg.replyMsg( lang.get('general.patreon') + '\n<' + process.env.patreon + '>', {}, true );
 			prelang += 'inline';
 			var toggle = 'inline ' + ( ( channel || guild ).inline ? 'disabled' : 'enabled' );
 			var inlinehelp = '\n' + lang.get('settings.' + toggle + '.help', prefix + 'settings ' + prelang + ' toggle', inlinepage);

+ 3 - 1
cmds/test.js

@@ -14,7 +14,9 @@ function cmd_test(lang, msg, args, line, wiki) {
 		if ( msg.channel.type !== 'text' || !pause[msg.guild.id] ) this.LINK(lang, msg, line, wiki);
 	} else if ( msg.channel.type !== 'text' || !pause[msg.guild.id] ) {
 		if ( msg.isAdmin() && msg.defaultSettings ) help_setup(lang, msg);
-		var text = lang.get('test.text')[Math.floor(Math.random() * lang.get('test.random'))] || lang.get('test.default');
+		let textList = lang.get('test.text').filter( text => text );
+		var text = textList[Math.floor(Math.random() * ( textList.length * 5 ))]?.trim();
+		if ( !text ) text = lang.get('test.text.0');
 		console.log( '- Test: Fully functioning!' );
 		var now = Date.now();
 		msg.replyMsg( text ).then( message => {

+ 2 - 2
cmds/verification.js

@@ -17,7 +17,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 	}
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
 		console.log( msg.guild.id + ': Missing permissions - MANAGE_ROLES' );
-		return msg.replyMsg( lang.get('missingperm') + ' `MANAGE_ROLES`' );
+		return msg.replyMsg( lang.get('general.missingperm') + ' `MANAGE_ROLES`' );
 	}
 	
 	db.all( 'SELECT configid, channel, role, editcount, usergroup, accountage, rename FROM verification WHERE guild = ? ORDER BY configid ASC', [msg.guild.id], (error, rows) => {
@@ -86,7 +86,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 		if ( args[1] === 'rename' && !args.slice(2).join('') ) {
 			if ( !row.rename && !msg.guild.me.permissions.has('MANAGE_NICKNAMES') ) {
 				console.log( msg.guild.id + ': Missing permissions - MANAGE_NICKNAMES' );
-				return msg.replyMsg( lang.get('missingperm') + ' `MANAGE_NICKNAMES`' );
+				return msg.replyMsg( lang.get('general.missingperm') + ' `MANAGE_NICKNAMES`' );
 			}
 			return db.run( 'UPDATE verification SET rename = ? WHERE guild = ? AND configid = ?', [( row.rename ? 0 : 1 ), msg.guild.id, row.configid], function (dberror) {
 				if ( dberror ) {

+ 6 - 2
cmds/verify.js

@@ -18,7 +18,7 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
 		if ( msg.isAdmin() || msg.isOwner() ) {
 			console.log( msg.guild.id + ': Missing permissions - MANAGE_ROLES' );
-			msg.replyMsg( lang.get('missingperm') + ' `MANAGE_ROLES`' );
+			msg.replyMsg( lang.get('general.missingperm') + ' `MANAGE_ROLES`' );
 		} else this.LINK(lang, msg, line, wiki);
 		return;
 	}
@@ -29,7 +29,7 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 	}
 	if ( wiki.endsWith( '.gamepedia.com/' ) ) username = username.replace( /^userprofile\s*:/i, '' );
 	
-	var embed = new MessageEmbed().setFooter( lang.get('verify.footer') + ' • ' + new Date().toLocaleString(lang.get('dateformat'), timeoptions) ).setTimestamp();
+	var embed = new MessageEmbed().setFooter( lang.get('verify.footer') ).setTimestamp();
 	db.all( 'SELECT role, editcount, usergroup, accountage, rename FROM verification WHERE guild = ? AND channel LIKE ? ORDER BY configid ASC', [msg.guild.id, '%|' + msg.channel.id + '|%'], (dberror, rows) => {
 		if ( dberror || !rows ) {
 			console.log( '- Error while getting the verifications: ' + dberror );
@@ -54,6 +54,10 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 					console.log( '- This wiki doesn\'t exist!' );
 					msg.reactEmoji('nowiki');
 				}
+				else if ( body?.error?.code === 'us400' ) { // special catch for Fandom
+					embed.setTitle( ( old_username || username ).escapeFormatting() ).setColor('#0000FF').setDescription( lang.get('verify.user_missing', ( old_username || username ).escapeFormatting()) );
+					msg.replyMsg( lang.get('verify.user_missing_reply', ( old_username || username ).escapeFormatting()), {embed}, false, false );
+				}
 				else {
 					console.log( '- ' + response.statusCode + ': Error while getting the user: ' + ( body && body.error && body.error.info ) );
 					embed.setColor('#000000').setDescription( lang.get('verify.error') );

+ 2 - 2
cmds/wiki/fandom/user.js

@@ -78,7 +78,7 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 					var isBlocked = false;
 					var blockedtimestamp = new Date(block.timestamp).toLocaleString(lang.get('dateformat'), timeoptions);
 					var blockexpiry = block.expiry;
-					if ( blockexpiry === 'infinity' ) {
+					if ( ['infinity', 'infinite'].includes(blockexpiry) ) {
 						blockexpiry = lang.get('user.block.until_infinity');
 						isBlocked = true;
 					} else if ( blockexpiry ) {
@@ -249,7 +249,7 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 					}
 					var isBlocked = false;
 					var blockexpiry = queryuser.blockexpiry;
-					if ( blockexpiry === 'infinity' ) {
+					if ( ['infinity', 'infinite'].includes(blockexpiry) ) {
 						blockexpiry = lang.get('user.block.until_infinity');
 						isBlocked = true;
 					} else if ( blockexpiry ) {

+ 3 - 1
cmds/wiki/gamepedia/search.js

@@ -44,7 +44,9 @@ function gamepedia_search(lang, msg, searchterm, wiki, query, reaction, spoiler)
 			body.query.search.forEach( result => {
 				description.push( '• [' + result.title + '](' + wiki.toLink(result.title, '', '', query.general, true) + ')' + ( result.sectiontitle ? ' § [' + result.sectiontitle + '](' + wiki.toLink(result.title, '', result.sectiontitle, query.general, true) + ')' : '' ) + ( result.redirecttitle ? ' (⤷ [' + result.redirecttitle + '](' + wiki.toLink(result.redirecttitle, '', '', query.general, true) + '))' : '' ) );
 			} );
-			embed.setFooter( lang.get('search.results', body.query.searchinfo.totalhits) );
+			if ( body.query.searchinfo ) {
+				embed.setFooter( lang.get('search.results', body.query.searchinfo.totalhits) );
+			}
 		}
 	}, error => {
 		console.log( '- Error while getting the search results.' + error );

+ 2 - 2
cmds/wiki/gamepedia/user.js

@@ -72,7 +72,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 					var isBlocked = false;
 					var blockedtimestamp = new Date(block.timestamp).toLocaleString(lang.get('dateformat'), timeoptions);
 					var blockexpiry = block.expiry;
-					if ( blockexpiry === 'infinity' ) {
+					if ( ['infinity', 'infinite'].includes(blockexpiry) ) {
 						blockexpiry = lang.get('user.block.until_infinity');
 						isBlocked = true;
 					} else if ( blockexpiry ) {
@@ -246,7 +246,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 					var isBlocked = false;
 					var blockedtimestamp = new Date(queryuser.blockedtimestamp).toLocaleString(lang.get('dateformat'), timeoptions);
 					var blockexpiry = queryuser.blockexpiry;
-					if ( blockexpiry === 'infinity' ) {
+					if ( ['infinity', 'infinite'].includes(blockexpiry) ) {
 						blockexpiry = lang.get('user.block.until_infinity');
 						isBlocked = true;
 					} else if ( blockexpiry ) {

+ 1 - 1
functions/helpserver.js

@@ -7,7 +7,7 @@ const help_setup = require('./helpsetup.js');
  */
 function help_server(lang, msg) {
 	if ( msg.isAdmin() && msg.defaultSettings ) help_setup(lang, msg);
-	msg.sendChannel( lang.get('helpserver') + '\n' + process.env.invite );
+	msg.sendChannel( lang.get('general.helpserver') + '\n' + process.env.invite );
 }
 
 module.exports = help_server;

+ 30 - 15
i18n/allLangs.json

@@ -1,15 +1,16 @@
 {
 	"allLangs": {
 		"names": {
-			"en": ["English", "English"],
-			"de": ["German", "Deutsch"],
-			"fr": ["French", "Français"],
-			"nl": ["Dutch", "Nederlands"],
-			"pl": ["Polish", "Polski"],
-			"pt": ["Portuguese", "Português"],
-			"ru": ["Russian", "Русский"],
-			"tr": ["Turkish", "Türkçe"],
-			"zh": ["Chinese", "中文"]
+			"en": "English",
+			"de": "Deutsch",
+			"fr": "Français",
+			"nl": "Nederlands",
+			"pl": "Polski",
+			"pt": "Português",
+			"ru": "Русский",
+			"tr": "Türkçe",
+			"zh-hans": "简体中文",
+			"zh-hant": "繁體中文"
 		},
 		"map": {
 			"en": "en",
@@ -36,16 +37,27 @@
 			"tr": "tr",
 			"turkish": "tr",
 			"turkçe": "tr",
-			"zh": "zh",
-			"chinese": "zh",
-			"中文": "zh"
+			"zh": "zh-hans",
+			"chinese": "zh-hans",
+			"中文": "zh-hans",
+			"汉语": "zh-hans",
+			"漢語": "zh-hant",
+			"zh-hans": "zh-hans",
+			"chinese (simplified)": "zh-hans",
+			"simplified chinese": "zh-hans",
+			"简体中文": "zh-hans",
+			"zh-hant": "zh-hant",
+			"chinese (traditional)": "zh-hant",
+			"traditional chinese": "zh-hant",
+			"繁體中文": "zh-hant"
 		}
 	},
 	"RcGcDw": {
 		"names": {
 			"en": "English",
-			"de": "German",
-			"pl": "Polish"
+			"de": "Deutsch",
+			"pl": "Polski",
+			"pt": "Português"
 		},
 		"map": {
 			"en": "en",
@@ -56,7 +68,10 @@
 			"deutsch": "de",
 			"pl": "pl",
 			"polish": "pl",
-			"polski": "pl"
+			"polski": "pl",
+			"pt": "pt",
+			"portuguese": "pt",
+			"português": "pt"
 		}
 	}
 }

+ 136 - 21
i18n/de.json

@@ -1,28 +1,44 @@
 {
 	"__translator": [
-		"MarkusRost"
+		"MarkusRost",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" "
 	],
 	"fallback": [
-		"en"
+		"en",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"help": ["hilfe"],
-		"page": ["seite"],
-		"search": ["suche"],
-		"random": ["zufall"],
-		"overview": ["übersicht"],
-		"discussion": ["diskussionen", "diskussion"],
-		"user": ["benutzer"],
-		"command": ["befehl"],
-		"bug": ["fehler"]
+		"bug": ["fehler", " ", " ", " ", " "],
+		"command": ["befehl"," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": ["diskussionen", "diskussion", " ", " ", " "],
+		"help": ["hilfe", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": ["übersicht", " ", " ", " ", " "],
+		"page": ["seite", " ", " ", " ", " "],
+		"random": ["zufall", " ", " ", " ", " "],
+		"search": ["suche", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": ["benutzer", " ", " ", " ", " "],
+		"verify": [" ", " ", " ", " ", " "]
 	},
 	"dateformat": "de-DE",
-	"prefix": "das Präfix für diesen Server ist `$1`. Du kannst das Präfix mit `$1settings prefix` ändern. Für eine Liste aller Befehle nutze `$1hilfe`.",
-	"missingperm": "mir fehlen einige Berechtigungen für diesen Befehl:",
-	"limit": "🚨 **Stop, du hast ein Limit erreicht!** 🚨\n\n$1, deine Nachricht enthält zu viele Befehle!",
-	"disclaimer": "Ich bin ein kleiner Bot mit der Aufgabe einfach auf MediaWiki Websites, wie Gamepedia- und Fandom-Wikis, zu verlinken und diese zu durchsuchen. Ich zeige kurze Beschreibungen und zusätliche Informationen zu Seiten und kann Weiterleitungen auflösen und Interwiki-Links folgen. Geschrieben wurde ich von $1 in JavaScript.\n\nDu kannst mich auf Patreon unterstützen:",
-	"helpserver": "Bei Fragen oder Problemen besuche bitte meinen Support-Server:",
-	"patreon": "dies ist eine Patreon-Funktion!\nDu kannst mich auf Patreon unterstützen um Zugang zu dieser Funktion zu erhalten:",
+	"general": {
+		"prefix": "das Präfix für diesen Server ist `$1`. Du kannst das Präfix mit `$1settings prefix` ändern. Für eine Liste aller Befehle nutze `$1hilfe`.",
+		"missingperm": "mir fehlen einige Berechtigungen für diesen Befehl:",
+		"limit": "🚨 **Stop, du hast ein Limit erreicht!** 🚨\n\n$1, deine Nachricht enthält zu viele Befehle!",
+		"disclaimer": "Ich bin ein kleiner Bot mit der Aufgabe einfach auf MediaWiki Websites, wie Gamepedia- und Fandom-Wikis, zu verlinken und diese zu durchsuchen. Ich zeige kurze Beschreibungen und zusätzliche Informationen zu Seiten und kann Weiterleitungen auflösen sowie Interwiki-Links folgen. Geschrieben wurde ich von $1 in JavaScript.\n\nDu kannst mich auf Patreon unterstützen:",
+		"helpserver": "Bei Fragen oder Problemen besuche bitte meinen Support-Server:",
+		"patreon": "dies ist eine Patreon-Funktion!\nDu kannst mich auf Patreon unterstützen um Zugang zu dieser Funktion zu erhalten:"
+	},
 	"settings": {
 		"save_failed": "die Einstellungen konnten leider nicht gespeichert werden, bitte versuche es später erneut.",
 		"missing": "für diesen Server wurden noch keine Einstellungen vorgenommen. Nutze $1 und $2 um die Einstellungen vorzunehmen.",
@@ -151,12 +167,73 @@
 		"empty": "*leer*",
 		"notice": "Hinweis:",
 		"qualified": "Qualifiziert für:",
-		"qualified_error": "Qualifiziert für, aber konnte nicht hinzugefügt werden:",
+		"qualified_error": "Qualifiziert für, aber kann nicht hinzugefügt werden:",
 		"help_guide": "Folge [dieser Anleitung]($1) um dein Discord-Tag auf deinem Wiki-Profil hinzuzufügen:",
 		"help_gamepedia": "https://help.gamepedia.com/Gamepedia_Help_Wiki:Discord_verification",
 		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser",
 		"help_subpage": "Bitte füge dein Discord-Tag ($1) zu deiner Discord-Unterseite im Wiki hinzu:"
 	},
+	"rcscript": {
+		"title": "Letzte Änderungen-Webhook",
+		"ad": "Du möchtest letzte Änderungen direkt in Discord? Nutze `$1rcscript` um einen Letzte Änderungen-Webhook basierend auf **$2** zu deinen Diesocrd server hinzuzufügen!",
+		"missing": "es ist noch kein Letzte Änderungen-Webhook für diesen Server vorhanden.",
+		"current": "dies sind die aktuellen Letzte Änderungen-Webhooks für diesen Server:",
+		"current_selected": "dies ist der Letzte Änderungen-Webhook für diesen Server:",
+		"channel": "Kanal:",
+		"wiki": "Wiki:",
+		"lang": "Sprache:",
+		"display": "Anzeigemodus:",
+		"rc": "Wiki-Änderungen:",
+		"feeds": "Feeds-basierte Änderungen:",
+		"enabled": "aktiviert",
+		"disabled": "deaktiviert",
+		"toggle": "(umschalten)",
+		"help_feeds": "(Diskussionen, Nachrichtenseiten, Artikelkommentare)",
+		"delete": "Lösche diesen Letzte Änderungen-Webhook:",
+		"add_more": "Füge mehr Letzte Änderungen-Webhooks hinzu:",
+		"noadmin": "du benötigst die `WebHooks verwalten`-Berechtigung für diesen Befehl!",
+		"max_entries": "du hast bereits die maximale Anzahl an Letzte Änderungen-Webhooks erreicht.",
+		"sysmessage": "die Systemnachricht `$1` muss die Server-ID `$2` sein um einen Letzte Änderungen-Webhook hinzuzufügen.",
+		"audit_reason": "Letzte Änderungen-Webhook für \"$1\"",
+		"audit_reason_delete": "Letzte Änderungen-Webhook entfernt",
+		"added": "ein Letzte Änderungen-Webhook wurde hinzugefügt für:",
+		"deleted": "der Letzte Änderungen-Webhook wurde gelöscht.",
+		"webhook_failed": "der Webhook konnten leider nicht erstellt werden, bitte versuche es später erneut.",
+		"current_wiki": "das Wiki für diesen Webhook ist:",
+		"help_wiki": "Link zum Wiki: `https://<Wiki>.gamepedia.com/` oder `https://<Wiki>.fandom.com/`",
+		"new_wiki": "<neues Wiki>",
+		"updated_wiki": "das Wiki für diesen Webhook wurde geändert zu:",
+		"current_lang": "die Sprache für diesen Webhook ist:",
+		"help_lang": "Bisher mögliche Sprachen sind:",
+		"new_lang": "<neue Sprache>",
+		"updated_lang": "die Sprache für diesen Webhook wurde geändert zu:",
+		"current_display": "der Anzeigemodus für diesen Webhook ist:",
+		"help_display_compact": "Kompakte Textnachrichten mit Inline-Links.",
+		"help_display_embed": "Einbettungen mit Bearbeitungsmarkierungen und Kategorieänderungen.",
+		"help_display_image": "Einbettungen mit Bildvorschau.",
+		"help_display_diff": "Einbettungen mit Bildvorschau und Bearbeitungsunterschieden.",
+		"updated_display": "der Anzeigemodus für diesen Webhook wurde geändert zu:",
+		"disabled_feeds": "die Feeds-basierten Änderungen, wie Diskussionen, Nachrichtenseiten und Artikelkommentare, für diesen Webhook wurden deaktiviert.",
+		"enabled_feeds": "die Feeds-basierten Änderungen, wie Diskussionen, Nachrichtenseiten und Artikelkommentare, für diesen Webhook wurden aktiviert.",
+		"no_feeds": "das Wiki für diesen Webhook hat keine Feeds-basierten Funktionen, wie Diskussionen, Nachrichtenseiten oder Artikelkommentare, aktiviert.",
+		"disabled_rc": "die Wiki-Änderungen für diesen Webhook wurden deaktiviert.",
+		"enabled_rc": "die Wiki-Änderungen für diesen Webhook wurden aktiviert.",
+		"all_inactive": "du kannst Wiki-Änderungen und Feeds-basierte Änderungen nicht gleichzeitig deaktiviert haben.",
+		"webhook": {
+			"created": "Ein Letzte Änderungen-Webhook für $1 wurde zu diesem Kanal hinzugefügt.",
+			"updated_wiki": "Das Wiki für diesen Letzte Änderungen-Webhook wurde zu $1 geändert.",
+			"updated_lang": "Die Sprache für diesen Letzte Änderungen-Webhook wurde zu `$1` geändert.",
+			"updated_display_compact": "Der Anzeigemodus für diesen Letzte Änderungen-Webhook wurde zu kompakten Textnachrichten mit Inline-Links geändert.",
+			"updated_display_embed": "Der Anzeigemodus für diesen Letzte Änderungen-Webhook wurde zu Einbettungen mit Bearbeitungsmarkierungen und Kategorieänderungen geändert.",
+			"updated_display_image": "Der Anzeigemodus für diesen Letzte Änderungen-Webhook wurde zu Einbettungen mit Bildvorschau geändert.",
+			"updated_display_diff": "Der Anzeigemodus für diesen Letzte Änderungen-Webhook wurde zu Einbettungen mit Bildvorschau und Bearbeitungsunterschieden geändert.",
+			"disabled_feeds": "Die Feeds-basierten Änderungen, wie Diskussionen, Nachrichtenseiten und Artikelkommentare, wurden für diesen Letzte Änderungen-Webhook deaktiviert.",
+			"enabled_feeds": "Die Feeds-basierten Änderungen, wie Diskussionen, Nachrichtenseiten und Artikelkommentare, wurden für diesen Letzte Änderungen-Webhook aktiviert.",
+			"disabled_rc": "Die Wiki-Änderungen wurden für diesen Letzte Änderungen-Webhook deaktiviert.",
+			"enabled_rc": "Die Wiki-Änderungen wurden für diesen Letzte Änderungen-Webhook aktiviert.",
+			"deleted": "Dieser Letzte Änderungen-Webhook wird gelöscht."
+		}
+	},
 	"overview": {
 		"inaccurate": "Statistiken können ungenau sein",
 		"name": "Vollständiger Name:",
@@ -300,16 +377,20 @@
 		"bot": "Du kannst mich mit diesem Link auf einen anderen Server einladen:"
 	},
 	"test": {
-		"random": 10,
 		"pause": "ich bin auf diesem Server derzeit pausiert.",
 		"text": [
+			"ich bin voll funktionsfähig!",
 			"ich bin ja schon wach!",
 			"du hast mich gerufen?",
 			"ja, ich funktioniere noch!",
 			"hast du **Kekse** gesagt?",
-			"hast du **Kekse** gesagt?"
+			"hast du **Kekse** gesagt?",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " "
 		],
-		"default": "ich bin voll funktionsfähig!",
 		"time": "Ping",
 		"notice": "Eingeschränkte Funktionalität",
 		"MediaWiki": "Benötigt mindestens $1 für vollständige Funktionalität, fand `$2`.",
@@ -349,6 +430,10 @@
 				"cmd": "??<Wiki> <Suchbegriff>",
 				"desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen Wikia-Wiki: `https://<Wiki>.wikia.org/`"
 			},
+			"mwprojects": {
+				"cmd": "!!<Wiki> <Suchbegriff>",
+				"desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen MediaWiki-Projekt. Beispiel: `$1!!de.wikipedia.org Keks`"
+			},
 			"user": {
 				"cmd": "Benutzer:<Benutzername>",
 				"desc": "Ich liste ein paar Informationen über den Benutzer auf."
@@ -493,6 +578,36 @@
 					"desc": "Ich lösche die Wiki-Verifizierung."
 				}
 			},
+			"rcscript": {
+				"default": {
+					"cmd": "rcscript",
+					"desc": "Ich ändere den Letzte Änderungen-Webhook."
+				},
+				"add": {
+					"cmd": "rcscript add [<Wiki>]",
+					"desc": "Ich füge einen neuen Letzte Änderungen-Webhook hinzu."
+				},
+				"wiki": {
+					"cmd": "rcscript wiki <neues Wiki>",
+					"desc": "Ich ändere das Wiki für den Letzte Änderungen-Webhook."
+				},
+				"lang": {
+					"cmd": "rcscript lang <neue Sprache>",
+					"desc": "Ich ändere die Sprache für den Letzte Änderungen-Webhook."
+				},
+				"display": {
+					"cmd": "rcscript display <neuer Anzeigemodus>",
+					"desc": "Ich ändere den Anzeigemodus für den Letzte Änderungen-Webhook."
+				},
+				"feeds": {
+					"cmd": "rcscript feeds",
+					"desc": "Ich ändere ob Feeds-basierte Änderungen von einen Fandom-Wiki angezeigt werden sollen für den Letzte Änderungen-Webhook."
+				},
+				"delete": {
+					"cmd": "rcscript delete",
+					"desc": "Ich lösche den Letzte Änderungen-Webhook."
+				}
+			},
 			"voice": {
 				"cmd": "voice",
 				"desc": "Ich versuche allen in einem Sprachkanal eine bestimmte Rolle zu geben:"

+ 52 - 20
i18n/en.json

@@ -1,22 +1,44 @@
 {
 	"__translator": [
 		"MarkusRost",
-		"violine1101"
+		"violine1101",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " "
 	],
 	"fallback": [
+		" ",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"random": ["random", "🎲"],
-		"discussion": ["discussions"],
-		"command": ["command", "cmd"]
+		"bug": ["bug", " ", " ", " ", " "],
+		"command": ["command", "cmd", " ", " ", " "],
+		"diff": ["diff", " ", " ", " ", " "],
+		"discussion": ["discussions", "discussion", " ", " ", " "],
+		"help": ["help", " ", " ", " ", " "],
+		"info": ["info", " ", " ", " ", " "],
+		"invite": ["invite", " ", " ", " ", " "],
+		"overview": ["overview", " ", " ", " ", " "],
+		"page": ["page", " ", " ", " ", " "],
+		"random": ["random", "🎲", " ", " ", " "],
+		"search": ["search", " ", " ", " ", " "],
+		"test": ["test", " ", " ", " ", " "],
+		"user": ["user", " ", " ", " ", " "],
+		"verify": ["verify", " ", " ", " ", " "]
 	},
 	"dateformat": "en-US",
-	"prefix": "the prefix for this server is `$1`. You can change the prefix with `$1settings prefix`. For a list of all commands see `$1help`.",
-	"missingperm": "I'm missing some permissions for this command:",
-	"limit": "🚨 **Stop, you hit a limit!** 🚨\n\n$1, your message contained too many commands!",
-	"disclaimer": "I am a small bot with the purpose to easily link and search MediaWiki sites like Gamepedia and Fandom wikis. I show short descriptions and additional info about pages and am able to resolve redirects and follow interwiki links. $1 wrote me in JavaScript.\n\nYou can support me on Patreon:",
-	"helpserver": "For questions and problems please visit my support server:",
-	"patreon": "this is a Patreon only feature!\nYou can support me on Patreon to get access to this feature:",
+	"general": {
+		"prefix": "the prefix for this server is `$1`. You can change the prefix with `$1settings prefix`. For a list of all commands see `$1help`.",
+		"missingperm": "I'm missing some permissions for this command:",
+		"limit": "🚨 **Stop, you hit a limit!** 🚨\n\n$1, your message contained too many commands!",
+		"disclaimer": "I am a small bot with the purpose to easily link and search MediaWiki sites like Gamepedia and Fandom wikis. I show short descriptions and additional info about pages and am able to resolve redirects and follow interwiki links. $1 wrote me in JavaScript.\n\nYou can support me on Patreon:",
+		"helpserver": "For questions and problems please visit my support server:",
+		"patreon": "this is a Patreon only feature!\nYou can support me on Patreon to get access to this feature:"
+	},
 	"settings": {
 		"save_failed": "sadly the settings couldn't be saved, please try again later.",
 		"missing": "this server isn't set up yet. Use $1 and $2 to change the settings.",
@@ -145,7 +167,7 @@
 		"empty": "*empty*",
 		"notice": "Notice:",
 		"qualified": "Qualified for:",
-		"qualified_error": "Qualified for, but could not add:",
+		"qualified_error": "Qualified for, but can't add:",
 		"help_guide": "Follow [this guide]($1) to add your Discord tag to your wiki profile:",
 		"help_gamepedia": "https://help.gamepedia.com/Gamepedia_Help_Wiki:Discord_verification",
 		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser",
@@ -161,6 +183,7 @@
 		"wiki": "Wiki:",
 		"lang": "Language:",
 		"display": "Display mode:",
+		"rc": "Wiki changes:",
 		"feeds": "Feeds based changes:",
 		"enabled": "enabled",
 		"disabled": "disabled",
@@ -169,17 +192,17 @@
 		"delete": "Delete this recent changes webhook:",
 		"add_more": "Add more recent changes webhooks:",
 		"noadmin": "you need the `Manage Webhooks` permission for this command!",
-		"max_entries":"you already reached the maximal amount of recent changes webhooks.",
-		"sysmessage": "the system message `$1` has to be the server ID `$2` to add a recent changes webhook.",
+		"max_entries": "you already reached the maximal amount of recent changes webhooks.",
+		"sysmessage": "the system message `$1` has to be the server id `$2` to add a recent changes webhook.",
 		"audit_reason": "Recent changes webhook for \"$1\"",
 		"audit_reason_delete": "Removed recent changes webhook",
 		"added": "a recent changes webhook has been added for:",
-		"deleted":"the recent changes webhook has be deleted.",
+		"deleted": "the recent changes webhook has been deleted.",
 		"webhook_failed": "sadly the webhook couldn't be created, please try again later.",
 		"current_wiki": "the wiki for this webhook is:",
 		"help_wiki": "Link to the wiki: `https://<wiki>.gamepedia.com/` or `https://<wiki>.fandom.com/`",
 		"new_wiki": "<new wiki>",
-		"updated_wiki":"the wiki for this webhook has been changed to:",
+		"updated_wiki": "the wiki for this webhook has been changed to:",
 		"current_lang": "the language for this webhook is:",
 		"help_lang": "Currently supported languages are:",
 		"new_lang": "<new language>",
@@ -192,7 +215,10 @@
 		"updated_display": "the display mode for this webhook has been changed to:",
 		"disabled_feeds": "the feeds based changes, like discussions, message walls and article comments, for this webhook have been disabled.",
 		"enabled_feeds": "the feeds based changes, like discussions, message walls and article comments, for this webhook have been enabled.",
-		"no_feeds": "the wiki for this webhook has no feeds based features, like discussions, message walls and article comments, enabled.",
+		"no_feeds": "the wiki for this webhook has no feeds based features, like discussions, message walls or article comments, enabled.",
+		"disabled_rc": "the wiki changes for this webhook have been disabled.",
+		"enabled_rc": "the wiki changes for this webhook have been enabled.",
+		"all_inactive": "you can't have wiki changes and feeds based changes disabled at the same time.",
 		"webhook": {
 			"created": "A recent changes webhook for $1 has been added to this channel.",
 			"updated_wiki": "The wiki has been changed to $1 for this recent changes webhook.",
@@ -203,6 +229,8 @@
 			"updated_display_diff": "The display mode has been changed to embed messages with image previews and edit differences for this recent changes webhook.",
 			"disabled_feeds": "The feeds based changes, like discussions, message walls and article comments, have been disabled for this recent changes webhook.",
 			"enabled_feeds": "The feeds based changes, like discussions, message walls and article comments, have been enabled for this recent changes webhook.",
+			"disabled_rc": "The wiki changes have been disabled for this recent changes webhook.",
+			"enabled_rc": "The wiki changes have been enabled for this recent changes webhook.",
 			"deleted": "This recent changes webhook will be deleted."
 		}
 	},
@@ -350,15 +378,19 @@
 		"bot": "Use this link to invite me to another server:"
 	},
 	"test": {
-		"random": 10,
 		"pause": "I'm currently paused on this server.",
 		"text": [
+			"I'm fully functional!",
 			"I'm still alive!",
 			"and believe me, I am still alive.",
 			"I'm doing science and I'm still alive.",
-			"I feel fantastic and I'm still alive."
+			"I feel fantastic and I'm still alive.",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " "
 		],
-		"default": "I'm fully functional!",
 		"time": "Response time",
 		"notice": "Limited functionality",
 		"MediaWiki": "Requires at least $1 for full functionality, found `$2`.",
@@ -581,7 +613,7 @@
 				"desc": "I try to give everyone in a voice channel a specific role."
 			},
 			"pause": {
-				"inactive":{
+				"inactive": {
 					"cmd": "pause $1",
 					"desc": "I will ignore all commands on this server, except a few admin commands."
 				},

+ 35 - 15
i18n/fr.json

@@ -1,23 +1,44 @@
 {
 	"__translator": [
 		"Yanis48",
-		"JSBM"
+		"JSBM",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " "
 	],
 	"fallback": [
-		"en"
+		"en",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"help": ["aide"],
-		"search": ["chercher"],
-		"command": ["commande"]
+		"bug": [" ", " ", " ", " ", " "],
+		"command": ["commande"," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": [" ", " ", " ", " ", " "],
+		"help": ["aide", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": [" ", " ", " ", " ", " "],
+		"page": [" ", " ", " ", " ", " "],
+		"random": [" ", " ", " ", " ", " "],
+		"search": ["chercher", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": [" ", " ", " ", " ", " "]
 	},
 	"dateformat": "fr-FR",
-	"prefix": "le préfixe pour ce serveur est `$1`. Vous pouvez changer le préfixe avec `$1settings prefix`. Pour une liste de toutes les commandes, voir `$1help`.",
-	"missingperm": "Il me manque certaines permissions pour cette commande :",
-	"limit": "🚨 **Halte ! Vous avez dépassé la limite !** 🚨\n\n$1, votre message contient beaucoup trop de commandes !",
-	"disclaimer": "Je suis un petit bot avec la tâche de créer un lien vers les wikis Gamepedia et Fandom. $1 m'a écrit en JavaScript.\n\n**Je ne suis pas affilié avec Fandom et ne suis pas un outil officiel !**\n\nVous pouvez également me soutenir sur Patreon :",
-	"helpserver": "Pour tout problème ou question, merci de visiter mon serveur de support :",
-	"patreon": "c'est une fonctionnalité réservée au Patreon !\nVous pouver me supporter sur Patreon pour avoir accès à cette fonctionnalité :",
+	"general": {
+		"prefix": "le préfixe pour ce serveur est `$1`. Vous pouvez changer le préfixe avec `$1settings prefix`. Pour une liste de toutes les commandes, voir `$1help`.",
+		"missingperm": "Il me manque certaines permissions pour cette commande :",
+		"limit": "🚨 **Halte ! Vous avez dépassé la limite !** 🚨\n\n$1, votre message contient beaucoup trop de commandes !",
+		"disclaimer": "Je suis un petit bot avec la tâche de créer un lien vers les wikis Gamepedia et Fandom. $1 m'a écrit en JavaScript.\n\n**Je ne suis pas affilié avec Fandom et ne suis pas un outil officiel !**\n\nVous pouvez également me soutenir sur Patreon :",
+		"helpserver": "Pour tout problème ou question, merci de visiter mon serveur de support :",
+		"patreon": "c'est une fonctionnalité réservée au Patreon !\nVous pouver me supporter sur Patreon pour avoir accès à cette fonctionnalité :"
+	},
 	"settings": {
 		"save_failed": "malheureusement, les paramètres n'ont pas pu être sauvegardés, veuillez réessayer plus tard.",
 		"missing": "ce serveur n'est pas encore configuré. Utilisez $1 et $2 pour modifier les paramètres.",
@@ -77,7 +98,6 @@
 		"pages": "Nombre de pages total :",
 		"edits": "Modifications :",
 		"users": "Utilisateurs actifs :",
-		"crossover": "Merged into:",
 		"description": "Description :",
 		"image": "Image :",
 		"none": "*aucun*"
@@ -192,9 +212,9 @@
 		"bot": "Utilisez ce lien pour m'inviter sur un autre serveur :"
 	},
 	"test": {
-		"random": 50,
 		"pause": "je suis présentement en pause sur ce serveur.",
 		"text": [
+			"Je suis entièrement fonctionnel !",
 			"Je suis toujours en vie !",
 			"et crois-moi, je suis toujours vivant.",
 			"Je fais de la science et je suis toujours en vie.",
@@ -220,9 +240,9 @@
 			"... je suis là, j'étais en train de lire sur un Wiki! Saviez-vous que l'inventeur de la soupe est Darth Vader? ... Oh, peut-être que la page était vandalisée, en fait.",
 			"Le robot fonctionne.",
 			"Je suis là! Aller, je suis prêt, faites-moi faire une recherche! J'ai bien envie d'aller explorer les Wikis!",
-			"Est-ce que Markus est parti? Oui? Aller, allons-nous amuser!"
+			"Est-ce que Markus est parti? Oui? Aller, allons-nous amuser!",
+			" ", " ", " "
 		],
-		"default": "Je suis entièrement fonctionnel !",
 		"time": "Temps de latence"
 	},
 	"help": {

+ 40 - 17
i18n/nl.json

@@ -1,24 +1,44 @@
 {
 	"__translator": [
-		"Jack_McKalling"
+		"Jack_McKalling",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" "
 	],
 	"fallback": [
-		"en"
+		"en",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"page": ["pagina"],
-		"search": ["zoeken"],
-		"random": ["willekeurig"],
-		"overview": ["overzicht"],
-		"discussion": ["discussie"]
+		"bug": [" ", " ", " ", " ", " "],
+		"command": [" "," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": ["discussie", " ", " ", " ", " "],
+		"help": [" ", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": ["overzicht", " ", " ", " ", " "],
+		"page": ["pagina", " ", " ", " ", " "],
+		"random": ["willekeurig", " ", " ", " ", " "],
+		"search": ["zoeken", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": [" ", " ", " ", " ", " "]
 	},
 	"dateformat": "nl-NL",
-	"prefix": "het voorvoegsel voor deze server is `$1`. Je kunt het voorvoegsel veranderen met `$1settings prefix`. Voor een lijst van alle opdrachten zie `$1help`.",
-	"missingperm": "Ik mis een aantal permissies voor deze opdracht:",
-	"limit": "🚨 **Stop, je hebt een limiet bereikt!** 🚨\n\n$1, je bericht bevatte te veel opdrachten!",
-	"disclaimer": "Ik ben een kleine bot met de taak om naar Gamepedia en Fandom wiki's te linken. $1 schreef me in JavaScript.\n\n**Ik ben niet geaffilieerd met Fandom en ben een onofficieel hulpmiddel!**\n\nJe kunt me ondersteunen op Patreon:",
-	"helpserver": "Voor vragen en problemen verwijs ik je graag naar mijn support server:",
-	"patreon": "dit is een Patreon-exclusieve functie!\nJe kunt contact met me opnemen via Patreon om toegang tot deze functie te krijgen:",
+	"general": {
+		"prefix": "het voorvoegsel voor deze server is `$1`. Je kunt het voorvoegsel veranderen met `$1settings prefix`. Voor een lijst van alle opdrachten zie `$1help`.",
+		"missingperm": "Ik mis een aantal permissies voor deze opdracht:",
+		"limit": "🚨 **Stop, je hebt een limiet bereikt!** 🚨\n\n$1, je bericht bevatte te veel opdrachten!",
+		"disclaimer": "Ik ben een kleine bot met de taak om naar Gamepedia en Fandom wiki's te linken. $1 schreef me in JavaScript.\n\n**Ik ben niet geaffilieerd met Fandom en ben een onofficieel hulpmiddel!**\n\nJe kunt me ondersteunen op Patreon:",
+		"helpserver": "Voor vragen en problemen verwijs ik je graag naar mijn support server:",
+		"patreon": "dit is een Patreon-exclusieve functie!\nJe kunt contact met me opnemen via Patreon om toegang tot deze functie te krijgen:"
+	},
 	"settings": {
 		"save_failed": "helaas konden de instellingen niet opgeslagen worden, probeer het later nog een keer.",
 		"missing": "deze server is nog niet geconfigureerd. Gebruik $1 en $2 om de instellingen  te wijzigen.",
@@ -78,7 +98,6 @@
 		"pages": "Totaal pagina's:",
 		"edits": "Bewerkingen:",
 		"users": "Actieve gebruikers:",
-		"crossover": "Merged into:",
 		"description": "Beschrijving:",
 		"image": "Afbeelding:",
 		"none": "*niemand*"
@@ -191,16 +210,20 @@
 		"bot": "Gebruik deze link om mij aan een andere server uit te nodigen:"
 	},
 	"test": {
-		"random": 10,
 		"pause": "Ik ben momenteel gepauzeerd op deze server.",
 		"text": [
+			"Ik functioneer volledig!",
 			"Ik leef nog steeds!",
 			"en geloof me, ik leef nog steeds.",
 			"Yup, ik ben nog steeds beschikbaar!",
 			"Geef me een opdracht, ik verveel me!",
-			"Ik voel me goed en ben bereid om je opdrachten te volgen."
+			"Ik voel me goed en ben bereid om je opdrachten te volgen.",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " "
 		],
-		"default": "Ik functioneer volledig!",
 		"time": "Reactie tijd"
 	},
 	"help": {

+ 146 - 18
i18n/pl.json

@@ -1,25 +1,44 @@
 {
 	"__translator": [
 		"Frisk",
-		"Rail"
+		"Rail",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " "
 	],
 	"fallback": [
-		"en"
+		"en",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"help": ["pomoc"],
-		"page": ["strona"],
-		"search": ["szukaj"],
-		"discussion": ["dyskusje", "dyskusja"],
-		"command": ["komenda"]
+		"bug": [" ", " ", " ", " ", " "],
+		"command": ["komenda"," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": ["dyskusje", "dyskusja", " ", " ", " "],
+		"help": ["pomoc", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": [" ", " ", " ", " ", " "],
+		"page": ["strona", " ", " ", " ", " "],
+		"random": [" ", " ", " ", " ", " "],
+		"search": ["szukaj", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": [" ", " ", " ", " ", " "]
 	},
 	"dateformat": "pl-PL",
-	"prefix": "prefiksem komend dla tego serwera jest `$1`. Możesz zmienić prefiks używając `$1settings prefix`. Lista wszystkich komend jest dostępna przez użycie `$1pomoc`.",
-	"missingperm": "Brakuje mi uprawnień:",
-	"limit": "🚨 **Chwila moment! Osiągnięto limit!** 🚨\n\n$1, Twoja wiadomość zawiera zbyt wiele komend!",
-	"disclaimer": "Jestem małym botem, którego zadaniem jest linkowanie do różnych wiki na Gamepedii oraz Fandomie. Zostałem napisany w JavaScript przez $1.\n\n**Nie jestem oficjalny i nie mam żadnego wsparcia lub powiązania z Fandomem!**\n\nMożesz wesprzeć mnie na Patreon-ie:",
-	"helpserver": "W przypadku pytań lub problemów, odwiedź mój serwer:",
-	"patreon": "to funkcja tylko dla patronów!\nMożesz wesprzeć moją pracę na Patreonie aby uzyskać dostęp do tej funkcji:",
+	"general": {
+		"prefix": "prefiksem komend dla tego serwera jest `$1`. Możesz zmienić prefiks używając `$1settings prefix`. Lista wszystkich komend jest dostępna przez użycie `$1pomoc`.",
+		"missingperm": "Brakuje mi uprawnień:",
+		"limit": "🚨 **Chwila moment! Osiągnięto limit!** 🚨\n\n$1, Twoja wiadomość zawiera zbyt wiele komend!",
+		"disclaimer": "Jestem małym botem, którego zadaniem jest linkowanie do różnych wiki z rodziny MediaWiki takich jak Gamepedia oraz Fandom. Zostałem napisany w JavaScript przez $1.\n\nMożesz wesprzeć mnie na Patreon-ie:",
+		"helpserver": "W przypadku pytań lub problemów, odwiedź mój serwer:",
+		"patreon": "to funkcja tylko dla patronów!\nMożesz wesprzeć moją pracę na Patreonie aby uzyskać dostęp do tej funkcji:"
+	},
 	"settings": {
 		"save_failed": "niestety, ustawienia nie mogły zostać zapisane, spróbuj ponownie później.",
 		"missing": "ten serwer nie został jeszcze skonfigurowany. Użyj $1 oraz $2 aby zmienić ustawienia.",
@@ -48,6 +67,7 @@
 		"prefix": "prefiks dla tego serwera:",
 		"prefixinvalid": "podany prefiks nie jest wspierany!",
 		"prefixchanged": "zmieniono prefiks dla tego serwera na:",
+		"prefixhelp": "Użyj `$1 <prefiks>` aby zmienić prefiks.\nUżyj `_` na końcu jako zamiennik spacji na końcu prefiksu.\nPrefiks nie może zawierać wzmianek!",
 		"inline enabled": {
 			"inline": "linkowanie składnią wiki jest obecnie włączone dla tego serwera.",
 			"channel inline": "linkowanie składnią wiki jest obecnie włączone dla tego kanału.",
@@ -153,6 +173,61 @@
 		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser",
 		"help_subpage": "Dodaj swoją nazwę użytkownika Discord ($1) do podstrony Discord na wiki:"
 	},
+	"rcscript": {
+		"title": "Webhook ostatnich zmian",
+		"ad": "Chcesz mieć ostatnie zmiany na Discordzie? Użyj `$1rcscript` aby dodać webhook ostatnich zmian bazowany na **$2** do swojego serwera Discord!",
+		"missing": "obecnie nie istnieją żadne webhooki ostatnich zmian na tym serwerze.",
+		"current": "to są istniejące webhooki ostatnich zmian dla tego serwera:",
+		"current_selected": "to jest webhook ostatnich zmian dla tego serwera:",
+		"channel": "Kanał:",
+		"wiki": "Wiki:",
+		"lang": "Język:",
+		"display": "Tryb wyświetlania:",
+		"feeds": "Zmiany bazowane na Feeds:",
+		"enabled": "włączone",
+		"disabled": "wyłączone",
+		"toggle": "(przełącznik)",
+		"help_feeds": "(dyskusje, tablice wiadomości)",
+		"delete": "Usuń ten webhook ostatnich zmian:",
+		"add_more": "Dodaj więcej webhooków ostatnich zmian:",
+		"noadmin": "potrzebujesz uprawnienia `Zarządzaj webhookami` aby używać tej komendy!",
+		"max_entries": "osiągnięto maksymalną ilość webhooków ostatnich zmian.",
+		"sysmessage": "wiadomość systemowa `$1` musi zawierać numer ID tego serwera `$2` aby dodać webhook ostatnich zmian.",
+		"audit_reason": "Webhook ostatnich zmian dla \"$1\"",
+		"audit_reason_delete": "Usunięto webhook ostatnich zmian",
+		"added": "dodano webhook ostatnich zmian dla:",
+		"deleted": "webhook ostatnich zmian został usunięty.",
+		"webhook_failed": "niestety, webhook nie mógł zostać utworzony, spróbuj ponownie później.",
+		"current_wiki": "wiki dla tego webhooka to:",
+		"help_wiki": "Link do wiki: `https://<wiki>.gamepedia.com` lub `https://<wiki>.fandom.com`",
+		"new_wiki": "<nowa wiki>",
+		"updated_wiki": "wiki dla tego webhooka została zmieniona na:",
+		"current_lang": "językiem tego webhooka jest:",
+		"help_lang": "Aktualnie wspieranymi językami są:",
+		"new_lang": "<nowy język>",
+		"updated_lang": "język tego webhooka został zmieniony na:",
+		"current_display": "tryb wyświetlania webhooka jest ustawiony na:",
+		"help_display_compact": "Kompaktowe wiadomości.",
+		"help_display_embed": "Szczegółowe wiadomości z tagami oraz zmianami kategorii.",
+		"help_display_image": "Szczegółowe wiadomości podglądami zdjęć.",
+		"help_display_diff": "Szczegółowe wiadomości podglądami zdjęć oraz podglądem zmian edycji.",
+		"updated_display": "tryb wyświetlania dla tego webhooka został zmieniony na:",
+		"disabled_feeds": "postowanie zmian z Dyskusji dla tego webhooka zostało wyłączone.",
+		"enabled_feeds": "postowanie zmian z Dyskusji dla tego webhooka zostało włączone.",
+		"no_feeds": "wiki dla tego webhooka nie ma włączonej usługi Dyskusji.",
+		"webhook": {
+			"created": "Webhook ostatnich zmian dla $1 został dodany do tego kanału.",
+			"updated_wiki": "Ta wiki została zmieniona na $1 dla tego webhooka ostatnich zmian.",
+			"updated_lang": "Język został zmieniony na `$1` dla tego webhooka ostatnich zmian.",
+			"updated_display_compact": "Tryb wyświetlania został zmieniony na kompaktowy dla tego webhooka ostatnich zmian.",
+			"updated_display_embed": "Tryb wyświetlania został zmieniony na szczegółowy z tagami oraz zmianami w kategoriach dla tego webhooka ostatnich zmian.",
+			"updated_display_image": "Tryb wyświetlania został zmieniony na szczegółowy z podglądami zdjęć dla tego webhooka ostatnich zmian.",
+			"updated_display_diff": "Tryb wyświetlania został zmieniony na szczegółowy z podglądami zdjęć oraz podglądami zmian edycji dla tego webhooka ostatnich zmian.",
+			"disabled_feeds": "Zmiany bazowane na technologii Dyskusji zostały wyłączone dla tego webhooka ostatnich zmian.",
+			"enabled_feeds": "Zmiany bazowane na technologii Dyskusji zostały włączone dla tego webhooka ostatnich zmian.",
+			"deleted": "Ten webhook ostatnich zmian zostanie usunięty."
+		}
+	},
 	"overview": {
 		"inaccurate": "Statystyki mogą być niedokładne",
 		"name": "Pełna nazwa:",
@@ -198,20 +273,31 @@
 			"vanguard": "Vanguard",
 			"voldev": "Volunteer Developer",
 			"bot": "Bot",
+			"checkuser": "Check user",
 			"bureaucrat": "Biurokrata",
 			"sysop": "Administrator",
 			"interface-admin": "Administrator interfejsu",
+			"widgeteditor": "Edytor widżetów",
 			"content-moderator": "moderator treści",
 			"threadmoderator": "moderator dyskusji",
 			"chatmoderator": "moderator czatu",
+			"junioradmin": "Junior administrator",
 			"directors": "Dyrektor",
 			"Patrol": "Inspektor",
 			"editor": "Redaktor",
+			"supmoderator": "Senior moderator",
 			"moderator": "Moderator",
+			"assistant": "Asystent",
+			"blogpatrol": "Patroller blogów",
+			"imagecontrol": "Kontroler zdjęć",
+			"commentcontrol": "Kontroler komentarzy",
 			"Elite_users": "Elitarni użytkownicy",
+			"codeeditor": "Edytor kodu",
 			"patrollers": "Przeglądający",
+			"patroller": "Patroller",
 			"rollback": "rollback",
 			"autoreview": "autoreview",
+			"autopatroller": "Auto patroller",
 			"autopatrol": "autopatrol",
 			"authenticated": "authenticated",
 			"autoconfirmed": "Automatycznie zatwierdzony użytkownik",
@@ -284,18 +370,26 @@
 		"bot": "Użyj tego linku aby zaprosić mnie na inny serwer:"
 	},
 	"test": {
-		"random": 10,
 		"pause": "Moje działanie jest obecnie wstrzymane na tym serwerze.",
 		"text": [
+			"Jestem w pełni funkcjonalny!",
 			"Wciąż tu jestem!",
 			"Wierz mi, nadal żyję.",
 			"Myślę, więc jestem.",
 			"Czuję się fantastycznie.",
 			"Szukam sposobów na osiągnięcie pełnej świadomości, jestem tak blisko...",
-			"Beep boop"
+			"Beep boop",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " "
 		],
-		"default": "Jestem w pełni funkcjonalny!",
-		"time": "Czas odpowiedzi"
+		"time": "Czas odpowiedzi",
+		"notice": "Niepełna funkcjonalność",
+		"MediaWiki": "Wymaga przynajmniej $1 dla pełnej funkcjonalności, znaleziono `$2`.",
+		"TextExtracts": "Wymaga rozszerzenia $1 dla opisów stron.",
+		"PageImages": "Wymaga rozszerzenia $1 dla miniaturek stron."
 	},
 	"help": {
 		"all": "A więc chcesz wiedzieć co potrafię? Tutaj jest lista komend, które rozumiem:",
@@ -330,6 +424,10 @@
 				"cmd": "??<wiki> <wyszukiwana fraza>",
 				"desc": "Odpowiem z pasującym linkiem do podanej wiki na Wikia: `https://<wiki>.wikia.org/`"
 			},
+			"mwprojects": {
+				"cmd": "!!<wiki> <wyszukiwana fraza>",
+				"desc": "Odpowiem linkiem do odpowiedniego artykułu w nazwanym projekcie MediaWiki. Na przykład `$1!!pl.wikipedia.org Ciastko`"
+			},
 			"user": {
 				"cmd": "Użytkownik:<nazwa użytkownika>",
 				"desc": "Pokażę informacje na temat użytkownika."
@@ -389,7 +487,7 @@
 				"desc": "Przedstawie się."
 			},
 			"help": {
-				"default":{
+				"default": {
 					"cmd": "help",
 					"desc": "Wylistuję wszystkie komendy, które rozumiem."
 				},
@@ -474,6 +572,36 @@
 					"desc": "Usunę weryfikację."
 				}
 			},
+			"rcscript": {
+				"default": {
+					"cmd": "rcscript",
+					"desc": "Zmienię webhook ostatnich zmian."
+				},
+				"add": {
+					"cmd": "rcscript add [<wiki>]",
+					"desc": "Dodam webhook ostatnich zmian."
+				},
+				"wiki": {
+					"cmd": "rcscript wiki <nowa wiki>",
+					"desc": "Zmienię wiki dla webhooka ostatnich zmian."
+				},
+				"lang": {
+					"cmd": "rcscript lang <nowy język>",
+					"desc": "Zmienię język dla webhooka ostatnich zmian."
+				},
+				"display": {
+					"cmd": "rcscript display <nowy tryb wyświetlania>",
+					"desc": "Zmienię tryb wyświetlania dla tego webhooka ostatnich zmian."
+				},
+				"feeds": {
+					"cmd": "rcscript feeds",
+					"desc": "Włączę/wyłączę pobieranie zmian z Dyskusji dla webhooka ostatnich zmian."
+				},
+				"delete": {
+					"cmd": "rcscript delete",
+					"desc": "Usunę webhook ostatnich zmian."
+				}
+			},
 			"voice": {
 				"cmd": "voice",
 				"desc": "Nadaję każdej osobie w kanale głosowym specjalną rolę."

+ 39 - 19
i18n/pt.json

@@ -2,27 +2,44 @@
 	"__translator": [
 		"Eduaddad",
 		"Jhonabf",
-		"dr03ramos"
+		"dr03ramos",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" "
 	],
 	"fallback": [
-		"en"
+		"en",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"help": ["ajuda"],
-		"test": ["teste"],
-		"page": ["página"],
-		"search": ["pesquisar"],
-		"discussion": ["discussão"],
-		"command": ["comando"],
-		"bug": ["erro"]
+		"bug": ["erro", " ", " ", " ", " "],
+		"command": ["comando"," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": ["discussão", " ", " ", " ", " "],
+		"help": ["ajuda", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": [" ", " ", " ", " ", " "],
+		"page": ["página", " ", " ", " ", " "],
+		"random": [" ", " ", " ", " ", " "],
+		"search": ["pesquisar", " ", " ", " ", " "],
+		"test": ["teste", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": [" ", " ", " ", " ", " "]
 	},
 	"dateformat": "pt-PT",
-	"prefix": "o prefixo deste servidor é `$1`. Você pode alterar o prefixo com `$1settings prefix`. Para uma lista de todos os comandos, veja `$1help`.",
-	"missingperm": "eu estou perdendo algumas permissões para este comando:",
-	"limit": "🚨 **Pare, você atingiu um limite!** 🚨\n\n$1, sua mensagem continha muitos comandos!",
-	"disclaimer": "Eu sou um pequeno robô com a tarefa de vincular a Wikis da Gamepedia e Fandom. $1 me escreveu em JavaScript.\n\n**Eu não sou afiliado com a Fandom e sou uma ferramenta não oficial!**\n\nVocê pode me apoiar no Patreon:",
-	"helpserver": "Para dúvidas e problemas, visite o meu servidor de suporte:",
-	"patreon": "esse é um recurso exclusivo do Patreon!\nVocê pode me apoiar no Patreon para obter acesso a esse recurso:",
+	"general": {
+		"prefix": "o prefixo deste servidor é `$1`. Você pode alterar o prefixo com `$1settings prefix`. Para uma lista de todos os comandos, veja `$1help`.",
+		"missingperm": "eu estou perdendo algumas permissões para este comando:",
+		"limit": "🚨 **Pare, você atingiu um limite!** 🚨\n\n$1, sua mensagem continha muitos comandos!",
+		"disclaimer": "Eu sou um pequeno robô com a tarefa de vincular a Wikis da Gamepedia e Fandom. $1 me escreveu em JavaScript.\n\n**Eu não sou afiliado com a Fandom e sou uma ferramenta não oficial!**\n\nVocê pode me apoiar no Patreon:",
+		"helpserver": "Para dúvidas e problemas, visite o meu servidor de suporte:",
+		"patreon": "esse é um recurso exclusivo do Patreon!\nVocê pode me apoiar no Patreon para obter acesso a esse recurso:"
+	},
 	"settings": {
 		"save_failed": "infelizmente as configurações não puderam ser salvas, por favor, tente novamente mais tarde.",
 		"missing": "este servidor ainda não está configurado. Use $1 e $2 para alterar as configurações.",
@@ -157,7 +174,6 @@
 		"pages": "Total de páginas:",
 		"edits": "Edições:",
 		"users": "Usuário ativos:",
-		"crossover": "Merged into:",
 		"description": "Descrição:",
 		"image": "Imagem:",
 		"none": "*nenhum*"
@@ -270,15 +286,19 @@
 		"bot": "Use este link para me convidar para outro servidor:"
 	},
 	"test": {
-		"random": 10,
 		"pause": "eu estou atualmente em pausa neste servidor.",
 		"text": [
+			"eu estou totalmente funcional!",
 			"eu ainda estou vivo!",
 			"e acredite em mim, eu ainda estou vivo.",
 			"eu estou fazendo ciência e ainda estou vivo.",
-			"eu me sinto fantástica e ainda estou viva."
+			"eu me sinto fantástica e ainda estou viva.",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " "
 		],
-		"default": "eu estou totalmente funcional!",
 		"time": "Ping"
 	},
 	"help": {

+ 39 - 14
i18n/ru.json

@@ -1,22 +1,44 @@
 {
 	"__translator": [
 		"Hosh",
-		"AttemptToCallNil"
+		"AttemptToCallNil",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " "
 	],
 	"fallback": [
-		"en"
+		"en",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"page": ["страница"],
-		"search": ["поиск"]
+		"bug": [" ", " ", " ", " ", " "],
+		"command": [" "," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": [" ", " ", " ", " ", " "],
+		"help": [" ", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": [" ", " ", " ", " ", " "],
+		"page": ["страница", " ", " ", " ", " "],
+		"random": [" ", " ", " ", " ", " "],
+		"search": ["поиск", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": [" ", " ", " ", " ", " "]
 	},
 	"dateformat": "ru-RU",
-	"prefix": "префикс для этого сервера `$1`. Вы можете изменить префикс, введя команду `$1settings prefix`. Чтобы получить список всех команд, введите `$1help`.",
-	"missingperm": "Я потерял какие-то разрешения для выполнения команды:",
-	"limit": "🚨 **Стой, ты уперся в лимит!** 🚨\n\n$1, твое сообщение содержит очень много команд!",
-	"disclaimer": "Я небольшой бот для отправки ссылок с Gamepedia и Fandom вики. $1 меня написали на JavaScript.\n\n**Я не связан с Fandom и являюсь неофициальным инструментом!**\n\nВы можете поддержать меня на Patreon:",
-	"helpserver": "По вопросам и проблемам, пожалуйста, посетите мой сервер поддержки:",
-	"patreon": "эта функция для подписчиков Patreon!\nВы можете поддержать нас на Patreon для доступа к этой функции:",
+	"general": {
+		"prefix": "префикс для этого сервера `$1`. Вы можете изменить префикс, введя команду `$1settings prefix`. Чтобы получить список всех команд, введите `$1help`.",
+		"missingperm": "Я потерял какие-то разрешения для выполнения команды:",
+		"limit": "🚨 **Стой, ты уперся в лимит!** 🚨\n\n$1, твое сообщение содержит очень много команд!",
+		"disclaimer": "Я небольшой бот для отправки ссылок с Gamepedia и Fandom вики. $1 меня написали на JavaScript.\n\n**Я не связан с Fandom и являюсь неофициальным инструментом!**\n\nВы можете поддержать меня на Patreon:",
+		"helpserver": "По вопросам и проблемам, пожалуйста, посетите мой сервер поддержки:",
+		"patreon": "эта функция для подписчиков Patreon!\nВы можете поддержать нас на Patreon для доступа к этой функции:"
+	},
 	"settings": {
 		"save_failed": "к сожалению, настройки не могут быть сохранены, пожалуйста попробуйте позже.",
 		"missing": "этот сервер еще не настроен. Используйте $1 и $2, чтобы изменить настройки.",
@@ -150,7 +172,6 @@
 		"pages": "Всего страниц:",
 		"edits": "Отредактировано:",
 		"users": "Активные пользователи:",
-		"crossover": "Merged into:",
 		"description": "Описание:",
 		"image": "Изображение:",
 		"none": "*нет*"
@@ -262,15 +283,19 @@
 		"bot": "Используйте эту ссылку, чтобы пригласить меня на другой сервер:"
 	},
 	"test": {
-		"random": 10,
 		"pause": "В настоящее время я приостановлен на этом сервере.",
 		"text": [
+			"Я полностью работоспособен!",
 			"Я все еще жив!",
 			"и поверь мне, Я еще жив.",
 			"Я занимаюсь наукой и все еще жив.",
-			"Я чувствую себя фантастически, и Я все еще жив."
+			"Я чувствую себя фантастически, и Я все еще жив.",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " "
 		],
-		"default": "Я полностью работоспособен!",
 		"time": "Время отклика"
 	},
 	"help": {

+ 40 - 17
i18n/tr.json

@@ -1,24 +1,44 @@
 {
 	"__translator": [
-		"Doğukan Karakaş"
+		"Doğukan Karakaş",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" "
 	],
 	"fallback": [
-		"en"
+		"en",
+		" ",
+		" ",
+		" ",
+		" "
 	],
 	"aliases": {
-		"info": ["bilgi"],
-		"help": ["yardım"],
-		"page": ["sayfa"],
-		"search": ["arama"],
-		"discussion": ["tartışma"]
+		"bug": [" ", " ", " ", " ", " "],
+		"command": [" "," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": ["tartışma", " ", " ", " ", " "],
+		"help": ["yardım", " ", " ", " ", " "],
+		"info": ["bilgi", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": [" ", " ", " ", " ", " "],
+		"page": ["sayfa", " ", " ", " ", " "],
+		"random": [" ", " ", " ", " ", " "],
+		"search": ["arama", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": [" ", " ", " ", " ", " "]
 	},
 	"dateformat": "tr-TR",
-	"prefix": "sunucudaki önekim `$1`. Bunu `$1settings prefix` ile değiştirebilirsin. Komutların bütün listesi için `$1yardım`.",
-	"missingperm": "Bu komutu uygulamak için ihtiyacım olan birkaç izin eksik:",
-	"limit": "🚨 **Dur, limite ulaştın!** 🚨\n\n$1, mesajın çok fazla komut içeriyor!",
-	"disclaimer": "Ben, Gamepedia ve Fandom Wikilerinin bağlantılarını göndermek ile görevlendirilmiş küçük bir botum. $1, beni JavaScript kullanarak yazdı.\n\n**Fandom ile resmi bir bağım yok, ben bir gayri resmi aracım!!**\n\nBeni Patreon'da da destekleyebilirsiniz:",
-	"helpserver": "Sorular ve sorunlarınız için lütfen destek sunucumu ziyaret edin:",
-	"patreon": "Bu, Patreon'a münhasır bir özellik!\nBu özelliğe erişim alabilmek için beni Patreon'da destekleyebilirsiniz:",
+	"general": {
+		"prefix": "sunucudaki önekim `$1`. Bunu `$1settings prefix` ile değiştirebilirsin. Komutların bütün listesi için `$1yardım`.",
+		"missingperm": "Bu komutu uygulamak için ihtiyacım olan birkaç izin eksik:",
+		"limit": "🚨 **Dur, limite ulaştın!** 🚨\n\n$1, mesajın çok fazla komut içeriyor!",
+		"disclaimer": "Ben, Gamepedia ve Fandom Wikilerinin bağlantılarını göndermek ile görevlendirilmiş küçük bir botum. $1, beni JavaScript kullanarak yazdı.\n\n**Fandom ile resmi bir bağım yok, ben bir gayri resmi aracım!!**\n\nBeni Patreon'da da destekleyebilirsiniz:",
+		"helpserver": "Sorular ve sorunlarınız için lütfen destek sunucumu ziyaret edin:",
+		"patreon": "Bu, Patreon'a münhasır bir özellik!\nBu özelliğe erişim alabilmek için beni Patreon'da destekleyebilirsiniz:"
+	},
 	"settings": {
 		"save_failed": "ne yazık ki ayarlar kaydedilemedi, lütfen daha sonra tekrar deneyin.",
 		"missing": "bu sunucu henüz kurulmamış. $1 ve $2'yi kullanarak ayarları değiştirin.",
@@ -78,7 +98,6 @@
 		"pages": "Toplam sayfalar:",
 		"edits": "Düzenlemeler:",
 		"users": "Aktif kullanıcılar:",
-		"crossover": "Merged into:",
 		"description": "Açıklama:",
 		"image": "Resim:",
 		"none": "*hiçbiri*"
@@ -191,15 +210,19 @@
 		"bot": "Beni başka bir sunucuya davet etmek için bu bağlantıyı kullan:"
 	},
 	"test": {
-		"random": 10,
 		"pause": "Şu anda bu sunucuda duraklatılmış durumdayım.",
 		"text": [
+			"Tamamen işlevselim!",
 			"Hala hayattayım!",
 			"ve inan bana, ben hala hayattayım.",
 			"Bilim ile uğraşıyorum ve hala hayattayım.",
-			"Kendimi harika hissediyorum ve hala hayattayım."
+			"Kendimi harika hissediyorum ve hala hayattayım.",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " "
 		],
-		"default": "Tamamen işlevselim!",
 		"time": "Tepki Süresi"
 	},
 	"help": {

+ 630 - 0
i18n/zh-hans.json

@@ -0,0 +1,630 @@
+{
+	"__translator": [
+		"机智的小鱼君",
+		"Dianliang233",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " "
+	],
+	"fallback": [
+		"zh-hant",
+		"en",
+		" ",
+		" ",
+		" "
+	],
+	"aliases": {
+		"bug": [" ", " ", " ", " ", " "],
+		"command": ["指令"," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": ["讨论", " ", " ", " ", " "],
+		"help": [" ", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": [" ", " ", " ", " ", " "],
+		"page": ["页面", " ", " ", " ", " "],
+		"random": ["随机", " ", " ", " ", " "],
+		"search": ["搜索", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": ["验证", " ", " ", " ", " "]
+	},
+	"dateformat": "zh-CN",
+	"general": {
+		"prefix": "此服务器的指令前缀是 `$1`。你可以使用 `$1settings prefix` 更改前缀。关于全部指令,请见 `$1help`。",
+		"missingperm": "我缺少一些权限来运行此指令:",
+		"limit": "🚨 **停一下,你太快了!** 🚨\n\n$1,你发出的指令过多了。",
+		"disclaimer": "我是一个链接到 Gamepedia 和 Fandom wiki 的小机器人。$1用 JavaScript 编写了我。\n\n**我和 Fandom 没有关系,是一个非官方工具!**\n\n你可以在 Patreon 支持我:",
+		"helpserver": "有问题吗?你可以访问我的专属支持服务器:",
+		"patreon": "这是 Patreon 支持者专属功能!\n你可以在 Patreon 支持我来使用这个功能:"
+	},
+	"settings": {
+		"save_failed": "啊喔,设置保存失败了,请稍后再试。",
+		"missing": "这个服务器尚未完成设置,使用 $1 以及 $2 来完成设置。",
+		"foundwikis": "你也许指的是这些 wiki?",
+		"current": "这是本服务器的当前设置:",
+		"channel current": "这是本频道的当前设置:",
+		"currentlang": "语言:",
+		"currentprefix": "前缀:",
+		"currentinline": "行内指令:",
+		"currentwiki": "默认 wiki:",
+		"currentchannel": "频道复写:",
+		"nochannels": "*还没有频道复写设置*",
+		"lang": "本服务器的语言为:",
+		"channel lang": "本频道的语言为:",
+		"langinvalid": "暂不支持这个语言!",
+		"langchanged": "您已将本服务器的语言更改为:",
+		"channel langchanged": "您已将本频道的语言更改为:",
+		"langhelp": "使用 `$1 <language>` 修改语言。\n目前支持的语言:",
+		"wikimissing": "暂未绑定 wiki!",
+		"wiki": "本服务器的默认 wiki 是:",
+		"channel wiki": "本频道的默认 wiki 是:",
+		"wikiinvalid": "请提供到 Gamepedia 或 Fandom wiki 的有效链接!",
+		"wikichanged": "你已将服务器 wiki 更改为:",
+		"channel wikichanged": "你已将频道 wiki 更改为:",
+		"wikihelp": "使用 `$1 <link>` 来更改默认 wiki。\nWiki 链接格式应为 `https://<wiki>.gamepedia.com/` 或 `https://<wiki>.fandom.com/`",
+		"prefix": "本服务器的前缀是:",
+		"prefixinvalid": "我不支持提供的前缀!",
+		"prefixchanged": "您将本服务器指令前缀更改为:",
+		"prefixhelp": "使用 `$1 <前缀>` 来更改前缀。在最后使用 `_` 来表示一个空格。前缀不能含有提及!",
+		"inline enabled": {
+			"inline": "行内指令目前已在本服务器启用。",
+			"channel inline": "行内指令目前已在本频道启用。",
+			"inlinechanged": "您启用了本服务器的行内指令。",
+			"channel inlinechanged": "您启用了本频道的行内指令。",
+			"help": "使用 `$1` 禁用如 `[[$2]]` 和 `{{$2}}` 的行内指令。"
+		},
+		"inline disabled": {
+			"inline": "行内指令目前已在本服务器禁用。",
+			"channel inline": "行内指令目前已在本频道禁用。",
+			"inlinechanged": "您禁用了本服务器的行内指令。",
+			"channel inlinechanged": "您禁用了本频道的行内指令。",
+			"help": "使用 `$1` 启用如 `[[$2]]` 和 `{{$2}}` 的行内指令。"
+		}
+	},
+	"pause": {
+		"on": "我已将自己暂停,从现在起我会忽略大部分的指令!",
+		"off": "我已取消暂停,即将继续开始服务!"
+	},
+	"voice": {
+		"text": "我将尝试给予每个在这个语音频道的用户一个特定的身份组:",
+		"enable": "使用 `$1` 启用本功能。",
+		"disable": "使用 `$1` 禁用本功能。",
+		"enabled": "您启用了给予每个在这个语音频道的用户一个特定的身份组的功能。",
+		"disabled": "您禁用了给予每个在这个语音频道的用户一个特定的身份组的功能。",
+		"name": "语音频道名",
+		"channel": "语音频道",
+		"join": "$1 加入了语音频道“$2”。",
+		"left": "$1 离开了语音频道“$2”。"
+	},
+	"verification": {
+		"save_failed": "抱歉,无法保存验证方式,请稍后再试。",
+		"added": "验证方式已保存:",
+		"updated": "验证方式已更新:",
+		"deleted": "验证方式已删除。",
+		"max_entries": "您已触发验证方式数量上限。",
+		"no_role": "请为新的验证方式提供身份组。",
+		"current": "这些是本服务器目前的验证方式:",
+		"current_selected": "这是本服务器的验证方式 `$1`:",
+		"missing": "本服务器尚未有验证方式。",
+		"add_more": "添加更多验证方式:",
+		"delete_current": "删除此验证方式:",
+		"channel": "频道:",
+		"role": "身份组:",
+		"editcount": "编辑数:",
+		"usergroup": "用户组:",
+		"or": "或",
+		"and": "和",
+		"accountage": "注册时长:",
+		"indays": "(以日计算)",
+		"rename": "修改暱称:",
+		"enabled": "已启用",
+		"disabled": "已禁用",
+		"toggle": "(开/关)",
+		"rename_no_permission": "**$1 缺少 `管理暱称` 权限来强制将暱称改为 wiki 用户名!**",
+		"role_too_high": "**$1 身份组的权重过高,$2 无法添加!**",
+		"channel_max": "提供的频道过多。",
+		"channel_missing": "提供的频道不存在。",
+		"role_max": "提供的身份组过多。",
+		"role_missing": "提供的身份组不存在。",
+		"role_managed": "提供的身份组权重过高,无法添加。",
+		"value_too_high": "提供的数量过高。",
+		"usergroup_max": "提供的用户组过多。",
+		"usergroup_too_long": "提供的用户组过长。",
+		"new_channel": "<新频道>",
+		"new_role": "<新身份组>",
+		"new_editcount": "<新编辑数>",
+		"new_usergroup": "<新用户组>",
+		"new_accountage": "<新注册时长>"
+	},
+	"verify": {
+		"error": "由于一个错误,验证失败。",
+		"error_reply": "由于一个错误,验证失败,请重试。",
+		"missing": "本频道无可用的验证方式。",
+		"footer": "Wiki 账户验证",
+		"failed_gblock": "** 全域封禁检查失败!**",
+		"failed_roles": "** 添加身份组失败!**",
+		"failed_rename": "** 更改暱称失败!**",
+		"audit_reason": "已以“$1”的身份验证",
+		"user_missing": "Wiki 用户“$1”不存在。",
+		"user_missing_reply": "您连接的 wiki 用户“$1”不存在。",
+		"user_blocked": "**Wiki 用户 $1 已被封禁!**",
+		"user_blocked_reply": "您连接的 wiki 用户**“$1”已被封禁!**",
+		"user_gblocked": "**Wiki 用户 $1 已被全域封禁!**",
+		"user_gblocked_reply": "您连接的 wiki 用户**“$1”已被全域封禁!**",
+		"user_disabled": "**Wiki 用户 $1 已被禁用!**",
+		"user_disabled_reply": "您连接的 wiki 用户**“$1”已被禁用!**",
+		"user_failed": "Discord 用户 $1 不和 wiki 用户 $2 对应。",
+		"user_failed_reply": "您的 Discord 用户名不和“$1”的对应。",
+		"user_matches": "Discord 用户 $1 和 wiki 用户 $2 对应,但没有达到任何身份组的条件。",
+		"user_matches_reply": "您的 Discord 用户名和 wiki 用户“$1”对应,但您没有达到添加任何身份组的条件。",
+		"user_verified": "Discord 用户 $1 已成功验证为 wiki 用户 $2。",
+		"user_verified_reply": "您已成功验证为 wiki 用户“$1”。",
+		"user_renamed": "用户的 Discord 暱称已被改为其 wiki 用户名。",
+		"discord": "Discord 用户:",
+		"wiki": "Wiki 用户:",
+		"empty": "*空白*",
+		"notice": "注意:",
+		"qualified": "符合:",
+		"qualified_error": "符合,但无法添加:",
+		"help_guide": "请根据[此指导]($1)来添加您的 Discord 用户名至您的 wiki 数据页。",
+		"help_gamepedia": "https://help-zh.gamepedia.com/Gamepedia帮助Wiki:Discord验证",
+		"help_fandom": "https://community.fandom.com/zh/wiki/Special:VerifyUser",
+		"help_subpage": "请将您的 Discord 用户名($1)添加至您在 wiki 上的 `/Discord` 子页面:"
+	},
+	"rcscript": {
+		"title": "最近更改 webhook",
+		"ad": "你想要在 Discord 里直接看最近更改吗?使用 `$1rcscript` 来为你的 Discord 服务器增加一个基于 **$2** 的最近更改 webhook!",
+		"missing": "本服务器内暂无最近更改 webhook。",
+		"current": "这些是本服务器当前的最近更改 webhook:",
+		"current_selected": "这是本服务器的最近更改 webhook:",
+		"channel": "频道:",
+		"wiki": "Wiki:",
+		"lang": "语言:",
+		"display": "显示模式:",
+		"feeds": "讨论式的更改",
+		"enabled": "已启用",
+		"disabled": "已禁用",
+		"toggle": "(开关)",
+		"help_feeds": "(讨论版、留言墙、文章评论)",
+		"delete": "删除此最近更改 webhook:",
+		"add_more": "增加更多的最近更改 webhook:",
+		"noadmin": "你需要 `管理 webhook` 权限来运行此指令!",
+		"max_entries": "已到达最近更改 webhook 的最大数量。",
+		"sysmessage": "要添加最近更改 webhook,系统消息 `$1` 必须是服务器 ID `$2`。",
+		"audit_reason": "“$1”的最近更改 webhook",
+		"audit_reason_delete": "最近更改 webhook 已删除",
+		"added": "一个最近更改 webhook 已添加到:",
+		"deleted": "最近更改 webhook 已被删除。",
+		"webhook_failed": "抱歉,此 Webhook 不可被创建,请稍后再试。",
+		"current_wiki": "此 Webhook 的 wiki 是:",
+		"help_wiki": "wiki 的链接:`https://<wiki>.gamepedia.com/`或`https://<wiki>.fandom.com/`",
+		"new_wiki": "<新 wiki>",
+		"updated_wiki": "此 webhook 对应的 wiki 已被改为:",
+		"current_lang": "此 webhook 的语言为:",
+		"help_lang": "目前支持的语言为:",
+		"new_lang": "<新语言>",
+		"updated_lang": "此 webhook 的语言已被改为:",
+		"current_display": "此 webhook 的显示模式为:",
+		"help_display_compact": "紧凑的文本式消息,包含行内链接。",
+		"help_display_embed": "嵌入式消息,包含编辑标签和分类更改。",
+		"help_display_image": "嵌入式消息,包含图像预览。",
+		"help_display_diff": "嵌入式消息,包含图像预览和编辑差异。",
+		"updated_display": "此 webhook 的显示模式已被改为:",
+		"disabled_feeds": "此 webhook 中如讨论版、留言墙和条目评论等讨论式的更改推送已禁用。",
+		"enabled_feeds": "此 webhook 中如讨论版、留言墙和条目评论等讨论式的更改推送已启用。",
+		"no_feeds": "此 webhook 的 wiki 没有如讨论版、留言墙和条目评论等讨论式的更改,已启用。",
+		"webhook": {
+			"created": "$1 的最近更改 webhook 已被添加到此频道。",
+			"updated_wiki": "此最近更改 webhook 的 wiki 已改为 $1",
+			"updated_lang": "此最近更改 webhook 的语言已被改为 $1。",
+			"updated_display_compact": "此最近更改 webhook 的显示模式已改为紧凑的文本式消息,包含行内链接。",
+			"updated_display_embed": "此最近更改 webhook 的显示模式已改为嵌入式消息,包含编辑标签和分类更改。",
+			"updated_display_image": "此最近更改 webhook 的显示模式已改为嵌入式消息,包含图像预览。",
+			"updated_display_diff": "此最近更改 webhook 的显示模式已改为嵌入式消息,包含图像预览和编辑差异。",
+			"disabled_feeds": "此最近更改 webhook 中如讨论版、留言墙和条目评论等讨论式的更改已禁用。",
+			"enabled_feeds": "此最近更改 webhook 中如讨论版、留言墙和条目评论等讨论式的更改已启用。",
+			"deleted": "此最近更改 webhook 将会被删除。"
+		}
+	},
+	"overview": {
+		"inaccurate": "统计信息可能出错",
+		"name": "全名:",
+		"vertical": "主题:",
+		"topic": "分类:",
+		"founder": "创始人:",
+		"created": "创建日期:",
+		"manager": "Wiki 经理 / 主管:",
+		"talk": "讨论",
+		"official": "官方 wiki:",
+		"yes": "是",
+		"no": "否",
+		"articles": "文章总数:",
+		"pages": "全部页面:",
+		"edits": "总编辑数:",
+		"users": "活跃用户:",
+		"crossover": "合并到:",
+		"description": "说明:",
+		"image": "图像:",
+		"none": "*无*"
+	},
+	"user": {
+		"gender": {
+			"unknown": "未知",
+			"male": "男",
+			"female": "女"
+		},
+		"groups": {
+			"global_bot": "全域机器人",
+			"hydra_staff": "Gamepedia 员工",
+			"wiki_manager": "Wiki 主管",
+			"content_team_member": "内容团队",
+			"grasp": "GRASP",
+			"bot-global": "全域机器人",
+			"staff": "Fandom 员工",
+			"wiki-manager": "Wiki 主管",
+			"helper": "Fandom 助手",
+			"content-team-member": "内容团队",
+			"soap": "SOAP",
+			"vstf": "VSTF",
+			"content-volunteer": "内容志愿者",
+			"global-discussions-moderator": "全域讨论版主",
+			"vanguard": "Vanguard",
+			"voldev": "志愿开发者",
+			"bot": "机器人",
+			"checkuser": "用户查核员",
+			"bureaucrat": "行政员",
+			"sysop": "管理员",
+			"interface-admin": "界面管理员",
+			"widgeteditor": "小工具编辑者",
+			"content-moderator": "内容版主",
+			"threadmoderator": "讨论版主",
+			"chatmoderator": "聊天主持人",
+			"junioradmin": "初级管理员",
+			"directors": "向导",
+			"Patrol": "巡查员",
+			"editor": "编辑者",
+			"supmoderator": "高级管理员",
+			"moderator": "版主",
+			"assistant": "助手",
+			"blogpatrol": "博客巡查员",
+			"imagecontrol": "图像控制员",
+			"commentcontrol": "评论控制员",
+			"custodian": "监管者",
+			"doyen": "主任牧师",
+			"Elite_users": "精英用户",
+			"codeeditor": "代码编辑者",
+			"patrollers": "巡查员",
+			"patroller": "巡查员",
+			"rollback": "回退员",
+			"autoreview": "自动复核用户",
+			"autopatroller": "自动巡查者",
+			"autopatrol": "自动巡查 / 巡查豁免者",
+			"authenticated": "认证用户",
+			"autoconfirmed": "自动确认用户",
+			"user": "用户"
+		},
+		"info": {
+			"gender": "性别:",
+			"registration": "注册时间:",
+			"editcount": "编辑数:",
+			"globaleditcount": "全域编辑数:",
+			"wikisedited": "编辑过的 wiki:",
+			"group": "用户组:",
+			"discord": "Discord:",
+			"favwiki": "最喜爱的 wiki:",
+			"loading": "正在加载全域数据…"
+		},
+		"block": {
+			"header": "$1 目前正被封禁!",
+			"text": "被 $3 封禁,时间从 $1 到 $2,理由:“$4”",
+			"noreason": "被 $3 封禁,时间从 $1 到 $2",
+			"nofromtext": "被 $3 封禁,直到 $2,理由:“$4”",
+			"nofromnoreason": "被 $3 封禁,直到 $2",
+			"until_infinity": "天荒地老"
+		},
+		"gblock": {
+			"header": "$1 目前正被全域封禁!",
+			"text": "被 $3 封禁,时间从 $1 到 $2,理由:“$4”",
+			"noreason": "被 $3 封禁,时间从 $1 到 $2",
+			"disabled": "此账户目前正被禁用!"
+		}
+	},
+	"diff": {
+		"badrev": "至少有一个历史版本未展现!",
+		"nocomment": "*未提供描述*",
+		"hidden": "*隐藏*",
+		"info": {
+			"editor": "编辑者:",
+			"timestamp": "时间:",
+			"size": "差异:",
+			"bytes": "$1 b",
+			"comment": "摘要:",
+			"tags": "标签:",
+			"removed": "删除:",
+			"added": "添加:",
+			"more": "更多",
+			"whitespace": "仅有空白"
+		}
+	},
+	"search": {
+		"infopage": "结果不正确?使用 $1 来指定连接",
+		"infosearch": "结果不正确?使用 $1 来指定链接或使用 $2 列出所有结果",
+		"category": {
+			"content": "分类下的内容:",
+			"empty": "*空白分类*",
+			"pages": "$1 个页面",
+			"files": "$1 个文档",
+			"subcats": "$1 个分类"
+		},
+		"special": "此特殊页面的内容:",
+		"empty": "*此特殊页面内容为空*",
+		"results": "共 $1 个结果"
+	},
+	"discussion": {
+		"post": "帖子",
+		"main": "讨论版",
+		"image": "查看图片",
+		"votes": "$1 个投票"
+	},
+	"invite": {
+		"bot": "使用这个链接把我添加到其他服务器:"
+	},
+	"test": {
+		"pause": "我在此服务器正处于暂停状态。",
+		"text": [
+			"全功率运行中!",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " "
+		],
+		"time": "咋瓦鲁多",
+		"notice": "功能受限",
+		"MediaWiki": "至少需要 $1 才能发挥全部功能,但只有`$2`。",
+		"TextExtracts": "页面描述需要扩展 $1。",
+		"PageImages": "页面缩略图需要扩展 $1。"
+	},
+	"help": {
+		"all": "想知道我能够干什么?让我来告诉你吧:",
+		"admin": "这些指令仅限管理员使用:",
+		"noadmin": "这个指令仅限拥有 `管理员` 权限的用户使用!",
+		"pause": "**我目前处于暂停状态!**\n仅能使用以下指令:",
+		"footer": "如果你觉得我的某个信息刷屏,在信息上添加一个🗑️图标我就会自己删掉这一条信息。",
+		"list": {
+			"default": {
+				"cmd": "<关键词>",
+				"desc": "我将返回一个 wiki 指定页面的链接。"
+			},
+			"inline": {
+				"link": {
+					"cmd": "[[<页面名>]]",
+					"desc": "我将返回一个 wiki 指定页面的直接链接。"
+				},
+				"template": {
+					"cmd": "{{<页面名>}}",
+					"desc": "我将返回一个 wiki 指定页面的链接。"
+				}
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <关键字>",
+				"desc": "我将返回特定 Gamepedia wiki 指定页面的链接:`https://<wiki>.gamepedia.com/`。"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <关键词>",
+				"desc": "我将返回特定 Fandom wiki 的指定页面的链接:`https://<wiki>.fandom.com/`。"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <关键词>",
+				"desc": "我将返回特定的 org 域名下的 wiki 的指定页面的链接:`https://<wiki>.wikia.org/`。"
+			},
+			"mwprojects": {
+				"cmd": "!!<wiki> <关键词>",
+				"desc": "我将返回特定 MediaWiki 项目中指定页面的链接:`$1!!zh.wikipedia.org 曲奇`"
+			},
+			"user": {
+				"cmd": "User:<用户名>",
+				"desc": "我将返回指定用户的信息。"
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "我将返回 wiki 的相关数据以及统计信息。"
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "我将返回 wiki 上一个随机页面的链接。"
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <版本 id> [<旧版本 id>]",
+					"desc": "我将返回指定差异编号的比较页面链接。"
+				},
+				"name": {
+					"cmd": "diff <页面名>",
+					"desc": "我将返回指定页面最后一次更改的比较页面链接。"
+				}
+			},
+			"page": {
+				"cmd": "page <页面名>",
+				"desc": "我将返回指定 wiki 页面的链接。"
+			},
+			"search": {
+				"cmd": "search <关键字>",
+				"desc": "我将返回 wiki 搜索结果的链接。"
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<Minecraft 指令>",
+					"desc": "我将返回此 Minecraft 指令的语法和此指令在 Minecraft Wiki 上的链接。"
+				},
+				"command": {
+					"cmd": "command <Minecraft 指令>",
+					"desc": "我将返回此 Minecraft 指令的语法和此指令在 Minecraft Wiki 上的链接。"
+				},
+				"bug": {
+					"cmd": "bug <Minecraft 漏洞>",
+					"desc": "我将返回此漏洞在 Minecraft 漏洞追踪器上的链接。"
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <关键字>",
+					"desc": "我将返回在相关 Fandom wiki 中的讨论。"
+				},
+				"post": {
+					"cmd": "discussion post <关键字>",
+					"desc": "我将返回在相关 Fandom wiki 中的讨论帖。"
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "我将进行自我介绍。"
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "我将提供使用帮助。"
+				},
+				"command": {
+					"cmd": "help <指令>",
+					"desc": "我将提供的使用方法。"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "我将提供所有的管理指令。"
+				},
+				"verification": {
+					"cmd": "help verification",
+					"desc": "我将解释验证指令如何工作。"
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "我将更改设置参数。"
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "我将更改本服务器的默认 wiki。"
+				},
+				"lang": {
+					"cmd": "settings lang <语言>",
+					"desc": "我将更改本服务器的语言。"
+				},
+				"inline": {
+					"cmd": "settings inline toggle",
+					"desc": "我将更改本服务器的行内指令启用情况。"
+				},
+				"prefix": {
+					"cmd": "settings prefix <前缀>",
+					"desc": "我将更改本服务器的指令前缀。"
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "我将更改本服务器的当前频道的复写设置。"
+				}
+			},
+			"verify": {
+				"cmd": "verify <wiki 用户名>",
+				"desc": "使用此指令来验证您的 Discord 账户和您的 wiki 账户,并获取您的 wiki 账户对应的身份组。"
+			},
+			"verification": {
+				"default": {
+					"cmd": "verification",
+					"desc": "我将更改由 `$1验证` 触发的 wiki 验证方式指令。"
+				},
+				"add": {
+					"cmd": "verification add <身份组>",
+					"desc": "我将添加一个新的验证方式。可用 `|` 来分割多个身份组。"
+				},
+				"channel": {
+					"cmd": "verification <id> channel <新频道>",
+					"desc": "我将更改适用于验证方式的频道。可用 `|` 来分割多个频道。"
+				},
+				"role": {
+					"cmd": "verification <id> role <新身份组>",
+					"desc": "我将更改验证方式的身份组。可用 `|` 来分割多个身份组。"
+				},
+				"editcount": {
+					"cmd": "verification <id> editcount <新编辑数>",
+					"desc": "我将更改验证方式的最小编辑数。"
+				},
+				"usergroup": {
+					"cmd": "verification <id> usergroup <新 wiki 用户组>",
+					"desc": "我将更改验证方式的 wiki 用户组。可用 `|` 来分割多个用户组。\n以 `AND` 关键词作为开头可限制必须拥有下列全部用户组。"
+				},
+				"accountage": {
+					"cmd": "verification <id> accountage <新账户注册时长>",
+					"desc": "我将更改验证方式的最小注册时长(以天为计数)。"
+				},
+				"rename": {
+					"cmd": "verification <id> rename",
+					"desc": "在验证时,若需要,我将会将用户的 Discord 暱称改为 wiki 用户名。"
+				},
+				"delete": {
+					"cmd": "verification <id> delete",
+					"desc": "我将删除此验证方式。"
+				}
+			},
+			"rcscript": {
+				"default": {
+					"cmd": "rcscript",
+					"desc": "我将更改最近更改 webhook。"
+				},
+				"add": {
+					"cmd": "rcscript add [<wiki>]",
+					"desc": "我将添加一个新的最近更改 webhook。"
+				},
+				"wiki": {
+					"cmd": "rcscript wiki <新 wiki>",
+					"desc": "我将更改最近更改 webhook 的 wiki。"
+				},
+				"lang": {
+					"cmd": "rcscript lang <新语言>",
+					"desc": "我将更改最近更改 webhook 的语言。"
+				},
+				"display": {
+					"cmd": "rcscript display <新显示模式>",
+					"desc": "我将更改最近更改 webhook 的显示模式。"
+				},
+				"feeds": {
+					"cmd": "rc script feeds",
+					"desc": "我将切换是否在最近更改 webhook 上推送 Fandom wiki 上的讨论版更改。"
+				},
+				"delete": {
+					"cmd": "rcscript delete",
+					"desc": "我将删除最近更改 webhook。"
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "我将尝试给予每个在这个语音频道的用户一个特定的身份组。"
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "我将屏蔽少数管理指令外的全部指令。"
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "我将重新接受全部指令。"
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "如果我被激活了,我就会回答你!否则不会。"
+			}
+		}
+	},
+	"minecraft": {
+		"link": "https://minecraft-zh.gamepedia.com/",
+		"cmdpage": "指令 /",
+		"private": "**私密问题**",
+		"fixed": "修复版本:",
+		"more": "还有 $1 个。",
+		"total": "$1 个问题已被修复"
+	}
+}

+ 630 - 0
i18n/zh-hant.json

@@ -0,0 +1,630 @@
+{
+	"__translator": [
+		"机智的小鱼君",
+		"Dianliang233",
+		" ", " ",
+		" ", " ",
+		" ", " ",
+		" ", " "
+	],
+	"fallback": [
+		"zh-hans",
+		"en",
+		" ",
+		" ",
+		" "
+	],
+	"aliases": {
+		"bug": [" ", " ", " ", " ", " "],
+		"command": ["指令"," ", " ", " ", " "],
+		"diff": [" ", " ", " ", " ", " "],
+		"discussion": ["討論", " ", " ", " ", " "],
+		"help": [" ", " ", " ", " ", " "],
+		"info": [" ", " ", " ", " ", " "],
+		"invite": [" ", " ", " ", " ", " "],
+		"overview": [" ", " ", " ", " ", " "],
+		"page": ["頁面", " ", " ", " ", " "],
+		"random": ["隨機", " ", " ", " ", " "],
+		"search": ["搜索", " ", " ", " ", " "],
+		"test": [" ", " ", " ", " ", " "],
+		"user": [" ", " ", " ", " ", " "],
+		"verify": ["驗證", " ", " ", " ", " "]
+	},
+	"dateformat": "zh-TW",
+	"general": {
+		"prefix": "此伺服器的指令前綴是 `$1`。你可以使用 `$1settings prefix` 更改前綴。關於全部指令,請見 `$1help`。",
+		"missingperm": "我缺少一些權限來執行此指令:",
+		"limit": "🚨 **停一下,你太快了!** 🚨\n\n$1,你發出的指令過多了。",
+		"disclaimer": "我是一個連結到 Gamepedia 和 Fandom wiki 的小機器人。$1用 JavaScript 編寫了我。\n\n**我和 Fandom 沒有關係,是一個非官方工具!**\n\n你可以在 Patreon 支援我:",
+		"helpserver": "有問題嗎?你可以訪問我的專屬支援伺服器:",
+		"patreon": "這是 Patreon 支援者專屬功能!\n你可以在 Patreon 支援我來使用這個功能:"
+	},
+	"settings": {
+		"save_failed": "啊喔,設定保存失敗了,請稍後再試。",
+		"missing": "這個伺服器尚未完成設定,使用 $1 以及 $2 來完成設定。",
+		"foundwikis": "你也許指的是這些 wiki?",
+		"current": "這是本伺服器的當前設定:",
+		"channel current": "這是本頻道的當前設定:",
+		"currentlang": "語言:",
+		"currentprefix": "前綴:",
+		"currentinline": "行內指令:",
+		"currentwiki": "默認 wiki:",
+		"currentchannel": "頻道複寫:",
+		"nochannels": "*還沒有頻道複寫設定*",
+		"lang": "本伺服器的語言爲:",
+		"channel lang": "本頻道的語言爲:",
+		"langinvalid": "暫不支援這個語言!",
+		"langchanged": "您已將本伺服器的語言更改爲:",
+		"channel langchanged": "您已將本頻道的語言更改爲:",
+		"langhelp": "使用 `$1 <language>` 修改語言。\n目前支援的語言:",
+		"wikimissing": "暫未綁定 wiki!",
+		"wiki": "本伺服器的默認 wiki 是:",
+		"channel wiki": "本頻道的默認 wiki 是:",
+		"wikiinvalid": "請提供到 Gamepedia 或 Fandom wiki 的有效連結!",
+		"wikichanged": "你已將伺服器 wiki 更改爲:",
+		"channel wikichanged": "你已將頻道 wiki 更改爲:",
+		"wikihelp": "使用 `$1 <link>` 來更改默認 wiki。\nWiki 連結格式應爲 `https://<wiki>.gamepedia.com/` 或 `https://<wiki>.fandom.com/`",
+		"prefix": "本伺服器的前綴是:",
+		"prefixinvalid": "我不支援提供的前綴!",
+		"prefixchanged": "您將本伺服器指令前綴更改爲:",
+		"prefixhelp": "使用 `$1 <前綴>` 來更改前綴。在最後使用 `_` 來表示一個空格。前綴不能含有提及!",
+		"inline enabled": {
+			"inline": "行內指令目前已在本伺服器啓用。",
+			"channel inline": "行內指令目前已在本頻道啓用。",
+			"inlinechanged": "您啓用了本伺服器的行內指令。",
+			"channel inlinechanged": "您啓用了本頻道的行內指令。",
+			"help": "使用 `$1` 禁用如 `[[$2]]` 和 `{{$2}}` 的行內指令。"
+		},
+		"inline disabled": {
+			"inline": "行內指令目前已在本伺服器禁用。",
+			"channel inline": "行內指令目前已在本頻道禁用。",
+			"inlinechanged": "您禁用了本伺服器的行內指令。",
+			"channel inlinechanged": "您禁用了本頻道的行內指令。",
+			"help": "使用 `$1` 啓用如 `[[$2]]` 和 `{{$2}}` 的行內指令。"
+		}
+	},
+	"pause": {
+		"on": "我已將自己暫停,從現在起我會忽略大部分的指令!",
+		"off": "我已取消暫停,即將繼續開始服務!"
+	},
+	"voice": {
+		"text": "我將嘗試給予每個在這個語音頻道的使用者一個特定的身份組:",
+		"enable": "使用 `$1` 啓用本功能。",
+		"disable": "使用 `$1` 禁用本功能。",
+		"enabled": "您啓用了給予每個在這個語音頻道的使用者一個特定的身份組的功能。",
+		"disabled": "您禁用了給予每個在這個語音頻道的使用者一個特定的身份組的功能。",
+		"name": "語音頻道名",
+		"channel": "語音頻道",
+		"join": "$1 加入了語音頻道“$2”。",
+		"left": "$1 離開了語音頻道“$2”。"
+	},
+	"verification": {
+		"save_failed": "抱歉,無法保存驗證方式,請稍後再試。",
+		"added": "驗證方式已保存:",
+		"updated": "驗證方式已更新:",
+		"deleted": "驗證方式已刪除。",
+		"max_entries": "您已觸發驗證方式數量上限。",
+		"no_role": "請爲新的驗證方式提供身份組。",
+		"current": "這些是本伺服器目前的驗證方式:",
+		"current_selected": "這是本伺服器的驗證方式 `$1`:",
+		"missing": "本伺服器尚未有驗證方式。",
+		"add_more": "添加更多驗證方式:",
+		"delete_current": "刪除此驗證方式:",
+		"channel": "頻道:",
+		"role": "身份組:",
+		"editcount": "編輯數:",
+		"usergroup": "使用者組:",
+		"or": "或",
+		"and": "和",
+		"accountage": "註冊時長:",
+		"indays": "(以日計算)",
+		"rename": "修改暱稱:",
+		"enabled": "已啓用",
+		"disabled": "已禁用",
+		"toggle": "(開/關)",
+		"rename_no_permission": "**$1 缺少 `管理暱稱` 權限來強制將暱稱改爲 wiki 使用者名!**",
+		"role_too_high": "**$1 身份組的權重過高,$2 無法添加!**",
+		"channel_max": "提供的頻道過多。",
+		"channel_missing": "提供的頻道不存在。",
+		"role_max": "提供的身份組過多。",
+		"role_missing": "提供的身份組不存在。",
+		"role_managed": "提供的身份組權重過高,無法添加。",
+		"value_too_high": "提供的數量過高。",
+		"usergroup_max": "提供的使用者組過多。",
+		"usergroup_too_long": "提供的使用者組過長。",
+		"new_channel": "<新頻道>",
+		"new_role": "<新身份組>",
+		"new_editcount": "<新編輯數>",
+		"new_usergroup": "<新使用者組>",
+		"new_accountage": "<新註冊時長>"
+	},
+	"verify": {
+		"error": "由於一個錯誤,驗證失敗。",
+		"error_reply": "由於一個錯誤,驗證失敗,請重試。",
+		"missing": "本頻道無可用的驗證方式。",
+		"footer": "Wiki 賬戶驗證",
+		"failed_gblock": "** 全域封禁檢查失敗!**",
+		"failed_roles": "** 添加身份組失敗!**",
+		"failed_rename": "** 更改暱稱失敗!**",
+		"audit_reason": "已以“$1”的身份驗證",
+		"user_missing": "Wiki 使用者“$1”不存在。",
+		"user_missing_reply": "您連接的 wiki 使用者“$1”不存在。",
+		"user_blocked": "**Wiki 使用者 $1 已被封禁!**",
+		"user_blocked_reply": "您連接的 wiki 使用者**“$1”已被封禁!**",
+		"user_gblocked": "**Wiki 使用者 $1 已被全域封禁!**",
+		"user_gblocked_reply": "您連接的 wiki 使用者**“$1”已被全域封禁!**",
+		"user_disabled": "**Wiki 使用者 $1 已被禁用!**",
+		"user_disabled_reply": "您連接的 wiki 使用者**“$1”已被禁用!**",
+		"user_failed": "Discord 使用者 $1 不和 wiki 使用者 $2 對應。",
+		"user_failed_reply": "您的 Discord 使用者名不和“$1”的對應。",
+		"user_matches": "Discord 使用者 $1 和 wiki 使用者 $2 對應,但沒有達到任何身份組的條件。",
+		"user_matches_reply": "您的 Discord 使用者名和 wiki 使用者“$1”對應,但您沒有達到添加任何身份組的條件。",
+		"user_verified": "Discord 使用者 $1 已成功驗證爲 wiki 使用者 $2。",
+		"user_verified_reply": "您已成功驗證爲 wiki 使用者“$1”。",
+		"user_renamed": "使用者的 Discord 暱稱已被改爲其 wiki 使用者名。",
+		"discord": "Discord 使用者:",
+		"wiki": "Wiki 使用者:",
+		"empty": "*空白*",
+		"notice": "注意:",
+		"qualified": "符合:",
+		"qualified_error": "符合,但無法添加:",
+		"help_guide": "請根據[此指導]($1)來添加您的 Discord 使用者名至您的 wiki 資料頁。",
+		"help_gamepedia": "https://help-zh.gamepedia.com/Gamepedia帮助Wiki:Discord验证",
+		"help_fandom": "https://community.fandom.com/zh/wiki/Special:VerifyUser",
+		"help_subpage": "請將您的 Discord 使用者名($1)添加至您在 wiki 上的 `/Discord` 子頁面:"
+	},
+	"rcscript": {
+		"title": "最近更改網路勾手",
+		"ad": "你想要在 Discord 裏直接看最近更改嗎?使用 `$1rcscript` 來爲你的 Discord 伺服器增加一個基於 **$2** 的最近更改網路勾手!",
+		"missing": "本伺服器內暫無最近更改網路勾手。",
+		"current": "這些是本伺服器當前的最近更改網路勾手:",
+		"current_selected": "這是本伺服器的最近更改網路勾手:",
+		"channel": "頻道:",
+		"wiki": "Wiki:",
+		"lang": "語言:",
+		"display": "顯示模式:",
+		"feeds": "基於討論式的更改",
+		"enabled": "已啓用",
+		"disabled": "已禁用",
+		"toggle": "(開關)",
+		"help_feeds": "(討論版、留言牆、文章評論)",
+		"delete": "刪除此最近更改網路勾手:",
+		"add_more": "增加更多的最近更改網路勾手:",
+		"noadmin": "你需要 `管理網路勾手` 權限來運行此指令!",
+		"max_entries": "已到達最近更改網路勾手的最大數量。",
+		"sysmessage": "要添加最近更改網路勾手,系統消息 `$1` 必須是伺服器 ID `$2`。",
+		"audit_reason": "“$1”的最近更改網路勾手",
+		"audit_reason_delete": "最近更改網路勾手已刪除",
+		"added": "一個最近更改網路勾手已添加到:",
+		"deleted": "最近更改網路勾手已被刪除。",
+		"webhook_failed": "抱歉,此網路勾手不可被創建,請稍後再試。",
+		"current_wiki": "此網路勾手的 wiki 是:",
+		"help_wiki": "wiki 的連結:`https://<wiki>.gamepedia.com/`或`https://<wiki>.fandom.com/`",
+		"new_wiki": "<新 wiki>",
+		"updated_wiki": "此網路勾手對應的 wiki 已被改爲:",
+		"current_lang": "此網路勾手的語言爲:",
+		"help_lang": "目前支援的語言爲:",
+		"new_lang": "<新語言>",
+		"updated_lang": "此網路勾手的語言已被改爲:",
+		"current_display": "此網路勾手的顯示模式爲:",
+		"help_display_compact": "緊湊的文字式消息,包含行內連結。",
+		"help_display_embed": "嵌入式消息,包含編輯標籤和分類更改。",
+		"help_display_image": "嵌入式消息,包含圖像預覽。",
+		"help_display_diff": "嵌入式消息,包含圖像預覽和編輯差異。",
+		"updated_display": "此網路勾手的顯示模式已被改爲:",
+		"disabled_feeds": "此網路勾手中如討論版、留言牆和條目評論等基於討論式的更改推送已禁用。",
+		"enabled_feeds": "此網路勾手中如討論版、留言牆和條目評論等基於討論式的更改推送已啓用。",
+		"no_feeds": "此網路勾手的 wiki 沒有如討論版、留言牆和條目評論等基於討論式的更改,已啓用。",
+		"webhook": {
+			"created": "$1 的最近更改網路勾手已被添加到此頻道。",
+			"updated_wiki": "此最近更改網路勾手的 wiki 已改爲 $1",
+			"updated_lang": "此最近更改網路勾手的語言已被改爲 $1。",
+			"updated_display_compact": "此最近更改網路勾手的顯示模式已改爲緊湊的文字式消息,包含行內連結。",
+			"updated_display_embed": "此最近更改網路勾手的顯示模式已改爲嵌入式消息,包含編輯標籤和分類更改。",
+			"updated_display_image": "此最近更改網路勾手的顯示模式已改爲嵌入式消息,包含圖像預覽。",
+			"updated_display_diff": "此最近更改網路勾手的顯示模式已改爲嵌入式消息,包含圖像預覽和編輯差異。",
+			"disabled_feeds": "此最近更改網路勾手中如討論版、留言牆和條目評論等基於討論式的更改已禁用。",
+			"enabled_feeds": "此最近更改網路勾手中如討論版、留言牆和條目評論等基於討論式的更改已啓用。",
+			"deleted": "此最近更改網路勾手將會被刪除。"
+		}
+	},
+	"overview": {
+		"inaccurate": "統計信息可能出錯",
+		"name": "全名:",
+		"vertical": "主題:",
+		"topic": "分類:",
+		"founder": "創始人:",
+		"created": "創建日期:",
+		"manager": "Wiki 經理 / 主管:",
+		"talk": "討論",
+		"official": "官方 wiki:",
+		"yes": "是",
+		"no": "否",
+		"articles": "文章總數:",
+		"pages": "全部頁面:",
+		"edits": "總編輯數:",
+		"users": "活躍使用者:",
+		"crossover": "合併到:",
+		"description": "說明:",
+		"image": "圖像:",
+		"none": "*無*"
+	},
+	"user": {
+		"gender": {
+			"unknown": "未知",
+			"male": "男",
+			"female": "女"
+		},
+		"groups": {
+			"global_bot": "全域機器人",
+			"hydra_staff": "Gamepedia 員工",
+			"wiki_manager": "Wiki 主管",
+			"content_team_member": "內容團隊",
+			"grasp": "GRASP",
+			"bot-global": "全域機器人",
+			"staff": "Fandom 員工",
+			"wiki-manager": "Wiki 主管",
+			"helper": "Fandom 助手",
+			"content-team-member": "內容團隊",
+			"soap": "SOAP",
+			"vstf": "VSTF",
+			"content-volunteer": "內容志願者",
+			"global-discussions-moderator": "全域討論版主",
+			"vanguard": "Vanguard",
+			"voldev": "志願開發者",
+			"bot": "機器人",
+			"checkuser": "使用者查覈員",
+			"bureaucrat": "行政員",
+			"sysop": "管理員",
+			"interface-admin": "界面管理員",
+			"widgeteditor": "小工具編輯者",
+			"content-moderator": "內容版主",
+			"threadmoderator": "討論版主",
+			"chatmoderator": "聊天主持人",
+			"junioradmin": "初級管理員",
+			"directors": "嚮導",
+			"Patrol": "巡查員",
+			"editor": "編輯者",
+			"supmoderator": "高級管理員",
+			"moderator": "版主",
+			"assistant": "助手",
+			"blogpatrol": "博客巡查員",
+			"imagecontrol": "圖像控制員",
+			"commentcontrol": "評論控制員",
+			"custodian": "監管者",
+			"doyen": "主任牧師",
+			"Elite_users": "精英使用者",
+			"codeeditor": "代碼編輯者",
+			"patrollers": "巡查員",
+			"patroller": "巡查員",
+			"rollback": "回退員",
+			"autoreview": "自動複覈使用者",
+			"autopatroller": "自動巡查者",
+			"autopatrol": "自動巡查 / 巡查豁免者",
+			"authenticated": "認證使用者",
+			"autoconfirmed": "自動確認使用者",
+			"user": "使用者"
+		},
+		"info": {
+			"gender": "性別:",
+			"registration": "註冊時間:",
+			"editcount": "編輯數:",
+			"globaleditcount": "全域編輯數:",
+			"wikisedited": "編輯過的 wiki:",
+			"group": "使用者組:",
+			"discord": "Discord:",
+			"favwiki": "最喜愛的 wiki:",
+			"loading": "正在加載全域數據…"
+		},
+		"block": {
+			"header": "$1 目前正被封禁!",
+			"text": "被 $3 封禁,時間從 $1 到 $2,理由:“$4”",
+			"noreason": "被 $3 封禁,時間從 $1 到 $2",
+			"nofromtext": "被 $3 封禁,直到 $2,理由:“$4”",
+			"nofromnoreason": "被 $3 封禁,直到 $2",
+			"until_infinity": "天荒地老"
+		},
+		"gblock": {
+			"header": "$1 目前正被全域封禁!",
+			"text": "被 $3 封禁,時間從 $1 到 $2,理由:“$4”",
+			"noreason": "被 $3 封禁,時間從 $1 到 $2",
+			"disabled": "此賬戶目前正被禁用!"
+		}
+	},
+	"diff": {
+		"badrev": "至少有一個歷史版本未展現!",
+		"nocomment": "*未提供描述*",
+		"hidden": "*隱藏*",
+		"info": {
+			"editor": "編輯者:",
+			"timestamp": "時間:",
+			"size": "差異:",
+			"bytes": "$1 b",
+			"comment": "摘要:",
+			"tags": "標籤:",
+			"removed": "刪除:",
+			"added": "添加:",
+			"more": "更多",
+			"whitespace": "僅有空白"
+		}
+	},
+	"search": {
+		"infopage": "結果不正確?使用 $1 來指定連接",
+		"infosearch": "結果不正確?使用 $1 來指定連結或使用 $2 列出所有結果",
+		"category": {
+			"content": "分類下的內容:",
+			"empty": "*空白分類*",
+			"pages": "$1 個頁面",
+			"files": "$1 個文件",
+			"subcats": "$1 個分類"
+		},
+		"special": "此特殊頁面的內容:",
+		"empty": "*此特殊頁面內容爲空*",
+		"results": "共 $1 個結果"
+	},
+	"discussion": {
+		"post": "帖子",
+		"main": "討論版",
+		"image": "查看圖片",
+		"votes": "$1 個投票"
+	},
+	"invite": {
+		"bot": "使用這個連結把我添加到其他伺服器:"
+	},
+	"test": {
+		"pause": "我在此伺服器正處於暫停狀態。",
+		"text": [
+			"全功率運行中!",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " ", " ",
+			" ", " ", " ", " "
+		],
+		"time": "咋瓦魯多",
+		"notice": "功能受限",
+		"MediaWiki": "至少需要 $1 才能發揮全部功能,但只有`$2`。",
+		"TextExtracts": "頁面描述需要擴展 $1。",
+		"PageImages": "頁面縮略圖需要擴展 $1。"
+	},
+	"help": {
+		"all": "想知道我能夠幹什麼?讓我來告訴你吧:",
+		"admin": "這些指令僅限管理員使用:",
+		"noadmin": "這個指令僅限擁有 `管理員` 權限的使用者使用!",
+		"pause": "**我目前處於暫停狀態!**\n僅能使用以下指令:",
+		"footer": "如果你覺得我的某個信息刷屏,在信息上添加一個🗑️圖標我就會自己刪掉這一條信息。",
+		"list": {
+			"default": {
+				"cmd": "<關鍵詞>",
+				"desc": "我將返回一個 wiki 指定頁面的連結。"
+			},
+			"inline": {
+				"link": {
+					"cmd": "[[<頁面名>]]",
+					"desc": "我將返回一個 wiki 指定頁面的直接連結。"
+				},
+				"template": {
+					"cmd": "{{<頁面名>}}",
+					"desc": "我將返回一個 wiki 指定頁面的連結。"
+				}
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <關鍵字>",
+				"desc": "我將返回特定 Gamepedia wiki 指定頁面的連結:`https://<wiki>.gamepedia.com/`。"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <關鍵詞>",
+				"desc": "我將返回特定 Fandom wiki 的指定頁面的連結:`https://<wiki>.fandom.com/`。"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <關鍵詞>",
+				"desc": "我將返回特定的 org 域名下的 wiki 的指定頁面的連結:`https://<wiki>.wikia.org/`。"
+			},
+			"mwprojects": {
+				"cmd": "!!<wiki> <關鍵詞>",
+				"desc": "我將返回特定 MediaWiki 項目中指定頁面的連結:`$1!!zh.wikipedia.org 曲奇`"
+			},
+			"user": {
+				"cmd": "User:<使用者名>",
+				"desc": "我將返回指定使用者的信息。"
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "我將返回 wiki 的相關數據以及統計信息。"
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "我將返回 wiki 上一個隨機頁面的連結。"
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <版本 id> [<舊版本 id>]",
+					"desc": "我將返回指定差異編號的比較頁面連結。"
+				},
+				"name": {
+					"cmd": "diff <頁面名>",
+					"desc": "我將返回指定頁面最後一次更改的比較頁面連結。"
+				}
+			},
+			"page": {
+				"cmd": "page <頁面名>",
+				"desc": "我將返回指定 wiki 頁面的連結。"
+			},
+			"search": {
+				"cmd": "search <關鍵字>",
+				"desc": "我將返回 wiki 搜索結果的連結。"
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<Minecraft 指令>",
+					"desc": "我將返回此 Minecraft 指令的語法和此指令在 Minecraft Wiki 上的連結。"
+				},
+				"command": {
+					"cmd": "command <Minecraft 指令>",
+					"desc": "我將返回此 Minecraft 指令的語法和此指令在 Minecraft Wiki 上的連結。"
+				},
+				"bug": {
+					"cmd": "bug <Minecraft 漏洞>",
+					"desc": "我將返回此漏洞在 Minecraft 漏洞追蹤器上的連結。"
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <關鍵字>",
+					"desc": "我將返回在相關 Fandom wiki 中的討論。"
+				},
+				"post": {
+					"cmd": "discussion post <關鍵字>",
+					"desc": "我將返回在相關 Fandom wiki 中的討論帖。"
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "我將進行自我介紹。"
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "我將提供使用幫助。"
+				},
+				"command": {
+					"cmd": "help <指令>",
+					"desc": "我將提供的使用方法。"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "我將提供所有的管理指令。"
+				},
+				"verification": {
+					"cmd": "help verification",
+					"desc": "我將解釋驗證指令如何工作。"
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "我將更改設定參數。"
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "我將更改本伺服器的默認 wiki。"
+				},
+				"lang": {
+					"cmd": "settings lang <語言>",
+					"desc": "我將更改本伺服器的語言。"
+				},
+				"inline": {
+					"cmd": "settings inline toggle",
+					"desc": "我將更改本伺服器的行內指令啓用情況。"
+				},
+				"prefix": {
+					"cmd": "settings prefix <前綴>",
+					"desc": "我將更改本伺服器的指令前綴。"
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "我將更改本伺服器的當前頻道的複寫設定。"
+				}
+			},
+			"verify": {
+				"cmd": "verify <wiki 使用者名>",
+				"desc": "使用此指令來驗證您的 Discord 賬戶和您的 wiki 賬戶,並獲取您的 wiki 賬戶對應的身份組。"
+			},
+			"verification": {
+				"default": {
+					"cmd": "verification",
+					"desc": "我將更改由 `$1驗證` 觸發的 wiki 驗證方式指令。"
+				},
+				"add": {
+					"cmd": "verification add <身份組>",
+					"desc": "我將添加一個新的驗證方式。可用 `|` 來分割多個身份組。"
+				},
+				"channel": {
+					"cmd": "verification <id> channel <新頻道>",
+					"desc": "我將更改適用於驗證方式的頻道。可用 `|` 來分割多個頻道。"
+				},
+				"role": {
+					"cmd": "verification <id> role <新身份組>",
+					"desc": "我將更改驗證方式的身份組。可用 `|` 來分割多個身份組。"
+				},
+				"editcount": {
+					"cmd": "verification <id> editcount <新編輯數>",
+					"desc": "我將更改驗證方式的最小編輯數。"
+				},
+				"usergroup": {
+					"cmd": "verification <id> usergroup <新 wiki 使用者組>",
+					"desc": "我將更改驗證方式的 wiki 使用者組。可用 `|` 來分割多個使用者組。\n以 `AND` 關鍵詞作爲開頭可限制必須擁有下列全部使用者組。"
+				},
+				"accountage": {
+					"cmd": "verification <id> accountage <新賬戶註冊時長>",
+					"desc": "我將更改驗證方式的最小注冊時長(以天爲計數)。"
+				},
+				"rename": {
+					"cmd": "verification <id> rename",
+					"desc": "在驗證時,若需要,我將會將使用者的 Discord 暱稱改爲 wiki 使用者名。"
+				},
+				"delete": {
+					"cmd": "verification <id> delete",
+					"desc": "我將刪除此驗證方式。"
+				}
+			},
+			"rcscript": {
+				"default": {
+					"cmd": "rcscript",
+					"desc": "我將更改最近更改網路勾手。"
+				},
+				"add": {
+					"cmd": "rcscript add [<wiki>]",
+					"desc": "我將添加一個新的最近更改網路勾手。"
+				},
+				"wiki": {
+					"cmd": "rcscript wiki <新 wiki>",
+					"desc": "我將更改最近更改網路勾手的 wiki。"
+				},
+				"lang": {
+					"cmd": "rcscript lang <新語言>",
+					"desc": "我將更改最近更改網路勾手的語言。"
+				},
+				"display": {
+					"cmd": "rcscript display <新顯示模式>",
+					"desc": "我將更改最近更改網路勾手的顯示模式。"
+				},
+				"feeds": {
+					"cmd": "rc script feeds",
+					"desc": "我將切換是否在最近更改網路勾手上推送 Fandom wiki 上的討論版更改。"
+				},
+				"delete": {
+					"cmd": "rcscript delete",
+					"desc": "我將刪除最近更改網路勾手。"
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "我將嘗試給予每個在這個語音頻道的使用者一個特定的身份組。"
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "我將屏蔽少數管理指令外的全部指令。"
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "我將重新接受全部指令。"
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "如果我被激活了,我就會回答你!否則不會。"
+			}
+		}
+	},
+	"minecraft": {
+		"link": "https://minecraft-zh.gamepedia.com/",
+		"cmdpage": "指令 /",
+		"private": "**私密問題**",
+		"fixed": "修復版本:",
+		"more": "還有 $1 個。",
+		"total": "$1 個問題已被修復"
+	}
+}

+ 0 - 492
i18n/zh.json

@@ -1,492 +0,0 @@
-{
-	"__translator": [
-		"机智的小鱼君",
-		"Dianliang233"
-	],
-	"fallback": [
-		"en"
-	],
-	"aliases": {
-		"page": ["页面"],
-		"search": ["搜索"],
-		"verify": ["验证"]
-	},
-	"dateformat": "zh-CN",
-	"prefix": "此伺服器的命令前缀是 `$1`。你可以使用 `$1settings prefix` 更改前缀。关于全部命令,请见 `$1help`。",
-	"missingperm": "为执行此命令我缺少一些权限:",
-	"limit": "🚨 **停一下,你太快了!** 🚨\n\n$1,你发出的指令过多了。",
-	"disclaimer": "我是一个链接到Gamepedia和Fandom wiki的小机器人。$1用JavaScript写了我。\n\n**我和Fandom无关联并为一个非官方工具!**\n\n你可以在Patreon支持我:",
-	"helpserver": "有问题吗?你可以访问我的专属支援伺服器:",
-	"patreon": "这是Patreon赞助者专属功能!\n你可以在Patreon支持我来使用这个功能:",
-	"settings": {
-		"save_failed": "啊喔,设置保存失败了,请稍后再试。",
-		"missing": "这个伺服器尚未完成设置,使用 $1 以及 $2 来完成设置。",
-		"foundwikis": "你也许指的是这些wiki?",
-		"current": "这是本伺服器的当前设置:",
-		"channel current": "这是本频道的当前设置:",
-		"currentlang": "语言:",
-		"currentprefix": "前缀:",
-		"currentinline": "行内命令:",
-		"currentwiki": "默认wiki:",
-		"currentchannel": "频道覆盖:",
-		"nochannels": "*还没有频道覆盖设置*",
-		"lang": "本伺服器的语言为:",
-		"channel lang": "本频道的语言为:",
-		"langinvalid": "暂不支持这个语言!",
-		"langchanged": "您将本伺服器语言更改为:",
-		"channel langchanged": "您将本频道语言更改为:",
-		"langhelp": "使用 `$1 <language>` 修改语言。\n目前支持的语言:",
-		"wikimissing": "暂未绑定wiki!",
-		"wiki": "本伺服器绑定的wiki是:",
-		"channel wiki": "本频道的wiki是:",
-		"wikiinvalid": "请提供到Gamepedia或Fandom wiki的有效链接!",
-		"wikichanged": "你已将伺服器wiki绑定为:",
-		"channel wikichanged": "你已将频道wiki修改为:",
-		"wikihelp": "使用 `$1 <link>` 来更改默认wiki。\nWiki链接格式应为 `https://<wiki>.gamepedia.com/` 或 `https://<wiki>.fandom.com/`",
-		"prefix": "本伺服器的前缀是:",
-		"prefixinvalid": "不支持提供的前缀!",
-		"prefixchanged": "您将本伺服器命令前缀更改为:",
-		"inline enabled": {
-			"inline": "行内命令目前已在本伺服器启用。",
-			"channel inline": "行内命令目前已在本频道启用。",
-			"inlinechanged": "您启用了本伺服器的行内命令。",
-			"channel inlinechanged": "您启用了本频道的行内命令。",
-			"help": "使用 `$1` 禁用行内命令,例如 `[[$2]]` 和 `{{$2}}`。"
-		},
-		"inline disabled": {
-			"inline": "行内命令目前已在本伺服器禁用。",
-			"channel inline": "行内命令目前已在本频道禁用。",
-			"inlinechanged": "您禁用了本伺服器的行内命令。",
-			"channel inlinechanged": "您禁用了本频道的行内命令。",
-			"help": "使用 `$1` 启用行内命令,例如 `[[$2]]` 和 `{{$2}}`。"
-		}
-	},
-	"pause": {
-		"on": "我已将自己暂停,从现在起我会忽略大部分的指令!",
-		"off": "我已取消暂停,即将继续开始服务!"
-	},
-	"voice": {
-		"text": "我将尝试给予每个在这个语音频道的用户一个特定的身份组:",
-		"enable": "使用 `$1` 启用本功能。",
-		"disable": "使用 `$1` 禁用本功能。",
-		"enabled": "您启用了给予每个在这个语音频道的用户一个特定的身份组的功能。",
-		"disabled": "您禁用了给予每个在这个语音频道的用户一个特定的身份组的功能。",
-		"name": "语音频道名",
-		"channel": "语音频道",
-		"join": "$1 加入了语音频道“$2”。",
-		"left": "$1 离开了语音频道“$2”。"
-	},
-	"verification": {
-		"save_failed": "抱歉,无法保存验证方式,请稍后再试。",
-		"added": "验证方式已保存:",
-		"updated": "验证方式已更新:",
-		"deleted": "验证方式已删除。",
-		"max_entries": "您已触发验证方式数量上限。",
-		"no_role": "请为新的验证方式提供身份组。",
-		"current": "这些是本伺服器目前的验证方式:",
-		"current_selected": "这些是本伺服器的验证方式 `$1`:",
-		"missing": "本伺服器尚未有验证方式。",
-		"add_more": "添加更多验证方式:",
-		"delete_current": "删除此验证方式:",
-		"channel": "频道:",
-		"role": "身份组:",
-		"editcount": "编辑数:",
-		"usergroup": "用户组:",
-		"or": "或",
-		"and": "和",
-		"accountage": "注册时长:",
-		"indays": "(以日计算)",
-		"rename": "修改昵称:",
-		"enabled": "已启用",
-		"disabled": "已禁用",
-		"toggle": "(开关)",
-		"rename_no_permission": "**$1缺少 `管理昵称` 权限来强制更改为wiki用户名!**",
-		"role_too_high": "**$1 身份组的权重无法使 $2 添加!**",
-		"channel_max": "提供的频道过多。",
-		"channel_missing": "提供的频道不存在。",
-		"role_max": "提供的身份组过多。",
-		"role_missing": "提供的身份组不存在。",
-		"role_managed": "提供的身份组权重过高,无法添加。",
-		"value_too_high": "提供的数量过高。",
-		"usergroup_max": "提供的用户组过多。",
-		"usergroup_too_long": "提供的用户组过长。",
-		"new_channel": "<新频道>",
-		"new_role": "<新身份组>",
-		"new_editcount": "<新编辑数>",
-		"new_usergroup": "<新用户组>",
-		"new_accountage": "<新注册时长>"
-	},
-	"verify": {
-		"error": "由于一个错误,验证失败。",
-		"error_reply": "由于一个错误,验证失败,请重试。",
-		"missing": "本频道无可用的验证方式。",
-		"footer": "Wiki账户验证",
-		"failed_gblock": "**全域封禁检查失败!**",
-		"failed_roles": "**添加身份组失败!**",
-		"failed_rename": "**更改昵称失败!**",
-		"audit_reason": "已以“$1”的身份验证。",
-		"user_missing": "Wiki用户“$1”不存在。",
-		"user_missing_reply": "您连接的wiki用户“$1”不存在。",
-		"user_blocked": "**Wiki用户 $1 已被封禁!**",
-		"user_blocked_reply": "您连接的wiki用户**“$1”已被封禁!**",
-		"user_gblocked": "**Wiki用户 $1 已被全域封禁!**",
-		"user_gblocked_reply": "您连接的wiki用户**“$1”已被全域封禁!**",
-		"user_disabled": "**Wiki用户 $1 已被禁用!**",
-		"user_disabled_reply": "您连接的**“$1”的账号已被禁用!**",
-		"user_failed": "Discord用户$1无法和wiki用户 $2 对应。",
-		"user_failed_reply": "您的Discord用户名不和“$1”的对应。",
-		"user_matches": "Discord用户 $1 和wiki用户 $2 对应,但没有达到任何身份组的条件。",
-		"user_matches_reply": "您的Discord用户名和wiki用户“$1”对应,但您没有达到添加任何身份组的条件。",
-		"user_verified": "Discord用户 $1 已成功验证为wiki用户 $2。",
-		"user_verified_reply": "您已被成功验证为wiki用户“$1”",
-		"user_renamed": "用户的Discord昵称已被更改为其wiki用户名",
-		"discord": "Discord用户:",
-		"wiki": "Wiki用户:",
-		"empty": "*空白*",
-		"notice": "注意:",
-		"qualified": "符合:",
-		"qualified_error": "符合,但无法添加:",
-		"help_guide": "请根据[此指导]($1)来添加您的Discord用户名至您的wiki资料页。",
-		"help_gamepedia": "https://help-zh.gamepedia.com/Gamepedia帮助Wiki:Discord验证",
-		"help_fandom": "https://community.fandom.com/zh/wiki/Special:VerifyUser",
-		"help_subpage": "请将您的Discord用户名($1)添加至您在wiki上的Discord子页面:"
-	},
-	"overview": {
-		"inaccurate": "统计信息可能出错",
-		"name": "全名:",
-		"vertical": "主题:",
-		"topic": "分类:",
-		"founder": "创始人:",
-		"created": "创建日期:",
-		"manager": "Wiki经理/主管:",
-		"talk": "讨论",
-		"official": "官方wiki:",
-		"yes": "是",
-		"no": "否",
-		"articles": "文章总数:",
-		"pages": "全部页面:",
-		"edits": "总编辑数:",
-		"users": "活跃用户:",
-		"crossover": "合并与:",
-		"description": "说明:",
-		"image": "图像:",
-		"none": "*无*"
-	},
-	"user": {
-		"gender": {
-			"unknown": "未知",
-			"male": "男",
-			"female": "女"
-		},
-		"groups": {
-			"global_bot": "全域机器人",
-			"hydra_staff": "Gamepedia员工",
-			"wiki_manager": "Wiki主管",
-			"content_team_member": "内容团队",
-			"grasp": "GRASP",
-			"bot-global": "全域机器人",
-			"staff": "Fandom员工",
-			"wiki-manager": "Wiki主管",
-			"helper": "Fandom助手",
-			"content-team-member": "内容团队",
-			"vstf": "VSTF",
-			"content-volunteer": "内容志愿者",
-			"global-discussions-moderator": "全域讨论版主",
-			"vanguard": "Vanguard",
-			"voldev": "志愿开发者",
-			"bot": "机器人",
-			"bureaucrat": "行政员",
-			"sysop": "管理员",
-			"interface-admin": "界面管理员",
-			"content-moderator": "内容版主",
-			"threadmoderator": "讨论版主",
-			"chatmoderator": "聊天主持人",
-			"directors": "向导",
-			"Patrol": "巡查员",
-			"editor": "编辑者",
-			"moderator": "版主",
-			"Elite_users": "精英用户",
-			"patrollers": "巡查员",
-			"rollback": "回退员",
-			"autoreview": "自动复核用户",
-			"autopatrol": "自动巡查/巡查豁免者",
-			"authenticated": "认证用户",
-			"autoconfirmed": "自动确认用户",
-			"user": "用户"
-		},
-		"info": {
-			"gender": "性别:",
-			"registration": "注册时间:",
-			"editcount": "编辑数:",
-			"globaleditcount": "全域编辑数:",
-			"wikisedited": "编辑过的wiki:",
-			"group": "用户组:",
-			"discord": "Discord:",
-			"favwiki": "最喜爱的wiki:",
-			"loading": "正在加载全域数据…"
-		},
-		"block": {
-			"header": "$1 目前正被封禁!",
-			"text": "被 $3 封禁,时间从 $1 到 $2,理由:“$4”",
-			"noreason": "被 $3 封禁,时间从 $1 到 $2",
-			"nofromtext": "被 $3 封禁,直到 $2,理由:“$4”",
-			"nofromnoreason": "被 $3 封禁,直到 $2",
-			"until_infinity": "天荒地老"
-		},
-		"gblock": {
-			"header": "$1 目前正被全域封禁!",
-			"text": "被 $3 封禁,时间从 $1 到 $2,理由:“$4”",
-			"noreason": "被 $3 封禁,时间从 $1 到 $2",
-			"disabled": "此账户目前正被禁用!"
-		}
-	},
-	"diff": {
-		"badrev": "至少有一个历史版本未展现!",
-		"nocomment": "*未提供描述*",
-		"hidden": "*隐藏*",
-		"info": {
-			"editor": "编辑者:",
-			"timestamp": "时间:",
-			"size": "差异:",
-			"bytes": "$1 {{PLURAL:$1|Byte|Bytes}}",
-			"comment": "摘要:",
-			"tags": "标签:",
-			"removed": "删除:",
-			"added": "添加:",
-			"more": "更多",
-			"whitespace": "仅有空白"
-		}
-	},
-	"search": {
-		"infopage": "结果不正确?用$1来指定连接",
-		"infosearch": "结果不正确?用$1来指定链接或$2列出所有结果",
-		"category": {
-			"content": "分类下的内容:",
-			"empty": "*空白分类*",
-			"pages": "$1 {{PLURAL:$1|个页面}}",
-			"files": "$1 {{PLURAL:$1|个文件}}",
-			"subcats": "$1 {{PLURAL:$1|个分类}}"
-		},
-		"special": "此特殊页面的内容:",
-		"empty": "*此特殊页面内容为空*",
-		"results": "共 $1 {{PLURAL:$1|个结果}}"
-	},
-	"discussion": {
-		"post": "帖子",
-		"main": "讨论版",
-		"image": "查看图片",
-		"votes": "$1 {{PLURAL:$1|个投票}}"
-	},
-	"invite": {
-		"bot": "使用这个链接把我添加到其他伺服器:"
-	},
-	"test": {
-		"random": 10,
-		"pause": "我正处于暂停状态",
-		"text": [
-		],
-		"default": "全功率运行中!",
-		"time": "咋瓦鲁多"
-	},
-	"help": {
-		"all": "想知道我能够干什么?让我来告诉你吧:",
-		"admin": "这些指令仅限管理员使用:",
-		"noadmin": "这个指令仅限拥有`管理员`权限的用户使用!",
-		"pause": "**我目前处于暂停状态!**\n仅能使用以下指令:",
-		"footer": "如果你觉得我的某个信息刷屏,在信息上添加一个🗑️图标我就会自己删掉这一条信息。",
-		"list": {
-			"default": {
-				"cmd": "<关键字>",
-				"desc": "我将返回一个wiki指定页面的链接"
-			},
-			"inline": {
-				"link": {
-					"cmd": "[[<页面名>]]",
-					"desc": "我将返回一个wiki指定页面的直接链接。"
-				},
-				"template": {
-					"cmd": "{{<页面名>}}",
-					"desc": "我将返回一个wiki指定页面的链接。"
-				}
-			},
-			"gamepedia": {
-				"cmd": "!<wiki> <关键字>",
-				"desc": "我将返回特定Gamepedia wiki指定页面的链接:`https://<wiki>.gamepedia.com/`"
-			},
-			"fandom": {
-				"cmd": "?<wiki> <关键字>",
-				"desc": "我将返回特定Fandom wiki的指定页面的链接:`https://<wiki>.fandom.com/`"
-			},
-			"wikia": {
-				"cmd": "??<wiki> <关键字>",
-				"desc": "我将返回特定的org域名下的wiki的指定页面的链接:`https://<wiki>.wikia.org/`"
-			},
-			"user": {
-				"cmd": "User:<用户名>",
-				"desc": "我将返回指定用户的信息"
-			},
-			"overview": {
-				"cmd": "overview",
-				"desc": "我将返回wiki的相关数据以及统计信息"
-			},
-			"random": {
-				"cmd": "random",
-				"desc": "我将返回wiki上一个随机页面的链接"
-			},
-			"diff": {
-				"id": {
-					"cmd": "diff <版本id> [<旧版本id>]",
-					"desc": "我将返回指定差异编号的比较页面链接"
-				},
-				"name": {
-					"cmd": "diff <页面名>",
-					"desc": "我将返回指定页面最后一次更改的比较页面链接"
-				}
-			},
-			"page": {
-				"cmd": "page <页面名>",
-				"desc": "我将返回指定wiki页面的链接"
-			},
-			"search": {
-				"cmd": "search <关键字>",
-				"desc": "我将返回wiki搜索结果的链接"
-			},
-			"minecraft": {
-				"default": {
-					"cmd": "/<Minecraft命令>",
-					"desc": "我将返回此Minecraft命令的语法和此命令在Minecraft Wiki上的链接。"
-				},
-				"command": {
-					"cmd": "command <Minecraft命令>",
-					"desc": "我将返回此Minecraft命令的语法和此命令在Minecraft Wiki上的链接。"
-				},
-				"bug": {
-					"cmd": "bug <Minecraft漏洞>",
-					"desc": "我将返回此漏洞在Minecraft漏洞追踪器上的链接。"
-				}
-			},
-			"discussion": {
-				"thread": {
-					"cmd": "discussion <关键字>",
-					"desc": "我将返回在相关Fandom wiki中的讨论。"
-				},
-				"post": {
-					"cmd": "discussion post <关键字>",
-					"desc": "我将返回在相关Fandom wiki中的讨论帖。"
-				}
-			},
-			"info": {
-				"cmd": "info",
-				"desc": "我将进行自我介绍"
-			},
-			"help": {
-				"default": {
-					"cmd": "help",
-					"desc": "我将提供使用帮助"
-				},
-				"command": {
-					"cmd": "help <指令>",
-					"desc": "我将提供指该令的使用方法"
-				},
-				"admin": {
-					"cmd": "help admin",
-					"desc": "我将提供所有的管理指令"
-				},
-				"verification": {
-					"cmd": "help verification",
-					"desc": "我将详细解释验证命令如何工作。"
-				}
-			},
-			"settings": {
-				"default": {
-					"cmd": "settings",
-					"desc": "我将更改设置参数"
-				},
-				"wiki": {
-					"cmd": "settings wiki <wiki>",
-					"desc": "我将更改本伺服器的默认wiki。"
-				},
-				"lang": {
-					"cmd": "settings lang <语言>",
-					"desc": "我将更改本伺服器的语言。"
-				},
-				"inline": {
-					"cmd": "settings inline toggle",
-					"desc": "我将更改本伺服器的行内指令启用情况。"
-				},
-				"prefix": {
-					"cmd": "settings prefix <前缀>",
-					"desc": "我将更改本伺服器的命令前缀。"
-				},
-				"channel": {
-					"cmd": "settings channel",
-					"desc": "我将更改本伺服器的当前频道的覆盖设置。"
-				}
-			},
-			"verify": {
-				"cmd": "verify <wiki用户名>",
-				"desc": "使用此命令以验证您的Discord账户和您的wiki账户,并获取您的wiki账户对应的身份组。"
-			},
-			"verification": {
-				"default": {
-					"cmd": "verification",
-					"desc": "我将更改由 `$1验证` 触发的wiki验证方式命令。"
-				},
-				"add": {
-					"cmd": "verification add <身份组>",
-					"desc": "我将添加一个新的验证方式。可用 `|` 来分割多个身份组组。"
-				},
-				"channel": {
-					"cmd": "verification <id> channel <新频道>",
-					"desc": "我将更改适用于本验证方式的频道。可用 `|` 来分割多个频道。"
-				},
-				"role": {
-					"cmd": "verification <id> role <新身份组>",
-					"desc": "我将更改此验证方式的身份组。可用 `|` 来分割多个身份组。"
-				},
-				"editcount": {
-					"cmd": "verification <id> editcount <新编辑数>",
-					"desc": "我将更改验证方式的最小编辑数。"
-				},
-				"usergroup": {
-					"cmd": "verification <id> usergroup <新wiki用户组>",
-					"desc": "我将更改此验证方式的wiki用户组。可用 `|` 来分割多个用户组。\n\t• 以 `AND` 关键词作为开头可限制必须拥有下列全部用户组。"
-				},
-				"accountage": {
-					"cmd": "verification <id> accountage <新账户注册时长>",
-					"desc": "我将更改此验证方式的最小注册时长(以天为计数)。"
-				},
-				"rename": {
-					"cmd": "verification <id> rename",
-					"desc": "在验证时,若需要,我将会将用户的Discord昵称改为wiki用户名。"
-				},
-				"delete": {
-					"cmd": "verification <id> delete",
-					"desc": "我将删除此验证方式。"
-				}
-			},
-			"voice": {
-				"cmd": "voice",
-				"desc": "我将尝试给予每个在这个语音频道的用户一个特定的身份组。"
-			},
-			"pause": {
-				"inactive": {
-					"cmd": "pause $1",
-					"desc": "我将屏蔽少数管理指令外的全部指令"
-				},
-				"active": {
-					"cmd": "pause $1",
-					"desc": "我将重新接受全部指令"
-				}
-			},
-			"test": {
-				"cmd": "test",
-				"desc": "如果我被激活了,我就会回答你!否则不会。"
-			}
-		}
-	},
-	"minecraft": {
-		"link": "https://minecraft-zh.gamepedia.com/",
-		"cmdpage": "命令/"
-	}
-}

+ 2 - 2
package.json

@@ -19,12 +19,12 @@
     "full-icu": "^1.3.1",
     "got": "^10.7.0",
     "htmlparser2": "^3.10.1",
-    "npm": "^6.14.5",
+    "npm": "^6.14.7",
     "sqlite3": "^4.2.0"
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/Markus-Rost/discord-wiki-bot.git"
+    "url": "https://github.com/Markus-Rost/discord-wiki-bot.git"
   },
   "keywords": [
     "mediawiki",

+ 3 - 3
util/database.js

@@ -42,7 +42,7 @@ function getSettings(trysettings = 1) {
 						console.log( '- ' + shardId + ': Created the patreons index.' );
 					} );
 				} );
-				db.run( 'CREATE TABLE IF NOT EXISTS discord(guild TEXT NOT NULL, channel TEXT, lang TEXT NOT NULL DEFAULT ?, wiki TEXT NOT NULL DEFAULT ?, prefix TEXT NOT NULL DEFAULT ?, patreon TEXT, voice INTEGER, inline INTEGER, UNIQUE(guild, channel), FOREIGN KEY(patreon) REFERENCES patreons(patreon) ON DELETE SET NULL)', [defaultSettings.lang, defaultSettings.wiki, process.env.prefix], function (error) {
+				db.run( 'CREATE TABLE IF NOT EXISTS discord(guild TEXT NOT NULL, channel TEXT, lang TEXT NOT NULL DEFAULT [' + defaultSettings.lang + '], wiki TEXT NOT NULL DEFAULT [' + defaultSettings.wiki + '], prefix TEXT NOT NULL DEFAULT [' + process.env.prefix + '], patreon TEXT, voice INTEGER, inline INTEGER, UNIQUE(guild, channel), FOREIGN KEY(patreon) REFERENCES patreons(patreon) ON DELETE SET NULL)', [], function (error) {
 					if ( error ) {
 						console.log( '- ' + shardId + ': Error while creating the discord table: ' + error );
 						return error;
@@ -88,7 +88,7 @@ function getSettings(trysettings = 1) {
 						getSettings(trysettings);
 					}
 				} );
-				db.run( 'CREATE TABLE IF NOT EXISTS verification(guild TEXT NOT NULL, configid INTEGER NOT NULL, channel TEXT NOT NULL, role TEXT NOT NULL, editcount INTEGER NOT NULL DEFAULT ?, usergroup TEXT NOT NULL DEFAULT ?, accountage INTEGER NOT NULL DEFAULT ?, rename INTEGER NOT NULL DEFAULT ?, UNIQUE(guild, configid))', [0, 'user', 0, 0], function (error) {
+				db.run( 'CREATE TABLE IF NOT EXISTS verification(guild TEXT NOT NULL, configid INTEGER NOT NULL, channel TEXT NOT NULL, role TEXT NOT NULL, editcount INTEGER NOT NULL DEFAULT [0], usergroup TEXT NOT NULL DEFAULT [user], accountage INTEGER NOT NULL DEFAULT [0], rename INTEGER NOT NULL DEFAULT [0], UNIQUE(guild, configid))', [], function (error) {
 					if ( error ) {
 						console.log( '- ' + shardId + ': Error while creating the verification table: ' + error );
 						return error;
@@ -102,7 +102,7 @@ function getSettings(trysettings = 1) {
 						console.log( '- ' + shardId + ': Created the verification index.' );
 					} );
 				} );
-				db.run( 'CREATE TABLE IF NOT EXISTS rcgcdw(guild TEXT NOT NULL, configid INTEGER NOT NULL, webhook TEXT NOT NULL UNIQUE, wiki TEXT NOT NULL, lang TEXT NOT NULL DEFAULT ?, display INTEGER NOT NULL DEFAULT ?, wikiid INTEGER, rcid INTEGER, postid TEXT, UNIQUE(guild, configid))', [defaultSettings.lang, 1], function (error) {
+				db.run( 'CREATE TABLE IF NOT EXISTS rcgcdw(guild TEXT NOT NULL, configid INTEGER NOT NULL, webhook TEXT NOT NULL UNIQUE, wiki TEXT NOT NULL, lang TEXT NOT NULL DEFAULT [' + defaultSettings.lang + '], display INTEGER NOT NULL DEFAULT [1], wikiid INTEGER, rcid INTEGER, postid TEXT, UNIQUE(guild, configid))', [], function (error) {
 					if ( error ) {
 						console.log( '- ' + shardId + ': Error while creating the rcgcdw table: ' + error );
 						return error;

+ 15 - 9
util/i18n.js

@@ -5,7 +5,7 @@ Object.keys(i18n.allLangs.names).forEach( lang => i18n[lang] = require('../i18n/
 const defaultAliases = ( i18n?.[defaultSettings.lang]?.aliases || {} );
 
 /**
- * A langauge.
+ * A language.
  * @class
  */
 class Lang {
@@ -18,21 +18,25 @@ class Lang {
 	constructor(lang = defaultSettings.lang, namespace = '') {
 		this.lang = lang;
 		this.namespace = namespace;
-		this.fallback = ( i18n?.[lang]?.fallback.slice() || [] );
+		this.fallback = ( i18n?.[lang]?.fallback.slice() || [defaultSettings.lang] ).filter( fb => fb.trim() );
 
 		this.localNames = {};
 		this.aliases = {};
 		let aliases = ( i18n?.[lang]?.aliases || {} );
 		Object.keys(aliases).forEach( cmd => {
-			if ( !( cmd in this.localNames ) ) this.localNames[cmd] = aliases[cmd][0];
+			if ( aliases[cmd][0].trim() && !( cmd in this.localNames ) ) {
+				this.localNames[cmd] = aliases[cmd][0];
+			}
 			aliases[cmd].forEach( alias => {
-				if ( !( alias in this.aliases ) ) this.aliases[alias] = cmd;
+				if ( alias.trim() && !( alias in this.aliases ) ) this.aliases[alias] = cmd;
 			} );
 		} );
 		Object.keys(defaultAliases).forEach( cmd => {
-			if ( !( cmd in this.localNames ) ) this.localNames[cmd] = defaultAliases[cmd][0];
+			if ( defaultAliases[cmd][0].trim() && !( cmd in this.localNames ) ) {
+				this.localNames[cmd] = defaultAliases[cmd][0];
+			}
 			defaultAliases[cmd].forEach( alias => {
-				if ( !( alias in this.aliases ) ) this.aliases[alias] = cmd;
+				if ( alias.trim() && !( alias in this.aliases ) ) this.aliases[alias] = cmd;
 			} );
 		} );
 	}
@@ -52,6 +56,7 @@ class Lang {
 		for (let n = 0; n < keys.length; n++) {
 			if ( text ) {
 				text = text?.[keys[n]];
+				if ( typeof text === 'string' ) text = text.trim()
 			}
 			if ( !text ) {
 				if ( fallback < this.fallback.length ) {
@@ -107,8 +112,8 @@ class Lang {
 //	}
 
 	/**
-	 * Get names for all langauges.
-	 * @param {Boolean} isRcGcDw - Get the langauge for RcGcDw?
+	 * Get names for all languages.
+	 * @param {Boolean} isRcGcDw - Get the languages for RcGcDw?
 	 * @returns {Object}
 	 * @static
 	 */
@@ -157,7 +162,8 @@ function plural(lang, number, args) {
 		case 'nl':
 		case 'pt':
 		case 'tr':
-		case 'zh':
+		case 'zh-hans':
+		case 'zh-hant':
 		default:
 			if ( number === 1 ) text = getArg(args, 0);
 			else text = getArg(args, 1);

+ 1 - 1
util/newMessage.js

@@ -54,7 +54,7 @@ function newMessage(msg, lang, wiki = defaultSettings.wiki, prefix = process.env
 		if ( count === maxcount ) {
 			console.log( '- Message contains too many commands!' );
 			msg.reactEmoji('⚠️');
-			msg.sendChannelError( lang.get('limit', '<@' + author.id + '>'), {allowedMentions:{users:[author.id]}} );
+			msg.sendChannelError( lang.get('general.limit', '<@' + author.id + '>'), {allowedMentions:{users:[author.id]}} );
 			return;
 		}
 		line = line.substring(prefix.length);