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

Reworked help command, added comments

Markus-Rost 4 жил өмнө
parent
commit
c0919dbaef
51 өөрчлөгдсөн 2173 нэмэгдсэн , 632 устгасан
  1. 4 0
      bot.js
  2. 32 1
      cmds/eval.js
  3. 9 0
      cmds/get.js
  4. 119 18
      cmds/help.js
  5. 8 0
      cmds/info.js
  6. 8 0
      cmds/invite.js
  7. 8 0
      cmds/link.js
  8. 12 0
      cmds/minecraft/bug.js
  9. 12 0
      cmds/minecraft/command.js
  10. 17 4
      cmds/minecraft/syntax.js
  11. 8 0
      cmds/patreon.js
  12. 8 0
      cmds/pause.js
  13. 8 0
      cmds/say.js
  14. 12 0
      cmds/settings.js
  15. 9 0
      cmds/stop.js
  16. 8 0
      cmds/test.js
  17. 8 0
      cmds/verification.js
  18. 13 0
      cmds/verify.js
  19. 8 0
      cmds/voice.js
  20. 17 3
      cmds/wiki/fandom.js
  21. 25 0
      cmds/wiki/fandom/diff.js
  22. 8 0
      cmds/wiki/fandom/overview.js
  23. 8 0
      cmds/wiki/fandom/random.js
  24. 10 0
      cmds/wiki/fandom/search.js
  25. 19 0
      cmds/wiki/fandom/user.js
  26. 36 6
      cmds/wiki/gamepedia.js
  27. 25 0
      cmds/wiki/gamepedia/diff.js
  28. 8 0
      cmds/wiki/gamepedia/overview.js
  29. 18 0
      cmds/wiki/gamepedia/random.js
  30. 10 0
      cmds/wiki/gamepedia/search.js
  31. 25 1
      cmds/wiki/gamepedia/user.js
  32. 24 0
      functions/discussion.js
  33. 10 0
      functions/global_block.js
  34. 5 0
      functions/helpserver.js
  35. 5 0
      functions/helpsetup.js
  36. 11 0
      functions/special_page.js
  37. 199 75
      i18n/de.json
  38. 193 55
      i18n/en.json
  39. 133 64
      i18n/fr.json
  40. 135 66
      i18n/nl.json
  41. 195 70
      i18n/pl.json
  42. 183 73
      i18n/pt.json
  43. 132 60
      i18n/ru.json
  44. 135 69
      i18n/tr.json
  45. 194 62
      i18n/zh.json
  46. 10 1
      main.js
  47. 8 0
      util/allSites.js
  48. 8 0
      util/database.js
  49. 12 0
      util/extract_desc.js
  50. 48 1
      util/i18n.js
  51. 13 3
      util/newMessage.js

+ 4 - 0
bot.js

@@ -404,6 +404,10 @@ global.log_warn = function(warning, api = true) {
 	}
 }
 
+/**
+ * End the process gracefully.
+ * @param {String} signal - The signal received.
+ */
 async function graceful(signal) {
 	isStop = true;
 	console.log( '- ' + shardId + ': ' + signal + ': Preparing to close...' );

+ 32 - 1
cmds/eval.js

@@ -5,6 +5,15 @@ const Discord = require('discord.js');
 const {limit: {verification: verificationLimit, rcgcdw: rcgcdwLimit}} = require('../util/default.json');
 var db = require('../util/database.js');
 
+/**
+ * Processes the "eval" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {Discord.Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ * @async
+ */
 async function cmd_eval(lang, msg, args, line, wiki) {
 	try {
 		var text = util.inspect( await eval( args.join(' ') ) );
@@ -15,13 +24,22 @@ async function cmd_eval(lang, msg, args, line, wiki) {
 	if ( text.length > 2000 ) msg.reactEmoji('✅', true);
 	else msg.sendChannel( '```js\n' + text + '\n```', {split:{prepend:'```js\n',append:'\n```'},allowedMentions:{}}, true );
 
+	/**
+	 * Runs a command with admin permissions.
+	 * @param {String} cmdline - The message text.
+	 */
 	function backdoor(cmdline) {
 		msg.evalUsed = true;
-		newMessage(msg, lang, wiki, patreons[msg.guild.id], null, cmdline);
+		newMessage(msg, lang, wiki, patreons[msg.guild.id], msg.noInline, cmdline);
 		return cmdline;
 	}
 }
 
+/**
+ * Runs database queries.
+ * @param {String} sql - The SQL command.
+ * @param {String[]} sqlargs - The command arguments.
+ */
 function database(sql, sqlargs = []) {
 	return new Promise( function (resolve, reject) {
 		db.all( sql, sqlargs, (error, rows) => {
@@ -31,10 +49,19 @@ function database(sql, sqlargs = []) {
 	} );
 }
 
+/**
+ * Update the list of all sites.
+ * @returns {Promise<Object[]>}
+ */
 function updateAllSites() {
 	return require('../util/allSites.js').update();
 }
 
+/**
+ * Removes the patreon features for a guild.
+ * @param {String} guild - The guild ID.
+ * @param {Discord.Message} msg - The Discord message.
+ */
 function removePatreons(guild, msg) {
 	try {
 		if ( !guild || !msg ) return 'removePatreons(guild, msg) – No guild or message provided!';
@@ -90,6 +117,10 @@ function removePatreons(guild, msg) {
 	}
 }
 
+/**
+ * Removes the settings for deleted guilds and channels.
+ * @param {Discord.Message} msg - The Discord message.
+ */
 function removeSettings(msg) {
 	if ( !msg ) return 'removeSettings(msg) – No message provided!';
 	try {

+ 9 - 0
cmds/get.js

@@ -2,6 +2,15 @@ const {MessageEmbed, Util} = require('discord.js');
 const {defaultSettings, defaultPermissions} = require('../util/default.json');
 var db = require('../util/database.js');
 
+/**
+ * Processes the "get" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ * @async
+ */
 async function cmd_get(lang, msg, args, line, wiki) {
 	var id = args.join().replace( /^\\?<(?:@!?|#)(\d+)>$/, '$1' );
 	if ( /^\d+$/.test(id) ) {

+ 119 - 18
cmds/help.js

@@ -1,51 +1,152 @@
 const help_server = require('../functions/helpserver.js');
 
+const helpmap = {
+	link: ['default', 'inline.link', 'inline.template', 'gamepedia', 'fandom', 'wikia'],
+	inline: ['inline.link', 'inline.template'],
+	user: ['user'],
+	overview: ['overview'],
+	random: ['random'],
+	diff: ['diff.name', 'diff.id'],
+	page: ['page'],
+	search: ['search'],
+	minecraft: ['minecraft.default', 'minecraft.bug'],
+	command: ['minecraft.default', 'minecraft.command'],
+	bug: ['minecraft.bug'],
+	discussion: ['discussion.thread', 'discussion.post'],
+	info: ['info'],
+	help: ['help.default', 'help.command', 'help.admin'],
+	settings: ['settings.default', 'settings.wiki', 'settings.lang', 'settings.inline', 'settings.prefix', 'settings.channel'],
+	verify: ['verify'],
+	verification: ['verification.default', 'verification.add', 'verification.channel', 'verification.role', 'verification.editcount', 'verification.usergroup', 'verification.accountage', 'verification.rename', 'verification.delete'],
+	voice: ['voice'],
+	pause: ['pause.inactive'],
+	test: ['test'],
+}
+
+const helplist = {
+	default: [
+		'link',
+		'user',
+		'overview',
+		'random',
+		'diff',
+		'minecraft',
+		'discussion',
+		'info',
+		'help',
+		'test'
+	],
+	admin: [
+		'help.admin',
+		'settings.default',
+		'verification.default',
+		'help.verification',
+		'voice',
+		'pause.inactive'
+	],
+	pause: [
+		'pause.active',
+		'settings.default',
+		'verification.default',
+		'voice',
+		'test'
+	],
+	minecraft: [
+		'minecraft.default',
+		'minecraft.bug'
+	]
+}
+
+const restrictions = {
+	fandom: ['discussion'],
+	minecraft: ['command', 'bug'],
+	admin: ['settings', 'verification', 'voice', 'pause'],
+	inline: ['inline.link', 'inline.template'],
+	patreon: ['settings.prefix']
+}
+
+/**
+ * Processes the "help" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_help(lang, msg, args, line, wiki) {
 	if ( msg.channel.type === 'text' && pause[msg.guild.id] && ( args.join('') || !msg.isAdmin() ) ) return;
 	if ( msg.isAdmin() && msg.defaultSettings ) help_server(lang, msg);
-	var cmds = lang.get('help.list');
 	var isMinecraft = ( wiki === lang.get('minecraft.link') );
-	var isPatreon = ( msg.channel.type === 'text' && msg.guild.id in patreons );
-	var prefix = ( msg.channel.type === 'text' && patreons[msg.guild.id] || process.env.prefix );
-	var cmdintro = '🔹 `' + prefix;
 	if ( args.join('') ) {
 		if ( args.join(' ').isMention(msg.guild) ) {
 			if ( !( msg.isAdmin() && msg.defaultSettings ) ) help_server(lang, msg);
+			return;
 		}
-		else if ( args[0].toLowerCase() === 'admin' ) {
+		var invoke = args[0].toLowerCase();
+		var cmd = ( lang.aliases[invoke] || invoke );
+		if ( cmd === 'admin' ) {
 			if ( msg.channel.type !== 'text' || msg.isAdmin() ) {
-				var cmdlist = lang.get('help.admin') + '\n' + cmds.filter( cmd => cmd.admin && !cmd.hide && ( !cmd.patreon || isPatreon ) ).map( cmd => cmdintro + cmd.cmd + '`\n\t' + cmd.desc ).join('\n');
-				cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : msg.client.user.username ) ).replaceSave( /@prefix/g, prefix );
+				var cmdlist = lang.get('help.admin') + '\n';
+				cmdlist += formathelp(helplist.admin, msg, lang);
 				msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}} );
 			}
 			else {
 				msg.replyMsg( lang.get('help.noadmin') );
 			}
 		}
-		else if ( args[0].toLowerCase() === 'minecraft' ) {
-			var cmdlist = '<' + lang.get('minecraft.link') + '>\n' + cmds.filter( cmd => cmd.minecraft && !cmd.hide ).map( cmd => cmdintro + cmd.cmd + '`\n\t' + cmd.desc ).join('\n');
-			cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : msg.client.user.username ) ).replaceSave( /@prefix/g, prefix );
+		else if ( cmd === 'minecraft' ) {
+			var cmdlist = '<' + lang.get('minecraft.link') + '>\n';
+			cmdlist += formathelp(helplist.minecraft, msg, lang);
 			msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}} );
 		}
-		else {
-			var cmdlist = cmds.filter( cmd => cmd.cmd.split(' ')[0] === args[0].toLowerCase() && !cmd.unsearchable && ( msg.channel.type !== 'text' || !cmd.admin || msg.isAdmin() ) && ( !cmd.patreon || isPatreon ) && ( !cmd.minecraft || isMinecraft ) ).map( cmd => cmdintro + cmd.cmd + '`\n\t' + cmd.desc ).join('\n');
-			cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : msg.client.user.username ) ).replaceSave( /@prefix/g, prefix );
-			if ( cmdlist === '' ) msg.reactEmoji('❓');
+		else if ( cmd in helpmap && 
+		( !restrictions.fandom.includes( cmd ) || wiki.isFandom() ) && 
+		( !restrictions.minecraft.includes( cmd ) || isMinecraft ) && 
+		( !restrictions.admin.includes( cmd ) || msg.isAdmin() ) ) {
+			var cmdlist = formathelp(helpmap[cmd], msg, lang);
+			if ( !cmdlist.length ) msg.reactEmoji('❓');
 			else msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}} );
 		}
+		else msg.reactEmoji('❓');
 	}
 	else if ( msg.isAdmin() && pause[msg.guild.id] ) {
-		var cmdlist = lang.get('help.pause') + '\n' + cmds.filter( cmd => cmd.pause && ( !cmd.patreon || isPatreon ) ).map( cmd => cmdintro + cmd.cmd + '`\n\t' + cmd.desc ).join('\n');
-		cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : msg.client.user.username ) ).replaceSave( /@prefix/g, prefix );
+		var cmdlist = lang.get('help.pause') + '\n';
+		cmdlist += formathelp(helplist.pause, msg, lang);
 		msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}}, true );
 	}
 	else {
-		var cmdlist = lang.get('help.all') + '\n' + cmds.filter( cmd => !cmd.hide && !cmd.admin && ( !cmd.patreon || isPatreon ) && ( !cmd.fandom || wiki.isFandom() ) && !( cmd.inline && msg.noInline ) && ( !cmd.minecraft || isMinecraft ) ).map( cmd => ( cmd.inline ? '🔹 `' : cmdintro ) + cmd.cmd + '`\n\t' + cmd.desc ).join('\n') + '\n\n🔸 ' + lang.get('help.footer');
-		cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : msg.client.user.username ) ).replaceSave( /@prefix/g, prefix );
+		var cmdlist = lang.get('help.all') + '\n';
+		helplist.default.forEach( cmd => {
+			if ( ( !restrictions.fandom.includes( cmd ) || wiki.isFandom() ) && 
+			( !restrictions.minecraft.includes( cmd ) || isMinecraft ) ) {
+				cmdlist += formathelp(helpmap[cmd], msg, lang) + '\n';
+			}
+		} );
+		cmdlist += '\n🔸 ' + lang.get('help.footer');
 		msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}} );
 	}
 }
 
+/**
+ * Format the help messages.
+ * @param {String[]} messages - The help messages.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ */
+function formathelp(messages, msg, lang) {
+	var prefix = ( msg.channel.type === 'text' && patreons[msg.guild.id] || process.env.prefix );
+	var mention = '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : msg.client.user.username );
+	return messages.filter( message => {
+		if ( restrictions.inline.includes( message ) && msg.noInline ) return false;
+		if ( !restrictions.patreon.includes( message ) ) return true;
+		return ( msg.channel.type === 'text' && msg.guild.id in patreons );
+	} ).map( message => {
+		var cmd = message.split('.')[0];
+		var intro = ( restrictions.inline.includes( message ) ? '' : prefix );
+		return '🔹 `' + intro + lang.get('help.list.' + message + '.cmd', mention).replace( new RegExp( '^' + cmd ), ( lang.localNames[cmd] || cmd ) ) + '`\n\t' + lang.get('help.list.' + message + '.desc', prefix)
+	} ).join('\n');
+}
+
 module.exports = {
 	name: 'help',
 	everyone: true,

+ 8 - 0
cmds/info.js

@@ -1,5 +1,13 @@
 const help_server = require('../functions/helpserver.js');
 
+/**
+ * Processes the "info" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_info(lang, msg, args, line, wiki) {
 	if ( args.join('') ) this.LINK(lang, msg, line, wiki);
 	else {

+ 8 - 0
cmds/invite.js

@@ -1,5 +1,13 @@
 const {defaultPermissions} = require('../util/default.json');
 
+/**
+ * Processes the "invite" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_invite(lang, msg, args, line, wiki) {
 	if ( args.join('') ) {
 		this.LINK(lang, msg, line, wiki);

+ 8 - 0
cmds/link.js

@@ -5,6 +5,14 @@ const check_wiki = {
 };
 const help_setup = require('../functions/helpsetup.js');
 
+/**
+ * Processes the wiki linking command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} title - The page title.
+ * @param {String} wiki - The wiki for the page.
+ * @param {String} [cmd] - The command at this point.
+ */
 function cmd_link(lang, msg, title, wiki, cmd = '') {
 	if ( msg.isAdmin() && msg.defaultSettings ) help_setup(lang, msg);
 	if ( /^\|\|(?:(?!\|\|).)+\|\|$/.test(title) ) {

+ 12 - 0
cmds/minecraft/bug.js

@@ -1,5 +1,17 @@
 const {MessageEmbed} = require('discord.js');
 
+/**
+ * Sends a Minecraft issue.
+ * @param {import('../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} title - The page title.
+ * @param {String} cmd - The command at this point.
+ * @param {String} querystring - The querystring for the link.
+ * @param {String} fragment - The section for the link.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function minecraft_bug(lang, msg, args, title, cmd, querystring, fragment, reaction, spoiler) {
 	var invoke = args[0];
 	args = args.slice(1);

+ 12 - 0
cmds/minecraft/command.js

@@ -1,3 +1,15 @@
+/**
+ * Processes Minecraft commands.
+ * @param {import('../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} title - The page title.
+ * @param {String} cmd - The command at this point.
+ * @param {String} querystring - The querystring for the link.
+ * @param {String} fragment - The section for the link.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function minecraft_command(lang, msg, args, title, cmd, querystring, fragment, reaction, spoiler) {
 	if ( args.join('') ) {
 		if ( args[0].startsWith( '/' ) ) this.SYNTAX(lang, msg, args[0].substring(1), args.slice(1), title, cmd, querystring, fragment, reaction, spoiler);

+ 17 - 4
cmds/minecraft/syntax.js

@@ -1,8 +1,21 @@
 const commands = require('./commands.json');
 
-function minecraft_syntax(lang, msg, befehl, args, title, cmd, querystring, fragment, reaction, spoiler) {
-	befehl = befehl.toLowerCase();
-	var aliasCmd = ( commands.aliases[befehl] || befehl );
+/**
+ * Sends a Minecraft command.
+ * @param {import('../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} mccmd - The Minecraft command argument.
+ * @param {String[]} args - The command arguments.
+ * @param {String} title - The page title.
+ * @param {String} cmd - The command at this point.
+ * @param {String} querystring - The querystring for the link.
+ * @param {String} fragment - The section for the link.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
+function minecraft_syntax(lang, msg, mccmd, args, title, cmd, querystring, fragment, reaction, spoiler) {
+	mccmd = mccmd.toLowerCase();
+	var aliasCmd = ( commands.aliases[mccmd] || mccmd );
 	
 	if ( aliasCmd in commands.list ) {
 		var cmdSyntaxMap = commands.list[aliasCmd].map( command => {
@@ -20,7 +33,7 @@ function minecraft_syntax(lang, msg, befehl, args, title, cmd, querystring, frag
 		var lastIndex = Math.max(...cmdSyntaxMap.map( command => command[0] ));
 		var matchCount = Math.max(...cmdSyntaxMap.filter( command => command[0] === lastIndex ).map( command => command[1] ));
 		var regex = new RegExp('/' + aliasCmd, 'g');
-		var cmdSyntax = commands.list[aliasCmd].filter( (command, i) => ( lastIndex === -1 || cmdSyntaxMap[i][0] === lastIndex ) && cmdSyntaxMap[i][1] === matchCount ).join('\n').replaceSave( regex, '/' + befehl );
+		var cmdSyntax = commands.list[aliasCmd].filter( (command, i) => ( lastIndex === -1 || cmdSyntaxMap[i][0] === lastIndex ) && cmdSyntaxMap[i][1] === matchCount ).join('\n').replaceSave( regex, '/' + mccmd );
 		msg.sendChannel( spoiler + '```md\n' + cmdSyntax + '```<' + lang.get('minecraft.link') + lang.get('minecraft.cmdpage') + aliasCmd + '>' + spoiler, {split:{maxLength:2000,prepend:spoiler + '```md\n',append:'```' + spoiler}} );
 		if ( reaction ) reaction.removeEmoji();
 	}

+ 8 - 0
cmds/patreon.js

@@ -1,6 +1,14 @@
 const {limit: {verification: verificationLimit, rcgcdw: rcgcdwLimit}} = require('../util/default.json');
 var db = require('../util/database.js');
 
+/**
+ * Processes the "patreon" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_patreon(lang, msg, args, line, wiki) {
 	if ( msg.channel.id !== process.env.channel || !args.join('') ) {
 		if ( msg.channel.type !== 'text' || !pause[msg.guild.id] ) this.LINK(lang, msg, line, wiki);

+ 8 - 0
cmds/pause.js

@@ -1,3 +1,11 @@
+/**
+ * Processes the "pause" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_pause(lang, msg, args, line, wiki) {
 	if ( msg.channel.type === 'text' && args.join(' ').split('\n')[0].isMention(msg.guild) && ( msg.isAdmin() || msg.isOwner() ) ) {
 		if ( pause[msg.guild.id] ) {

+ 8 - 0
cmds/say.js

@@ -1,3 +1,11 @@
+/**
+ * Processes the "say" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_say(lang, msg, args, line, wiki) {
 	var text = args.join(' ');
 	var imgs = [];

+ 12 - 0
cmds/settings.js

@@ -8,6 +8,14 @@ var allSites = [];
 const getAllSites = require('../util/allSites.js');
 getAllSites.then( sites => allSites = sites );
 
+/**
+ * Processes the "settings" command.
+ * @param {Lang} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_settings(lang, msg, args, line, wiki) {
 	if ( !allSites.length ) getAllSites.update();
 	if ( !msg.isAdmin() ) return msg.reactEmoji('❌');
@@ -333,6 +341,10 @@ function cmd_settings(lang, msg, args, line, wiki) {
 	} );
 }
 
+/**
+ * Turn user input into a wiki.
+ * @param {String} input - The user input referring to a wiki.
+ */
 function input_to_wiki(input) {
 	var regex = input.match( /^(?:https:\/\/)?([a-z\d-]{1,50}\.(?:gamepedia\.com|(?:fandom\.com|wikia\.org)(?:(?!\/wiki\/)\/[a-z-]{2,12})?))(?:\/|$)/ );
 	if ( regex ) return 'https://' + regex[1] + '/';

+ 9 - 0
cmds/stop.js

@@ -1,3 +1,12 @@
+/**
+ * Processes the "stop" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ * @async
+ */
 async function cmd_stop(lang, msg, args, line, wiki) {
 	if ( args[0] === 'force' && args.slice(1).join(' ').split('\n')[0].isMention(msg.guild) ) {
 		await msg.replyMsg( 'I\'ll destroy myself now!', {}, true );

+ 8 - 0
cmds/test.js

@@ -1,6 +1,14 @@
 const {MessageEmbed} = require('discord.js');
 const help_setup = require('../functions/helpsetup.js');
 
+/**
+ * Processes the "test" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_test(lang, msg, args, line, wiki) {
 	if ( args.join('') ) {
 		if ( msg.channel.type !== 'text' || !pause[msg.guild.id] ) this.LINK(lang, msg, line, wiki);

+ 8 - 0
cmds/verification.js

@@ -1,6 +1,14 @@
 const {limit: {verification: verificationLimit}} = require('../util/default.json');
 var db = require('../util/database.js');
 
+/**
+ * Processes the "verification" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_verification(lang, msg, args, line, wiki) {
 	if ( !msg.isAdmin() ) {
 		if ( msg.channel.type === 'text' && !pause[msg.guild.id] ) this.verify(lang, msg, args, line, wiki);

+ 13 - 0
cmds/verify.js

@@ -4,6 +4,14 @@ const {MessageEmbed} = require('discord.js');
 const {timeoptions} = require('../util/default.json');
 var db = require('../util/database.js');
 
+/**
+ * Processes the "verify" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_verify(lang, msg, args, line, wiki) {
 	if ( msg.channel.type !== 'text' ) return this.LINK(lang, msg, line, wiki);
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
@@ -358,6 +366,11 @@ function cmd_verify(lang, msg, args, line, wiki) {
 	} );
 }
 
+/**
+ * Change HTML text to plain text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToPlain(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {

+ 8 - 0
cmds/voice.js

@@ -1,6 +1,14 @@
 const {defaultSettings} = require('../util/default.json');
 var db = require('../util/database.js');
 
+/**
+ * Processes the "voice" command.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} line - The command as plain text.
+ * @param {String} wiki - The wiki for the message.
+ */
 function cmd_voice(lang, msg, args, line, wiki) {
 	if ( msg.isAdmin() ) {
 		if ( !args.join('') ) {

+ 17 - 3
cmds/wiki/fandom.js

@@ -15,6 +15,20 @@ fs.readdir( './cmds/wiki/fandom', (error, files) => {
 	} );
 } );
 
+/**
+ * Checks a Fandom wiki.
+ * @param {import('../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} title - The page title.
+ * @param {String} wiki - The wiki for the page.
+ * @param {String} cmd - The command at this point.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} [spoiler] - If the response is in a spoiler.
+ * @param {String} [querystring] - The querystring for the link.
+ * @param {String} [fragment] - The section for the link.
+ * @param {String} [interwiki] - The fallback interwiki link.
+ * @param {Number} [selfcall] - The amount of followed interwiki links.
+ */
 function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', querystring = '', fragment = '', interwiki = '', selfcall = 0) {
 	var full_title = title;
 	if ( title.includes( '#' ) ) {
@@ -31,7 +45,7 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 		msg.reactEmoji('⚠️');
 	}
 	var invoke = title.split(' ')[0].toLowerCase();
-	var aliasInvoke = ( lang.get('aliases')[invoke] || invoke );
+	var aliasInvoke = ( lang.aliases[invoke] || invoke );
 	var args = title.split(' ').slice(1);
 	
 	if ( aliasInvoke === 'random' && !args.join('') && !querystring && !fragment ) fn.random(lang, msg, wiki, reaction, spoiler);
@@ -215,10 +229,10 @@ function fandom_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '',
 									text = '';
 								}
 								else if ( wsbody.total === 1 ) {
-									text = '\n' + lang.get('search.infopage', '`' + prefix + cmd + lang.get('search.page') + ' ' + title + linksuffix + '`');
+									text = '\n' + lang.get('search.infopage', '`' + prefix + cmd + ( lang.localNames.page || 'page' ) + ' ' + title + linksuffix + '`');
 								}
 								else {
-									text = '\n' + lang.get('search.infosearch', '`' + prefix + cmd + lang.get('search.page') + ' ' + title + linksuffix + '`', '`' + prefix + cmd + lang.get('search.search') + ' ' + title + linksuffix + '`');
+									text = '\n' + lang.get('search.infosearch', '`' + prefix + cmd + ( lang.localNames.page || 'page' ) + ' ' + title + linksuffix + '`', '`' + prefix + cmd + ( lang.localNames.search || 'search' ) + ' ' + title + linksuffix + '`');
 								}
 								got.get( wiki + 'api.php?action=query&prop=imageinfo|categoryinfo&titles=' + encodeURIComponent( querypage.title ) + '&format=json', {
 									responseType: 'json'

+ 25 - 0
cmds/wiki/fandom/diff.js

@@ -2,6 +2,16 @@ const htmlparser = require('htmlparser2');
 const {MessageEmbed} = require('discord.js');
 const {timeoptions} = require('../../../util/default.json');
 
+/**
+ * Processes a Fandom edit.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} wiki - The wiki for the edit.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ * @param {MessageEmbed} [embed] - The embed for the page.
+ */
 function fandom_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
 	if ( args[0] ) {
 		var error = false;
@@ -189,6 +199,16 @@ function fandom_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
 	}
 }
 
+/**
+ * Sends a Fandom edit.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} wiki - The wiki for the edit.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ * @param {String[]} [compare] - The edit difference.
+ */
 function fandom_diff_send(lang, msg, args, wiki, reaction, spoiler, compare) {
 	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=tags&tglimit=500&tgprop=displayname&prop=revisions&rvprop=ids|timestamp|flags|user|size|comment|tags' + ( args.length === 1 || args[0] === args[1] ? '|content' : '' ) + '&revids=' + args.join('|') + '&format=json', {
 		responseType: 'json'
@@ -419,6 +439,11 @@ function fandom_diff_send(lang, msg, args, wiki, reaction, spoiler, compare) {
 	} );
 }
 
+/**
+ * Change HTML text to plain text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToPlain(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {

+ 8 - 0
cmds/wiki/fandom/overview.js

@@ -7,6 +7,14 @@ var allSites = [];
 const getAllSites = require('../../../util/allSites.js');
 getAllSites.then( sites => allSites = sites );
 
+/**
+ * Sends a Fandom wiki overview.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} wiki - The wiki for the overview.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function fandom_overview(lang, msg, wiki, reaction, spoiler) {
 	if ( !allSites.length ) getAllSites.get().then( sites => allSites = sites );
 	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager|custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|statistics|wikidesc&titles=Special:Statistics&format=json', {

+ 8 - 0
cmds/wiki/fandom/random.js

@@ -2,6 +2,14 @@ const htmlparser = require('htmlparser2');
 const {MessageEmbed} = require('discord.js');
 const gamepedia_random = require('../gamepedia/random.js').run;
 
+/**
+ * Sends a random Fandom page.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} wiki - The wiki for the page.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function fandom_random(lang, msg, wiki, reaction, spoiler) {
 	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=description&siprop=general&generator=random&grnnamespace=0&format=json', {
 		responseType: 'json'

+ 10 - 0
cmds/wiki/fandom/search.js

@@ -1,5 +1,15 @@
 const {MessageEmbed, Util} = require('discord.js');
 
+/**
+ * Searches a Fandom wiki.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} searchterm - The searchterm.
+ * @param {String} wiki - The wiki for the search.
+ * @param {Object} query - The siteinfo from the wiki.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function fandom_search(lang, msg, searchterm, wiki, query, reaction, spoiler) {
 	if ( searchterm.length > 250 ) {
 		searchterm = searchterm.substring(0, 250);

+ 19 - 0
cmds/wiki/fandom/user.js

@@ -3,6 +3,20 @@ const {MessageEmbed} = require('discord.js');
 const global_block = require('../../../functions/global_block.js');
 const {timeoptions, usergroups} = require('../../../util/default.json');
 
+/**
+ * Processes a Fandom user.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} namespace - The user namespace on the wiki.
+ * @param {String} username - The name of the user.
+ * @param {String} wiki - The wiki for the page.
+ * @param {String} querystring - The querystring for the link.
+ * @param {String} fragment - The section for the link.
+ * @param {Object} querypage - The user page on the wiki.
+ * @param {String} contribs - The contributions page on the wiki.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment, querypage, contribs, reaction, spoiler) {
 	if ( /^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
 		got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=blocks&bkprop=user|by|timestamp|expiry|reason&bkip=' + encodeURIComponent( username ) + '&format=json', {
@@ -335,6 +349,11 @@ function fandom_user(lang, msg, namespace, username, wiki, querystring, fragment
 	}
 }
 
+/**
+ * Change HTML text to plain text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToPlain(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {

+ 36 - 6
cmds/wiki/gamepedia.js

@@ -24,6 +24,20 @@ fs.readdir( './cmds/minecraft', (error, files) => {
 	} );
 } );
 
+/**
+ * Checks a Gamepedia wiki.
+ * @param {import('../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} title - The page title.
+ * @param {String} wiki - The wiki for the page.
+ * @param {String} cmd - The command at this point.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} [spoiler] - If the response is in a spoiler.
+ * @param {String} [querystring] - The querystring for the link.
+ * @param {String} [fragment] - The section for the link.
+ * @param {String} [interwiki] - The fallback interwiki link.
+ * @param {Number} [selfcall] - The amount of followed interwiki links.
+ */
 function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '', querystring = '', fragment = '', interwiki = '', selfcall = 0) {
 	var full_title = title;
 	if ( title.includes( '#' ) ) {
@@ -40,13 +54,12 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
 		msg.reactEmoji('⚠️');
 	}
 	var invoke = title.split(' ')[0].toLowerCase();
-	var aliasInvoke = ( lang.get('aliases')[invoke] || invoke );
+	var aliasInvoke = ( lang.aliases[invoke] || invoke );
 	var args = title.split(' ').slice(1);
 	
-	var mcaliasInvoke = ( lang.get('minecraft.aliases')[invoke] || invoke );
-	if ( !msg.notMinecraft && wiki === lang.get('minecraft.link') && ( mcaliasInvoke in minecraft || invoke.startsWith( '/' ) ) ) {
+	if ( !msg.notMinecraft && wiki === lang.get('minecraft.link') && ( aliasInvoke in minecraft || invoke.startsWith( '/' ) ) ) {
 		minecraft.WIKI = this;
-		if ( mcaliasInvoke in minecraft ) minecraft[mcaliasInvoke](lang, msg, args, title, cmd, querystring, fragment, reaction, spoiler);
+		if ( aliasInvoke in minecraft ) minecraft[aliasInvoke](lang, msg, args, title, cmd, querystring, fragment, reaction, spoiler);
 		else minecraft.SYNTAX(lang, msg, invoke.substring(1), args, title, cmd, querystring, fragment, reaction, spoiler);
 	}
 	else if ( aliasInvoke === 'random' && !args.join('') && !querystring && !fragment ) fn.random(lang, msg, wiki, reaction, spoiler);
@@ -188,10 +201,10 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
 										text = '';
 									}
 									else if ( !srbody.continue ) {
-										text = '\n' + lang.get('search.infopage', '`' + prefix + cmd + lang.get('search.page') + ' ' + title + linksuffix + '`');
+										text = '\n' + lang.get('search.infopage', '`' + prefix + cmd + ( lang.localNames.page || 'page' ) + ' ' + title + linksuffix + '`');
 									}
 									else {
-										text = '\n' + lang.get('search.infosearch', '`' + prefix + cmd + lang.get('search.page') + ' ' + title + linksuffix + '`', '`' + prefix + cmd + lang.get('search.search') + ' ' + title + linksuffix + '`');
+										text = '\n' + lang.get('search.infosearch', '`' + prefix + cmd + ( lang.localNames.page || 'page' ) + ' ' + title + linksuffix + '`', '`' + prefix + cmd + ( lang.localNames.search || 'search' ) + ' ' + title + linksuffix + '`');
 									}
 									
 									if ( querypage.categoryinfo ) {
@@ -382,12 +395,24 @@ function gamepedia_check_wiki(lang, msg, title, wiki, cmd, reaction, spoiler = '
 	}
 }
 
+/**
+ * Turns the siteinfo logo into an URL.
+ * @param {Object} arg - The siteinfo from the wiki.
+ * @param {String} arg.logo - The logo from the wiki.
+ * @param {String} arg.server - The server URL from the wiki.
+ * @returns {String}
+ */
 function logoToURL({logo, server: serverURL}) {
 	if ( /^(?:https?:)?\/\//.test(logo) ) logo = logo.replace( /^(?:https?:)?\/\//, 'https://' );
 	else logo = serverURL + ( logo.startsWith( '/' ) ? '' : '/' ) + logo;
 	return logo;
 }
 
+/**
+ * Change HTML text to plain text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToPlain(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {
@@ -400,6 +425,11 @@ function htmlToPlain(html) {
 	return text;
 };
 
+/**
+ * Change HTML text to markdown text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToDiscord(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {

+ 25 - 0
cmds/wiki/gamepedia/diff.js

@@ -2,6 +2,16 @@ const htmlparser = require('htmlparser2');
 const {MessageEmbed} = require('discord.js');
 const {timeoptions} = require('../../../util/default.json');
 
+/**
+ * Processes a Gamepedia edit.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} wiki - The wiki for the edit.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ * @param {MessageEmbed} [embed] - The embed for the page.
+ */
 function gamepedia_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
 	if ( args[0] ) {
 		var error = false;
@@ -202,6 +212,16 @@ function gamepedia_diff(lang, msg, args, wiki, reaction, spoiler, embed) {
 	}
 }
 
+/**
+ * Sends a Gamepedia edit.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String[]} args - The command arguments.
+ * @param {String} wiki - The wiki for the edit.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ * @param {String[]} [compare] - The edit difference.
+ */
 function gamepedia_diff_send(lang, msg, args, wiki, reaction, spoiler, compare) {
 	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=tags&tglimit=500&tgprop=displayname&prop=revisions&rvslots=main&rvprop=ids|timestamp|flags|user|size|comment|tags' + ( args.length === 1 || args[0] === args[1] ? '|content' : '' ) + '&revids=' + args.join('|') + '&format=json', {
 		responseType: 'json'
@@ -442,6 +462,11 @@ function gamepedia_diff_send(lang, msg, args, wiki, reaction, spoiler, compare)
 	} );
 }
 
+/**
+ * Change HTML text to plain text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToPlain(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {

+ 8 - 0
cmds/wiki/gamepedia/overview.js

@@ -5,6 +5,14 @@ var allSites = [];
 const getAllSites = require('../../../util/allSites.js');
 getAllSites.then( sites => allSites = sites );
 
+/**
+ * Sends a Gamepedia wiki overview.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} wiki - The wiki for the overview.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function gamepedia_overview(lang, msg, wiki, reaction, spoiler) {
 	if ( !allSites.length ) getAllSites.update();
 	got.get( wiki + 'api.php?action=query&meta=allmessages|siteinfo&ammessages=custom-Wiki_Manager|custom-GamepediaNotice|custom-FandomMergeNotice&amenableparser=true&siprop=general|statistics&titles=Special:Statistics&format=json', {

+ 18 - 0
cmds/wiki/gamepedia/random.js

@@ -2,6 +2,14 @@ const htmlparser = require('htmlparser2');
 const {MessageEmbed} = require('discord.js');
 const extract_desc = require('../../../util/extract_desc.js');
 
+/**
+ * Sends a random Gamepedia page.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} wiki - The wiki for the page.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function gamepedia_random(lang, msg, wiki, reaction, spoiler) {
 	got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&prop=pageimages|pageprops|extracts&piprop=original|name&ppprop=description|displaytitle&explaintext=true&exsectionformat=raw&exlimit=1&generator=random&grnnamespace=0&format=json', {
 		responseType: 'json'
@@ -57,6 +65,11 @@ function gamepedia_random(lang, msg, wiki, reaction, spoiler) {
 	} );
 }
 
+/**
+ * Change HTML text to plain text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToPlain(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {
@@ -69,6 +82,11 @@ function htmlToPlain(html) {
 	return text;
 };
 
+/**
+ * Change HTML text to markdown text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToDiscord(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {

+ 10 - 0
cmds/wiki/gamepedia/search.js

@@ -1,5 +1,15 @@
 const {MessageEmbed, Util} = require('discord.js');
 
+/**
+ * Searches a Gamepedia wiki.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} searchterm - The searchterm.
+ * @param {String} wiki - The wiki for the search.
+ * @param {Object} query - The siteinfo from the wiki.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function gamepedia_search(lang, msg, searchterm, wiki, query, reaction, spoiler) {
 	if ( searchterm.length > 250 ) {
 		searchterm = searchterm.substring(0, 250);

+ 25 - 1
cmds/wiki/gamepedia/user.js

@@ -8,6 +8,20 @@ var allSites = [];
 const getAllSites = require('../../../util/allSites.js');
 getAllSites.then( sites => allSites = sites );
 
+/**
+ * Processes a Gamepedia user.
+ * @param {import('../../../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} namespace - The user namespace on the wiki.
+ * @param {String} username - The name of the user.
+ * @param {String} wiki - The wiki for the page.
+ * @param {String} querystring - The querystring for the link.
+ * @param {String} fragment - The section for the link.
+ * @param {Object} querypage - The user page on the wiki.
+ * @param {String} contribs - The contributions page on the wiki.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragment, querypage, contribs, reaction, spoiler) {
 	if ( !allSites.length ) getAllSites.update();
 	if ( /^(?:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{2})?|(?:[\dA-F]{1,4}:){7}[\dA-F]{1,4}(?:\/\d{2,3})?)$/.test(username) ) {
@@ -395,7 +409,7 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 							}
 						}
 						
-						msg.sendChannel( spoiler + text + spoiler, {embed} );
+						msg.sendChannel( spoiler + text + spoiler, {embed} ).then( message => global_block(lang, message, username, text, embed, wiki, spoiler) );
 						
 						if ( reaction ) reaction.removeEmoji();
 					}
@@ -410,6 +424,11 @@ function gamepedia_user(lang, msg, namespace, username, wiki, querystring, fragm
 	}
 }
 
+/**
+ * Change HTML text to plain text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToPlain(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {
@@ -422,6 +441,11 @@ function htmlToPlain(html) {
 	return text;
 };
 
+/**
+ * Change HTML text to markdown text.
+ * @param {String} html - The text in HTML.
+ * @returns {String}
+ */
 function htmlToDiscord(html) {
 	var text = '';
 	var parser = new htmlparser.Parser( {

+ 24 - 0
functions/discussion.js

@@ -2,6 +2,16 @@ const htmlparser = require('htmlparser2');
 const {MessageEmbed} = require('discord.js');
 const {limit: {discussion: discussionLimit}} = require('../util/default.json');
 
+/**
+ * Processes discussion commands.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} wiki - The wiki for the page.
+ * @param {String} title - The title of the discussion post.
+ * @param {Object} query - The siteinfo from the wiki.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 	var limit = discussionLimit[( msg?.guild?.id in patreons ? 'patreon' : 'default' )];
 	if ( !title ) {
@@ -261,6 +271,15 @@ function fandom_discussion(lang, msg, wiki, title, query, reaction, spoiler) {
 	}
 }
 
+/**
+ * Send discussion posts.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} wiki - The wiki for the page.
+ * @param {Object} discussion - The discussion post.
+ * @param {import('discord.js').MessageEmbed} embed - The embed for the page.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function discussion_send(lang, msg, wiki, discussion, embed, spoiler) {
 	if ( discussion.title ) {
 		embed.setTitle( discussion.title.escapeFormatting() );
@@ -344,6 +363,11 @@ function discussion_send(lang, msg, wiki, discussion, embed, spoiler) {
 	msg.sendChannel( spoiler + text + spoiler, {embed} );
 }
 
+/**
+ * Format discussion content
+ * @param {Object} jsonModel - The content of the discussion post.
+ * @returns {String}
+ */
 function discussion_formatting(jsonModel) {
 	var description = '';
 	switch ( jsonModel.type ) {

+ 10 - 0
functions/global_block.js

@@ -1,6 +1,16 @@
 const cheerio = require('cheerio');
 const {timeoptions} = require('../util/default.json');
 
+/**
+ * Add global blocks to user messages.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} username - The name of the user.
+ * @param {String} text - The text of the response.
+ * @param {import('discord.js').MessageEmbed} embed - The embed for the page.
+ * @param {String} wiki - The wiki for the page.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function global_block(lang, msg, username, text, embed, wiki, spoiler) {
 	if ( !msg || msg.channel.type !== 'text' || !( msg.guild.id in patreons ) ) return;
 	

+ 5 - 0
functions/helpserver.js

@@ -1,5 +1,10 @@
 const help_setup = require('./helpsetup.js');
 
+/**
+ * Post a message about the help server.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ */
 function help_server(lang, msg) {
 	if ( msg.isAdmin() && msg.defaultSettings ) help_setup(lang, msg);
 	msg.sendChannel( lang.get('helpserver') + '\n' + process.env.invite );

+ 5 - 0
functions/helpsetup.js

@@ -1,3 +1,8 @@
+/**
+ * Send send message to setup the bot.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ */
 function help_setup(lang, msg) {
 	msg.defaultSettings = false;
 	msg.replyMsg( lang.get('settings.missing', '`' + process.env.prefix + 'settings lang`', '`' + process.env.prefix + 'settings wiki`') );

+ 11 - 0
functions/special_page.js

@@ -94,6 +94,17 @@ var querypages = {
 	recentchanges: ['&list=recentchanges&rctype=edit|new|log&rclimit=10', queryfunctions.recentchanges]
 }
 
+/**
+ * Processes special pages.
+ * @param {import('../util/i18n.js')} lang - The user language.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {String} title - The title of the special page.
+ * @param {String} specialpage - The canonical name of the special page.
+ * @param {import('discord.js').MessageEmbed} embed - The embed for the page.
+ * @param {String} wiki - The wiki for the page.
+ * @param {import('discord.js').MessageReaction} reaction - The reaction on the message.
+ * @param {String} spoiler - If the response is in a spoiler.
+ */
 function special_page(lang, msg, title, specialpage, embed, wiki, reaction, spoiler) {
 	if ( specialpage in overwrites ) {
 		var args = title.split('/').slice(1,3);

+ 199 - 75
i18n/de.json

@@ -7,14 +7,15 @@
 	],
 	"dateformat": "de-DE",
 	"aliases": {
-		"hilfe": "help",
-		"seite": "page",
-		"suche": "search",
-		"🎲": "random",
-		"zufall": "random",
-		"übersicht": "overview",
-		"discussions": "discussion",
-		"diskussion": "discussion"
+		"help": ["hilfe"],
+		"page": ["seite"],
+		"search": ["suche"],
+		"random": ["zufall"],
+		"overview": ["übersicht"],
+		"discussion": ["diskussionen", "diskussion"],
+		"user": ["benutzer"],
+		"command": ["befehl"],
+		"bug": ["fehler"]
 	},
 	"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:",
@@ -277,8 +278,6 @@
 		}
 	},
 	"search": {
-		"page": "seite",
-		"search": "suche",
 		"infopage": "Nicht das richtige Ergebnis? Nutze $1 für einen direkten Link.",
 		"infosearch": "Nicht das richtige Ergebnis? Nutze $1 für einen direkten Link oder $2 für eine Liste mit allen Treffern.",
 		"category": {
@@ -324,75 +323,200 @@
 		"noadmin": "du benötigst die `Server verwalten`-Berechtigung für diese Befehle!",
 		"pause": "**Ich bin auf diesem Server derzeit pausiert!**\nNur diese Befehle können ausgeführt werden:",
 		"footer": "Falls du ein ungewolltes Ergebnis bekommen hast, kannst du mit 🗑️ auf meine Nachricht reagieren und ich werde sie löschen.",
-		"list": [
-			{ "cmd": "<Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Artikel im Wiki.", "unsearchable": true },
-			{ "cmd": "[[<Seitenname>]]", "desc": "Ich antworte mit einem direkten Link zu der angegebenen Seite im Wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<Seitenname>}}", "desc": "Ich antworte mit einem Link zu der angegebenen Seite im Wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<Wiki> <Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen Gamepedia-Wiki: `https://<Wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<Wiki> <Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen Fandom-Wiki: `https://<Wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<Wiki> <Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen Wikia-Wiki: `https://<Wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "Benutzer:<Benutzername>", "desc": "Ich liste ein paar Informationen über den Benutzer auf.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "Ich verlinke auf die Änderung im Wiki." },
-			{ "cmd": "diff <Seitenname>", "desc": "Ich verlinke auf die letzte Änderung an der Seite im Wiki." },
-			{ "cmd": "zufall", "desc": "Ich antworte mit einem Link auf eine zufällige Seite im Wiki." },
-			{ "cmd": "random", "desc": "Ich antworte mit einem Link auf eine zufällige Seite im Wiki.", "hide": true },
-			{ "cmd": "🎲", "desc": "Ich antworte mit einem Link auf eine zufällige Seite im Wiki.", "hide": true },
-			{ "cmd": "übersicht", "desc": "Ich liste ein paar Informationen und Statistiken über das Wiki auf." },
-			{ "cmd": "overview", "desc": "Ich liste ein paar Informationen und Statistiken über das Wiki auf.", "hide": true },
-			{ "cmd": "/<Minecraft-Befehl>", "desc": "Ich antworte mit der Syntax des angegebenen Minecraft-Befehls und einem Link auf den Artikel zu diesem Befehl im Minecraft Wiki.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "befehl <Minecraft-Befehl>", "desc": "Ich antworte mit der Syntax des angegebenen Minecraft-Befehls und einem Link auf den Artikel zu diesem Befehl im Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "command <Minecraft-Befehl>", "desc": "Ich antworte mit der Syntax des angegebenen Minecraft-Befehls und einem Link auf den Artikel zu diesem Befehl im Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <Minecraft-Befehl>", "desc": "Ich antworte mit der Syntax des angegebenen Minecraft-Befehls und einem Link auf den Artikel zu diesem Befehl im Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "fehler <Minecraft-Fehler>", "desc": "Ich verlinke auf den Fehler im Minecraft-Bugtracker.", "minecraft": true },
-			{ "cmd": "bug <Minecraft-Fehler>", "desc": "Ich verlinke auf den Fehler im Minecraft-Bugtracker.", "hide": true, "minecraft": true },
-			{ "cmd": "seite <Seitenname>", "desc": "Ich antworte mit einem direkten Link zu der angegebenen Seite im Wiki.", "hide": true },
-			{ "cmd": "page <Seitenname>", "desc": "Ich antworte mit einem direkten Link zu der angegebenen Seite im Wiki.", "hide": true },
-			{ "cmd": "suche <Suchbegriff>", "desc": "Ich antworte mit einem direkten Link auf die Suchseite zu diesem Begriff im Wiki.", "hide": true },
-			{ "cmd": "search <Suchbegriff>", "desc": "Ich antworte mit einem direkten Link auf die Suchseite zu diesem Begriff im Wiki.", "hide": true },
-			{ "cmd": "diskussion <Suchbegriff>", "desc": "Ich antworte mit einem Link auf ein passendes Diskussionsthema im Fandom-Wiki.", "fandom": true },
-			{ "cmd": "discussion <Suchbegriff>", "desc": "Ich antworte mit einem Link auf ein passendes Diskussionsthema im Fandom-Wiki.", "hide": true, "fandom": true },
-			{ "cmd": "diskussion post <Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Diskussionsbeitrag im Fandom-Wiki.", "fandom": true },
-			{ "cmd": "discussion post <Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Diskussionsbeitrag im Fandom-Wiki.", "hide": true, "fandom": true },
-			{ "cmd": "info", "desc": "Ich erzähle etwas über mich." },
-			{ "cmd": "hilfe", "desc": "Ich liste alle Befehle auf." },
-			{ "cmd": "hilfe <Bot-Befehl>", "desc": "Frage mich, wie ein Befehl funktioniert." },
-			{ "cmd": "hilfe admin", "desc": "Ich liste alle Befehle für Administratoren auf." },
-			{ "cmd": "hilfe admin", "desc": "Ich liste alle Befehle für Administratoren auf.", "unsearchable": true, "admin": true },
-			{ "cmd": "help", "desc": "Ich liste alle Befehle auf.", "hide": true },
-			{ "cmd": "help <Bot-Befehl>", "desc": "Frage mich, wie ein Befehl funktioniert.", "hide": true },
-			{ "cmd": "help admin", "desc": "Ich liste alle Befehle für Administratoren auf.", "hide": true },
-			{ "cmd": "settings", "desc": "Ich ändere die Einstellungen für diesen Server.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <Sprache>", "desc": "Ich ändere die Sprache für diesen Server.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <Präfix>", "desc": "Ich ändere das Präfix für diesen Server.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "Ich schalte Inline-Befehle für diesen Server um.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <Wiki>", "desc": "Ich ändere das Standard-Wiki für diesen Server.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "Ich ändere die Überschreibungen für den aktuellen Kanal.", "hide": true, "admin": true },
-			{ "cmd": "verify <Wiki-Benutzername>", "desc": "Nutze diesen Befehl um deinen Discord-Account mit deinem Wiki-Account zu verifizieren und Rollen passend zu deinem Wiki-Account zu erhalten.", "hide": true },
-			{ "cmd": "verification", "desc": "Ich ändere die Wiki-Verifizierungen, die von dem `@prefixverify`-Befehl genutzt werden.", "admin": true, "pause": true },
-			{ "cmd": "hilfe verification", "desc": "Ich erkläre genauer wie der Verifizierungs-Befehl funktioniert.", "admin": true },
-			{ "cmd": "help verification", "desc": "Ich erkläre genauer wie der Verifizierungs-Befehl funktioniert.", "hide": true, "admin": true },
-			{ "cmd": "verification add <Rolle>", "desc": "Ich füge eine neue Wiki-Verifizierung hinzu. Akzeptiert eine durch `|` getrennte Liste.", "hide": true, "admin": true },
-			{ "cmd": "verification <ID> channel <neuer Kanal>", "desc": "Ich ändere den Kanal für die Wiki-Verifizierung. Akzeptiert eine durch `|` getrennte Liste.", "hide": true, "admin": true },
-			{ "cmd": "verification <ID> role <neue Rolle>", "desc": "Ich ändere die Rolle für die Wiki-Verifizierung. Akzeptiert eine durch `|` getrennte Liste.", "hide": true, "admin": true },
-			{ "cmd": "verification <ID> editcount <neues Bearbeitungslimit>", "desc": "Ich ändere das Bearbeitunglimit für die Wiki-Verifizierung.", "hide": true, "admin": true },
-			{ "cmd": "verification <ID> usergroup <neue Benutzergruppe>", "desc": "Ich ändere die Benutzergruppe für die Wiki-Verifizierung. Akzeptiert eine durch `|` getrennte Liste.\n\t• Gib `AND` als ersten Eintrag in der Liste an um alle angegebenen Benutzergruppen zu benötigen.", "hide": true, "admin": true },
-			{ "cmd": "verification <ID> accountage <neues Account-Alter>", "desc": "Ich ändere das Account-Alter für die Wiki-Verifizierung.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "Ich ändere ob der Discord-Nickname des Benutzers zu deren Wiki-Benutzernamen geändert werden soll für die Wiki-Verifizierung.", "hide": true, "admin": true },
-			{ "cmd": "verification <ID> delete", "desc": "Ich lösche die Wiki-Verifizierung.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "Ich versuche allen in einem Sprachkanal eine bestimmte Rolle zu geben:", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "Ich werde auf diesem Server alle Befehle ignorieren, abgesehen von ein paar Befehlen für Administratoren.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "Ich werde auf diesem Server wieder auf alle Befehle reagieren.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "Wenn ich gerade aktiv bin, werde ich antworten! Sonst nicht.", "pause": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<Suchbegriff>",
+				"desc": "Ich antworte mit einem Link auf einen passenden Artikel im Wiki."
+			},
+			"inline": {
+				"link": {
+					"cmd": "[[<Seitenname>]]",
+					"desc": "Ich antworte mit einem direkten Link zu der angegebenen Seite im Wiki."
+				},
+				"template": {
+					"cmd": "{{<Seitenname>}}",
+					"desc": "Ich antworte mit einem Link zu der angegebenen Seite im Wiki."
+				}
+			},
+			"gamepedia": {
+				"cmd": "!<Wiki> <Suchbegriff>",
+				"desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen Gamepedia-Wiki: `https://<Wiki>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<Wiki> <Suchbegriff>",
+				"desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen Fandom-Wiki: `https://<Wiki>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<Wiki> <Suchbegriff>",
+				"desc": "Ich antworte mit einem Link auf einen passenden Artikel im angegebenen Wikia-Wiki: `https://<Wiki>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "Benutzer:<Benutzername>",
+				"desc": "Ich liste ein paar Informationen über den Benutzer auf."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "Ich liste ein paar Informationen und Statistiken über das Wiki auf."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "Ich antworte mit einem Link auf eine zufällige Seite im Wiki."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "Ich verlinke auf die Änderung im Wiki."
+				},
+				"name": {
+					"cmd": "diff <Seitenname>",
+					"desc": "Ich verlinke auf die letzte Änderung an der Seite im Wiki."
+				}
+			},
+			"page": {
+				"cmd": "page <Seitenname>",
+				"desc": "Ich antworte mit einem direkten Link zu der angegebenen Seite im Wiki."
+			},
+			"search": {
+				"cmd": "search <Suchbegriff>",
+				"desc": "Ich antworte mit einem direkten Link auf die Suchseite zu diesem Begriff im Wiki."
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<Minecraft-Befehl>",
+					"desc": "Ich antworte mit der Syntax des angegebenen Minecraft-Befehls und einem Link auf den Artikel zu diesem Befehl im Minecraft Wiki."
+				},
+				"command": {
+					"cmd": "command <Minecraft-Befehl>",
+					"desc": "Ich antworte mit der Syntax des angegebenen Minecraft-Befehls und einem Link auf den Artikel zu diesem Befehl im Minecraft Wiki."
+				},
+				"bug": {
+					"cmd": "bug <Minecraft-Fehler>",
+					"desc": "Ich verlinke auf den Fehler im Minecraft-Bugtracker."
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <Suchbegriff>",
+					"desc": "Ich antworte mit einem Link auf ein passendes Diskussionsthema im Fandom-Wiki."
+				},
+				"post": {
+					"cmd": "discussion post <Suchbegriff>",
+					"desc": "Ich antworte mit einem Link auf einen passenden Diskussionsbeitrag im Fandom-Wiki."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "Ich erzähle etwas über mich."
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "Ich liste alle Befehle auf."
+				},
+				"command": {
+					"cmd": "help <Bot-Befehl>",
+					"desc": "Frage mich, wie ein Befehl funktioniert."
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "Ich liste alle Befehle für Administratoren auf."
+				},
+				"verification": {
+					"cmd": "help verification",
+					"desc": "Ich erkläre genauer wie der Verifizierungs-Befehl funktioniert."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "Ich ändere die Einstellungen für diesen Server."
+				},
+				"wiki": {
+					"cmd": "settings wiki <Wiki>",
+					"desc": "Ich ändere das Standard-Wiki für diesen Server."
+				},
+				"lang": {
+					"cmd": "settings lang <Sprache>",
+					"desc": "Ich ändere die Sprache für diesen Server."
+				},
+				"inline": {
+					"cmd": "settings inline toggle",
+					"desc": "Ich schalte Inline-Befehle für diesen Server um."
+				},
+				"prefix": {
+					"cmd": "settings prefix <Präfix>",
+					"desc": "Ich ändere das Präfix für diesen Server."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "Ich ändere die Überschreibungen für den aktuellen Kanal."
+				}
+			},
+			"verify": {
+				"cmd": "verify <Wiki-Benutzername>",
+				"desc": "Nutze diesen Befehl um deinen Discord-Account mit deinem Wiki-Account zu verifizieren und Rollen passend zu deinem Wiki-Account zu erhalten."
+			},
+			"verification": {
+				"default": {
+					"cmd": "verification",
+					"desc": "Ich ändere die Wiki-Verifizierungen, die von dem `$1verify`-Befehl genutzt werden."
+				},
+				"add": {
+					"cmd": "verification add <Rolle>",
+					"desc": "Ich füge eine neue Wiki-Verifizierung hinzu. Akzeptiert eine durch `|` getrennte Liste."
+				},
+				"channel": {
+					"cmd": "verification <ID> channel <neuer Kanal>",
+					"desc": "Ich ändere den Kanal für die Wiki-Verifizierung. Akzeptiert eine durch `|` getrennte Liste."
+				},
+				"role": {
+					"cmd": "verification <ID> role <neue Rolle>",
+					"desc": "Ich ändere die Rolle für die Wiki-Verifizierung. Akzeptiert eine durch `|` getrennte Liste."
+				},
+				"editcount": {
+					"cmd": "verification <ID> editcount <neues Bearbeitungslimit>",
+					"desc": "Ich ändere das Bearbeitunglimit für die Wiki-Verifizierung."
+				},
+				"usergroup": {
+					"cmd": "verification <ID> usergroup <neue Benutzergruppe>",
+					"desc": "Ich ändere die Benutzergruppe für die Wiki-Verifizierung. Akzeptiert eine durch `|` getrennte Liste.\n\t• Gib `AND` als ersten Eintrag in der Liste an um alle angegebenen Benutzergruppen zu benötigen."
+				},
+				"accountage": {
+					"cmd": "verification <ID> accountage <neues Account-Alter>",
+					"desc": "Ich ändere das Account-Alter für die Wiki-Verifizierung."
+				},
+				"rename": {
+					"cmd": "verification <id> rename",
+					"desc": "Ich ändere ob der Discord-Nickname des Benutzers zu deren Wiki-Benutzernamen geändert werden soll für die Wiki-Verifizierung."
+				},
+				"delete": {
+					"cmd": "verification <ID> delete",
+					"desc": "Ich lösche die Wiki-Verifizierung."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "Ich versuche allen in einem Sprachkanal eine bestimmte Rolle zu geben:"
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "Ich werde auf diesem Server alle Befehle ignorieren, abgesehen von ein paar Befehlen für Administratoren."
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "Ich werde auf diesem Server wieder auf alle Befehle reagieren."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "Wenn ich gerade aktiv bin, werde ich antworten! Sonst nicht."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft-de.gamepedia.com/",
 		"cmdpage": "Befehl/",
-		"aliases": {
-			"cmd": "command",
-			"befehl": "command",
-			"fehler": "bug"
-		},
 		"private": "**Privater Fehler**",
 		"fixed": "Lösungsversion:",
 		"more": "Und $1 {{PLURAL:$1|mehr}}.",

+ 193 - 55
i18n/en.json

@@ -7,8 +7,9 @@
 	],
 	"dateformat": "en-US",
 	"aliases": {
-		"🎲": "random",
-		"discussions": "discussion"
+		"random": ["random", "🎲"],
+		"discussion": ["discussions"],
+		"command": ["command", "cmd"]
 	},
 	"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:",
@@ -272,8 +273,6 @@
 		}
 	},
 	"search": {
-		"page": "page",
-		"search": "search",
 		"infopage": "Not the correct result? Use $1 for a direct link.",
 		"infosearch": "Not the correct result? Use $1 for a direct link or $2 for a list of all hits.",
 		"category": {
@@ -318,61 +317,200 @@
 		"noadmin": "you need the `Manage Server` permission for these commands!",
 		"pause": "**I'm currently paused on this server!**\nOnly these commands can be performed:",
 		"footer": "If you got an unwanted response, you can react with 🗑️ to my message and I will delete it.",
-		"list": [
-			{ "cmd": "<search term>", "desc": "I will answer with a link to a matching article in the wiki.", "unsearchable": true },
-			{ "cmd": "[[<page name>]]", "desc": "I will answer with a direct link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<page name>}}", "desc": "I will answer with a link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<wiki> <search term>", "desc": "I will answer with a link to a matching article in the named Gamepedia wiki: `https://<wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<wiki> <search term>", "desc": "I will answer with a link to a matching article in the named Fandom wiki: `https://<wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<wiki> <search term>", "desc": "I will answer with a link to a matching article in the named Wikia wiki: `https://<wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "User:<username>", "desc": "I will show some information about the user.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "I will answer with a link to the diff in the wiki." },
-			{ "cmd": "diff <page name>", "desc": "I will answer with a link to the last diff on the article in the wiki." },
-			{ "cmd": "random", "desc": "I will answer with a link to a random page in the wiki." },
-			{ "cmd": "🎲", "desc": "I will answer with a link to a random page in the wiki.", "hide": true },
-			{ "cmd": "overview", "desc": "I will show some information and statistics about the wiki." },
-			{ "cmd": "/<Minecraft command>", "desc": "I will answer with the syntax of the Minecraft command and a link to the article for the command in the Minecraft Wiki.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "command <Minecraft command>", "desc": "I will answer with the syntax of the Minecraft command and a link to the article for the command in the Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <Minecraft command>", "desc": "I will answer with the syntax of the Minecraft command and a link to the article for the command in the Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "bug <Minecraft bug>", "desc": "I will answer with a link to the bug in the Minecraft bug tracker.", "minecraft": true },
-			{ "cmd": "page <page name>", "desc": "I will answer with a direct link to the article in the wiki.", "hide": true },
-			{ "cmd": "search <search term>", "desc": "I will answer with a direct link to the search page for the article in the wiki.", "hide": true },
-			{ "cmd": "discussion <search term>", "desc": "I will answer with a link to a matching discussion thread in the Fandom wiki.", "fandom": true },
-			{ "cmd": "discussion post <search term>", "desc": "I will answer with a link to a matching discussion post in the Fandom wiki.", "fandom": true },
-			{ "cmd": "info", "desc": "I will introduce myself." },
-			{ "cmd": "help", "desc": "I will list all the commands that I understand." },
-			{ "cmd": "help <bot command>", "desc": "Wonder how a command works? Let me explain it to you!" },
-			{ "cmd": "help admin", "desc": "I will list all administrator commands." },
-			{ "cmd": "help admin", "desc": "I will list all administrator commands.", "unsearchable": true, "admin": true },
-			{ "cmd": "settings", "desc": "I will change the settings for this server.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <language>", "desc": "I will change the language for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <prefix>", "desc": "I will change the prefix for this server.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "I will toggle inline commands for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <wiki>", "desc": "I will change the default wiki for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "I will change the overwrites for the current channel.", "hide": true, "admin": true },
-			{ "cmd": "verify <wiki username>", "desc": "Use this command to verify your Discord account with your wiki account and get roles matching your wiki account.", "hide": true },
-			{ "cmd": "verification", "desc": "I will change the wiki verifications used by the `@prefixverify` command.", "admin": true, "pause": true },
-			{ "cmd": "help verification", "desc": "I will explain in more detail how the verification command works.", "unsearchable": true, "admin": true },
-			{ "cmd": "verification add <role>", "desc": "I will add a new wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <new channel>", "desc": "I will change the channel for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <new role>", "desc": "I will change the role for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <new edit count>", "desc": "I will change the minimal edit count for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <new user group>", "desc": "I will change the user group for the wiki verification. Accepts a `|` separated list.\n\t• Provide `AND` as the first list entry to make all provided user groups required.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <new account age>", "desc": "I will change the minimal account age (in days) for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "I will change if the user's Discord nickname should be changed to their wiki username for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "I will delete the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "I try to give everyone in a voice channel a specific role.", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "I will ignore all commands on this server, except a few admin commands.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "I will respond to all commands on this server again.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "If I'm active, I'll answer! Otherwise not.", "pause": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<search term>",
+				"desc": "I will answer with a link to a matching article in the wiki."
+			},
+			"inline": {
+				"link": {
+					"cmd": "[[<page name>]]",
+					"desc": "I will answer with a direct link to the article in the wiki."
+				},
+				"template": {
+					"cmd": "{{<page name>}}",
+					"desc": "I will answer with a link to the article in the wiki."
+				}
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <search term>",
+				"desc": "I will answer with a link to a matching article in the named Gamepedia wiki: `https://<wiki>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <search term>",
+				"desc": "I will answer with a link to a matching article in the named Fandom wiki: `https://<wiki>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <search term>",
+				"desc": "I will answer with a link to a matching article in the named Wikia wiki: `https://<wiki>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "User:<username>",
+				"desc": "I will show some information about the user."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "I will show some information and statistics about the wiki."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "I will answer with a link to a random page in the wiki."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "I will answer with a link to the diff in the wiki."
+				},
+				"name": {
+					"cmd": "diff <page name>",
+					"desc": "I will answer with a link to the last diff on the article in the wiki."
+				}
+			},
+			"page": {
+				"cmd": "page <page name>",
+				"desc": "I will answer with a direct link to the article in the wiki."
+			},
+			"search": {
+				"cmd": "search <search term>",
+				"desc": "I will answer with a direct link to the search page for the article in the wiki."
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<Minecraft command>",
+					"desc": "I will answer with the syntax of the Minecraft command and a link to the article for the command in the Minecraft Wiki."
+				},
+				"command": {
+					"cmd": "command <Minecraft command>",
+					"desc": "I will answer with the syntax of the Minecraft command and a link to the article for the command in the Minecraft Wiki."
+				},
+				"bug": {
+					"cmd": "bug <Minecraft bug>",
+					"desc": "I will answer with a link to the bug in the Minecraft bug tracker."
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <search term>",
+					"desc": "I will answer with a link to a matching discussion thread in the Fandom wiki."
+				},
+				"post": {
+					"cmd": "discussion post <search term>",
+					"desc": "I will answer with a link to a matching discussion post in the Fandom wiki."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "I will introduce myself."
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "I will list all the commands that I understand."
+				},
+				"command": {
+					"cmd": "help <bot command>",
+					"desc": "Wonder how a command works? Let me explain it to you!"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "I will list all administrator commands."
+				},
+				"verification": {
+					"cmd": "help verification",
+					"desc": "I will explain in more detail how the verification command works."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "I will change the settings for this server."
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "I will change the default wiki for this server."
+				},
+				"lang": {
+					"cmd": "settings lang <language>",
+					"desc": "I will change the language for this server."
+				},
+				"inline": {
+					"cmd": "settings inline toggle",
+					"desc": "I will toggle inline commands for this server."
+				},
+				"prefix": {
+					"cmd": "settings prefix <prefix>",
+					"desc": "I will change the prefix for this server."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "I will change the overwrites for the current channel."
+				}
+			},
+			"verify": {
+				"cmd": "verify <wiki username>",
+				"desc": "Use this command to verify your Discord account with your wiki account and get roles matching your wiki account."
+			},
+			"verification": {
+				"default": {
+					"cmd": "verification",
+					"desc": "I will change the wiki verifications used by the `$1verify` command."
+				},
+				"add": {
+					"cmd": "verification add <role>",
+					"desc": "I will add a new wiki verification. Accepts a `|` separated list."
+				},
+				"channel": {
+					"cmd": "verification <id> channel <new channel>",
+					"desc": "I will change the channel for the wiki verification. Accepts a `|` separated list."
+				},
+				"role": {
+					"cmd": "verification <id> role <new role>",
+					"desc": "I will change the role for the wiki verification. Accepts a `|` separated list."
+				},
+				"editcount": {
+					"cmd": "verification <id> editcount <new edit count>",
+					"desc": "I will change the minimal edit count for the wiki verification."
+				},
+				"usergroup": {
+					"cmd": "verification <id> usergroup <new user group>",
+					"desc": "I will change the user group for the wiki verification. Accepts a `|` separated list.\n\t• Provide `AND` as the first list entry to make all provided user groups required."
+				},
+				"accountage": {
+					"cmd": "verification <id> accountage <new account age>",
+					"desc": "I will change the minimal account age (in days) for the wiki verification."
+				},
+				"rename": {
+					"cmd": "verification <id> rename",
+					"desc": "I will change if the user's Discord nickname should be changed to their wiki username for the wiki verification."
+				},
+				"delete": {
+					"cmd": "verification <id> delete",
+					"desc": "I will delete the wiki verification."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "I try to give everyone in a voice channel a specific role."
+			},
+			"pause": {
+				"inactive":{
+					"cmd": "pause $1",
+					"desc": "I will ignore all commands on this server, except a few admin commands."
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "I will respond to all commands on this server again."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "If I'm active, I'll answer! Otherwise not."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft.gamepedia.com/",
 		"cmdpage": "Commands/",
-		"aliases": {
-			"cmd": "command"
-		},
 		"private": "**Private Issue**",
 		"fixed": "Fixed Version:",
 		"more": "And $1 {{PLURAL:$1|more}}.",

+ 133 - 64
i18n/fr.json

@@ -8,10 +8,9 @@
 	],
 	"dateformat": "fr-FR",
 	"aliases": {
-		"aide": "help",
-		"chercher": "search",
-		"🎲": "random",
-		"discussions": "discussion"
+		"help": ["aide"],
+		"search": ["chercher"],
+		"command": ["commande"]
 	},
 	"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 :",
@@ -172,8 +171,6 @@
 		}
 	},
 	"search": {
-		"page": "page",
-		"search": "chercher",
 		"infopage": "Pas le bon résultat ? Utilisez $1 pour un lien direct.",
 		"infosearch": "Pas le bon résultat ? Utilisez $1 pour un lien direct ou $2 pour une liste de toutes les correspondances.",
 		"category": {
@@ -235,68 +232,140 @@
 		"noadmin": "vous devez avoir la permission `Gérer le serveur` pour utiliser ces commandes !",
 		"pause": "**Je suis présentement en pause sur ce serveur!**\n Seuls ces commandes sont disponibles :",
 		"footer": "Si vous avez reçu une réponse non-désirée, vous pouvez réagir avec 🗑️ sur mon message and je le supprimerai.",
-		"list": [
-			{ "cmd": "<terme de recherche>", "desc": "Je vais répondre avec un lien vers un article correspondant sur Wiki.", "unsearchable": true },
-			{ "cmd": "[[<nom de la page>]]", "desc": "I will answer with a direct link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<nom de la page>}}", "desc": "I will answer with a link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<wiki> <terme de recherche>", "desc": "Je vais répondre avec un lien vers un article correspondant sur wiki Gamepedia nommé : `https://<wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<wiki> <terme de recherche>", "desc": "Je vais répondre avec un lien vers un article correspondant sur wiki Fandom nommé : `https://<wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<wiki> <terme de recherche>", "desc": "Je vais répondre avec un lien vers un article correspondant sur wiki Wikia nommé : `https://<wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "Utilisateur:<nom d'utilisateur>", "desc": "Je vais montrer quelques informations sur l'utilisateur.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "Je vais répondre avec un lien vers la diff sur Wiki." },
-			{ "cmd": "diff <nom de la page>", "desc": "Je vais répondre avec un lien vers la dernière diff de l'article sur Wiki." },
-			{ "cmd": "random", "desc": "Je vais répondre avec un lien vers une page du Wiki au hasard." },
-			{ "cmd": "🎲", "desc": "Je vais répondre avec un lien vers une page du Wiki au hasard.", "hide": true },
-			{ "cmd": "overview", "desc": "Je vais afficher certaines informations et statistiques à propos du wiki." },
-			{ "cmd": "/<commande Minecraft>", "desc": "Je vais répondre avec la syntaxe de la commande Minecraft et un lien vers l'article pour la commande sur Minecraft Wiki.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "commande <commande Minecraft>", "desc": "Je vais répondre avec la syntaxe de la commande Minecraft et un lien vers l'article pour la commande sur Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "command <commande Minecraft>", "desc": "Je vais répondre avec la syntaxe de la commande Minecraft et un lien vers l'article pour la commande sur Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <commande Minecraft>", "desc": "Je vais répondre avec la syntaxe de la commande Minecraft et un lien vers l'article pour la commande sur Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "bug <Minecraft bug>", "desc": "Je vais répondre avec le lien du bug sur le bug tracker Minecraft.", "minecraft": true },
-			{ "cmd": "page <nom de la page>", "desc": "Je vais répondre avec un lien vers l'article sur Wiki.", "hide": true },
-			{ "cmd": "chercher <terme de recherche>", "desc": "Je vais répondre avec un lien vers la page de recherche de l'article sur Wiki.", "hide": true },
-			{ "cmd": "search <terme de recherche>", "desc": "Je vais répondre avec un lien vers la page de recherche de l'article sur Wiki.", "hide": true },
-			{ "cmd": "discussion <terme de recherche>", "desc": "Je répondrais avec un lien vers un fil de discussion correspondant sur le wiki Fandom.", "fandom": true },
-			{ "cmd": "discussion post <terme de recherche>", "desc": "Je répondrais avec un lien vers un message de discussion correspondant sur le wiki Fandom.", "fandom": true },
-			{ "cmd": "info", "desc": "Je vais me présenter." },
-			{ "cmd": "aide", "desc": "Je vais lister toutes les commandes que je comprends." },
-			{ "cmd": "aide <commande de robot>", "desc": "Tu te demandes comment une commande fonctionne ? Laisse-moi te l'expliquer !" },
-			{ "cmd": "aide admin", "desc": "Je vais lister toutes les commandes d'administrateur." },
-			{ "cmd": "aide admin", "desc": "Je vais lister toutes les commandes d'administrateur.", "unsearchable": true, "admin": true },
-			{ "cmd": "help", "desc": "Je vais lister toutes les commandes que je comprends.", "hide": true },
-			{ "cmd": "help <commande de robot>", "desc": "Tu te demandes comment une commande fonctionne ? Laisse-moi te l'expliquer !", "hide": true },
-			{ "cmd": "help admin", "desc": "Je vais lister toutes les commandes d'administrateur.", "hide": true },
-			{ "cmd": "settings", "desc": "Je vais modifier les paramètres de ce serveur.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <langue>", "desc": "Je vais modifier la langue de ce serveur.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <préfixe>", "desc": "Je vais changer le préfixe pour ce serveur.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "I will toggle inline commands for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <wiki>", "desc": "Je vais modifier le Wiki par défaut de ce serveur.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "Je changerais les écrasements pour le salon actuel.", "hide": true, "admin": true },
-			{ "cmd": "verify <wiki username>", "desc": "Use this command to verify your Discord account with your wiki account and get roles matching your wiki account.", "hide": true },
-			{ "cmd": "verification", "desc": "I will change the wiki verifications used by the `@prefixverify` command.", "admin": true, "pause": true },
-			{ "cmd": "aide verification", "desc": "I will explain in more detail how the verification command works.", "admin": true },
-			{ "cmd": "help verification", "desc": "I will explain in more detail how the verification command works.", "hide": true, "admin": true },
-			{ "cmd": "verification add <role>", "desc": "I will add a new wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <new channel>", "desc": "I will update the channel for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <new role>", "desc": "I will update the role for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <new edit count>", "desc": "I will update the minimal edit count for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <new user group>", "desc": "I will update the user group for the wiki verification. Accepts a `|` separated list.\n\t• Provide `AND` as the first list entry to make all provided user groups required.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <new account age>", "desc": "I will update the minimal account age (in days) for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "I will change if the users Discord nickname should be changed to their wiki username for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "I will delete the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "J'essaye de donner un rôle spécifique à tous ceux dans un salon vocal.", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "Je vais ignorer toutes les commandes sur ce serveur, à l'exception de quelques commandes d'admin.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "Je vais répondre à nouveau à tous les commandes sur ce serveur.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "Si je suis actif, je répondrai ! Autrement non.", "pause": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<terme de recherche>",
+				"desc": "Je vais répondre avec un lien vers un article correspondant sur Wiki."
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <terme de recherche>",
+				"desc": "Je vais répondre avec un lien vers un article correspondant sur wiki Gamepedia nommé : `https://<wiki>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <terme de recherche>",
+				"desc": "Je vais répondre avec un lien vers un article correspondant sur wiki Fandom nommé : `https://<wiki>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <terme de recherche>",
+				"desc": "Je vais répondre avec un lien vers un article correspondant sur wiki Wikia nommé : `https://<wiki>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "Utilisateur:<nom d'utilisateur>",
+				"desc": "Je vais montrer quelques informations sur l'utilisateur."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "Je vais afficher certaines informations et statistiques à propos du wiki."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "Je vais répondre avec un lien vers une page du Wiki au hasard."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "Je vais répondre avec un lien vers la diff sur Wiki."
+				},
+				"name": {
+					"cmd": "diff <nom de la page>",
+					"desc": "Je vais répondre avec un lien vers la dernière diff de l'article sur Wiki."
+				}
+			},
+			"page": {
+				"cmd": "page <nom de la page>",
+				"desc": "Je vais répondre avec un lien vers l'article sur Wiki."
+			},
+			"search": {
+				"cmd": "search <terme de recherche>",
+				"desc": "Je vais répondre avec un lien vers la page de recherche de l'article sur Wiki."
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<commande Minecraft>",
+					"desc": "Je vais répondre avec la syntaxe de la commande Minecraft et un lien vers l'article pour la commande sur Minecraft Wiki."
+				},
+				"command": {
+					"cmd": "command <commande Minecraft>",
+					"desc": "Je vais répondre avec la syntaxe de la commande Minecraft et un lien vers l'article pour la commande sur Minecraft Wiki."
+				},
+				"bug": {
+					"cmd": "bug <Minecraft bug>",
+					"desc": "Je vais répondre avec le lien du bug sur le bug tracker Minecraft."
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <terme de recherche>",
+					"desc": "Je répondrais avec un lien vers un fil de discussion correspondant sur le wiki Fandom."
+				},
+				"post": {
+					"cmd": "discussion post <terme de recherche>",
+					"desc": "Je répondrais avec un lien vers un message de discussion correspondant sur le wiki Fandom."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "Je vais me présenter."
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "Je vais lister toutes les commandes que je comprends."
+				},
+				"command": {
+					"cmd": "help <commande de robot>",
+					"desc": "Tu te demandes comment une commande fonctionne ? Laisse-moi te l'expliquer !"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "Je vais lister toutes les commandes d'administrateur."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "Je vais modifier les paramètres de ce serveur."
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "Je vais modifier le Wiki par défaut de ce serveur."
+				},
+				"lang": {
+					"cmd": "settings lang <langue>",
+					"desc": "Je vais modifier la langue de ce serveur."
+				},
+				"prefix": {
+					"cmd": "settings prefix <préfixe>",
+					"desc": "Je vais changer le préfixe pour ce serveur."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "Je changerais les écrasements pour le salon actuel."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "J'essaye de donner un rôle spécifique à tous ceux dans un salon vocal."
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "Je vais ignorer toutes les commandes sur ce serveur, à l'exception de quelques commandes d'admin."
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "Je vais répondre à nouveau à tous les commandes sur ce serveur."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "Si je suis actif, je répondrai ! Autrement non."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft-fr.gamepedia.com/",
 		"cmdpage": "Commandes#",
-		"aliases": {
-			"cmd": "command",
-			"commande": "command"
-		},
 		"private": "**Problème privé**",
 		"fixed": "Corrigé lors de la version",
 		"more": "Et $1 {{PLURAL:$1|autres}}.",

+ 135 - 66
i18n/nl.json

@@ -7,13 +7,11 @@
 	],
 	"dateformat": "nl-NL",
 	"aliases": {
-		"pagina": "page",
-		"zoeken": "search",
-		"🎲": "random",
-		"willekeurig": "random",
-		"overzicht": "overview",
-		"discussions": "discussion",
-		"discussie": "discussion"
+		"page": ["pagina"],
+		"search": ["zoeken"],
+		"random": ["willekeurig"],
+		"overview": ["overzicht"],
+		"discussion": ["discussie"]
 	},
 	"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:",
@@ -172,8 +170,6 @@
 		}
 	},
 	"search": {
-		"page": "pagina",
-		"search": "zoeken",
 		"infopage": "Niet het gewenste resultaat? Gebruik $1 voor een rechtstreekse link.",
 		"infosearch": "Niet het gewenste resultaat? Gebruik $1 voor een rechtstreekse link of $2 voor een lijst van alle overeenkomsten.",
 		"category": {
@@ -214,67 +210,140 @@
 		"noadmin": "je hebt de `Beheer Server` permissie nodig voor deze opdrachten!",
 		"pause": "**Ik ben momenteel gepauzeerd op deze server!**\nAlleen deze opdrachten kunnen worden uitgevoerd:",
 		"footer": "Als je een ongewenst antwoord krijgt, kun je reageren met 🗑️ op mijn bericht en ik zal het verwijderen.",
-		"list": [
-			{ "cmd": "<zoek term>", "desc": "Ik zal antwoorden met een link naar een passend artikel uit de wiki.", "unsearchable": true },
-			{ "cmd": "[[<pagina naam>]]", "desc": "I will answer with a direct link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<pagina naam>}}", "desc": "I will answer with a link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<wiki> <zoek term>", "desc": "Ik zal antwoorden met een link naar een passend artikel uit de benoemde Gamepedia wiki: `https://<wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<wiki> <zoek term>", "desc": "Ik zal antwoorden met een link naar een passend artikel uit de benoemde Fandom wiki: `https://<wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<wiki> <zoek term>", "desc": "Ik zal antwoorden met een link naar een passend artikel uit de benoemde Wikia wiki: `https://<wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "Gebruiker:<gebruikersnaam>", "desc": "Ik zal wat informatie over de gebruiker weergeven.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "Ik zal antwoorden met een link naar de diff uit de wiki." },
-			{ "cmd": "diff <pagina naam>", "desc": "Ik zal antwoorden met een link naar de laatste diff over het artikel uit de wiki." },
-			{ "cmd": "willekeurig", "desc": "Ik zal antwoorden met een link naar een willekeurige pagina uit de wiki." },
-			{ "cmd": "random", "desc": "Ik zal antwoorden met een link naar een willekeurige pagina uit de wiki.", "hide": true },
-			{ "cmd": "🎲", "desc": "Ik zal antwoorden met een link naar een willekeurige pagina uit de wiki.", "hide": true },
-			{ "cmd": "overzicht", "desc": "Ik zal wat informatie en statistieken over de wiki weergeven." },
-			{ "cmd": "overview", "desc": "Ik zal wat informatie en statistieken over de wiki weergeven.", "hide": true },
-			{ "cmd": "/<Minecraft command>", "desc": "Ik zal antwoorden met de syntax van de Minecraft opdracht en een link naar het artikel van de opdracht uit de Minecraft Wiki.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "command <Minecraft command>", "desc": "Ik zal antwoorden met de syntax van de Minecraft opdracht en een link naar het artikel van de opdracht uit de Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <Minecraft command>", "desc": "Ik zal antwoorden met de syntax van de Minecraft opdracht en een link naar het artikel van de opdracht uit de Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "bug <Minecraft bug>", "desc": "Ik zal antwoorden met een link naar de bug in de Minecraft bug tracker.", "minecraft": true },
-			{ "cmd": "pagina <pagina naam>", "desc": "Ik zal antwoorden met een rechtstreekse link naar het artikel uit de wiki.", "hide": true },
-			{ "cmd": "page <pagina naam>", "desc": "Ik zal antwoorden met een rechtstreekse link naar het artikel uit de wiki.", "hide": true },
-			{ "cmd": "zoeken <zoek term>", "desc": "Ik zal antwoorden met een rechtstreekse link naar de zoekpagina van het artikel uit de wiki.", "hide": true },
-			{ "cmd": "search <zoek term>", "desc": "Ik zal antwoorden met een rechtstreekse link naar de zoekpagina van het artikel uit de wiki.", "hide": true },
-			{ "cmd": "discussie <zoek term>", "desc": "Ik zal antwoorden met een link naar een overeenkomende discussie sectie op de Fandom wiki.", "fandom": true },
-			{ "cmd": "discussion <zoek term>", "desc": "Ik zal antwoorden met een link naar een overeenkomende discussie sectie op de Fandom wiki.", "hide": true, "fandom": true },
-			{ "cmd": "discussie bericht <zoek term>", "desc": "Ik zal antwoorden met een link naar een overeenkomend discussie bericht op de Fandom wiki.", "fandom": true },
-			{ "cmd": "discussion post <zoek term>", "desc": "Ik zal antwoorden met een link naar een overeenkomend discussie bericht op de Fandom wiki.", "hide": true, "fandom": true },
-			{ "cmd": "info", "desc": "Ik zal mezelf introduceren." },
-			{ "cmd": "help", "desc": "Ik zal alle opdrachten opsommen die ik begrijp." },
-			{ "cmd": "help <bot command>", "desc": "Vraag je je af hoe een opdracht werkt? Laat het me aan je uitleggen!" },
-			{ "cmd": "help admin", "desc": "Ik zal alle administrator opdrachten opsommen." },
-			{ "cmd": "help admin", "desc": "Ik zal alle administrator opdrachten opsommen.", "unsearchable": true, "admin": true },
-			{ "cmd": "settings", "desc": "Ik zal de instellingen voor deze server wijzigen.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <taal>", "desc": "Ik zal de taal voor deze server wijzigen.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <voorvoegsel>", "desc": "Ik zal het voorvoegsel voor deze server wijzigen.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "I will toggle inline commands for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <wiki>", "desc": "Ik zal de standaard wiki voor deze server wijzigen.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "Ik zal de overschrijvingen voor het huidige kanaal wijzigen.", "hide": true, "admin": true },
-			{ "cmd": "verify <wiki username>", "desc": "Use this command to verify your Discord account with your wiki account and get roles matching your wiki account.", "hide": true },
-			{ "cmd": "verification", "desc": "I will change the wiki verifications used by the `@prefixverify` command.", "admin": true, "pause": true },
-			{ "cmd": "help verification", "desc": "I will explain in more detail how the verification command works.", "admin": true },
-			{ "cmd": "verification add <role>", "desc": "I will add a new wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <new channel>", "desc": "I will update the channel for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <new role>", "desc": "I will update the role for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <new edit count>", "desc": "I will update the minimal edit count for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <new user group>", "desc": "I will update the user group for the wiki verification. Accepts a `|` separated list.\n\t• Provide `AND` as the first list entry to make all provided user groups required.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <new account age>", "desc": "I will update the minimal account age (in days) for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "I will change if the users Discord nickname should be changed to their wiki username for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "I will delete the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "Ik probeer iedereen in een spraakkanaal een specifieke rol te geven.", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "Ik zal alle opdrachten op deze server negeren, met uitzondering van enkele admin opdrachten.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "Ik zal weer op alle opdrachten op deze server reageren.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "Als ik actief ben, zal ik antwoorden! Anders niet.", "pause": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<zoek term>",
+				"desc": "Ik zal antwoorden met een link naar een passend artikel uit de wiki."
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <zoek term>",
+				"desc": "Ik zal antwoorden met een link naar een passend artikel uit de benoemde Gamepedia wiki: `https://<wiki>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <zoek term>",
+				"desc": "Ik zal antwoorden met een link naar een passend artikel uit de benoemde Fandom wiki: `https://<wiki>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <zoek term>",
+				"desc": "Ik zal antwoorden met een link naar een passend artikel uit de benoemde Wikia wiki: `https://<wiki>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "Gebruiker:<gebruikersnaam>",
+				"desc": "Ik zal wat informatie over de gebruiker weergeven."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "Ik zal wat informatie en statistieken over de wiki weergeven."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "Ik zal antwoorden met een link naar een willekeurige pagina uit de wiki."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "Ik zal antwoorden met een link naar de diff uit de wiki."
+				},
+				"name": {
+					"cmd": "diff <pagina naam>",
+					"desc": "Ik zal antwoorden met een link naar de laatste diff over het artikel uit de wiki."
+				}
+			},
+			"page": {
+				"cmd": "page <pagina naam>",
+				"desc": "Ik zal antwoorden met een rechtstreekse link naar het artikel uit de wiki."
+			},
+			"search": {
+				"cmd": "search <zoek term>",
+				"desc": "Ik zal antwoorden met een rechtstreekse link naar de zoekpagina van het artikel uit de wiki."
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<Minecraft command>",
+					"desc": "Ik zal antwoorden met de syntax van de Minecraft opdracht en een link naar het artikel van de opdracht uit de Minecraft Wiki."
+				},
+				"command": {
+					"cmd": "command <Minecraft command>",
+					"desc": "Ik zal antwoorden met de syntax van de Minecraft opdracht en een link naar het artikel van de opdracht uit de Minecraft Wiki."
+				},
+				"bug": {
+					"cmd": "bug <Minecraft bug>",
+					"desc": "Ik zal antwoorden met een link naar de bug in de Minecraft bug tracker."
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <zoek term>",
+					"desc": "Ik zal antwoorden met een link naar een overeenkomende discussie sectie op de Fandom wiki."
+				},
+				"post": {
+					"cmd": "discussion post <zoek term>",
+					"desc": "Ik zal antwoorden met een link naar een overeenkomend discussie bericht op de Fandom wiki."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "Ik zal mezelf introduceren."
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "Ik zal alle opdrachten opsommen die ik begrijp."
+				},
+				"command": {
+					"cmd": "help <bot command>",
+					"desc": "Vraag je je af hoe een opdracht werkt? Laat het me aan je uitleggen!"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "Ik zal alle administrator opdrachten opsommen."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "Ik zal de instellingen voor deze server wijzigen."
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "Ik zal de standaard wiki voor deze server wijzigen."
+				},
+				"lang": {
+					"cmd": "settings lang <taal>",
+					"desc": "Ik zal de taal voor deze server wijzigen."
+				},
+				"prefix": {
+					"cmd": "settings prefix <voorvoegsel>",
+					"desc": "Ik zal het voorvoegsel voor deze server wijzigen."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "Ik zal de overschrijvingen voor het huidige kanaal wijzigen."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "Ik probeer iedereen in een spraakkanaal een specifieke rol te geven."
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "Ik zal alle opdrachten op deze server negeren, met uitzondering van enkele admin opdrachten."
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "Ik zal weer op alle opdrachten op deze server reageren."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "Als ik actief ben, zal ik antwoorden! Anders niet."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft-nl.gamepedia.com/",
 		"cmdpage": "Opdrachten#",
-		"aliases": {
-			"cmd": "command"
-		},
 		"private": "**Privé issue**",
 		"fixed": "Fixed versie:",
 		"more": "En $1 {{PLURAL:$1|meer}}.",

+ 195 - 70
i18n/pl.json

@@ -8,13 +8,11 @@
 	],
 	"dateformat": "pl-PL",
 	"aliases": {
-		"pomoc": "help",
-		"strona": "page",
-		"szukaj": "search",
-		"🎲": "random",
-		"discussions": "discussion",
-		"dyskusje": "discussion",
-		"dyskusja": "discussion"
+		"help": ["pomoc"],
+		"page": ["strona"],
+		"search": ["szukaj"],
+		"discussion": ["dyskusje", "dyskusja"],
+		"command": ["komenda"]
 	},
 	"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ń:",
@@ -264,8 +262,6 @@
 		}
 	},
 	"search": {
-		"page": "strona",
-		"search": "szukaj",
 		"infopage": "Nie to czego szukałeś? Użyj $1 dla bezpośredniego linku.",
 		"infosearch": "Nie to czego szukałeś? Użyj $1 dla bezpośredniego linku lub $2 dla listy wszystkich wyników.",
 		"category": {
@@ -308,71 +304,200 @@
 		"noadmin": "potrzebujesz uprawnienia `Zarządzanie serwerem` aby używać tych komend!",
 		"pause": "**Moja praca na tym serwerze została wstrzymana!**\nTylko następujące komendy mogą być używane:",
 		"footer": "Jeżeli otrzymałeś niechcianą odpowiedź, możesz na nią zareagować używając emotki 🗑️ a wiadomość zostanie ona usunięta.",
-		"list": [
-			{ "cmd": "<wyszukiwana fraza>", "desc": "Odpowiem linkiem do pasującego artykułu na wiki.", "unsearchable": true },
-			{ "cmd": "[[<nazwa strony>]]", "desc": "Odpowiem bezpośrednim linkiem do artykułu na wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<nazwa strony>}}", "desc": "Odpowiem linkiem do artykułu na wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<wiki> <wyszukiwana fraza>", "desc": "Odpowiem z pasującym linkiem do podanej wiki na Gamepedii: `https://<wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<wiki> <wyszukiwana fraza>", "desc": "Odpowiem z pasującym linkiem do podanej wiki na Fandomie: `https://<wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<wiki> <wyszukiwana fraza>", "desc": "Odpowiem z pasującym linkiem do podanej wiki na Wikia: `https://<wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "Użytkownik:<nazwa użytkownika>", "desc": "Pokażę informacje na temat użytkownika.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "Odpowiem linkiem do podanej zmiany na wiki." },
-			{ "cmd": "diff <nazwa strony>", "desc": "Odpowiem linkiem do ostatniej zmiany w podanym artykule na wiki." },
-			{ "cmd": "random", "desc": "Odpowiem linkiem do losowej strony na wiki." },
-			{ "cmd": "🎲", "desc": "Odpowiem linkiem do losowej strony na wiki.", "hide": true },
-			{ "cmd": "overview", "desc": "Pokażę informacje oraz statystyki na temat wiki." },
-			{ "cmd": "/<komenda>", "desc": "Odpowiem z formatem komendy Minecraftowej oraz linkiem do artykułu o podanej komendzie na Minecraft Wiki.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "komenda <komenda>", "desc": "Odpowiem z formatem komendy Minecraftowej oraz linkiem do artykułu o podanej komendzie na Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "command <komenda>", "desc": "Odpowiem z formatem komendy Minecraftowej oraz linkiem do artykułu o podanej komendzie na Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <komenda>", "desc": "Odpowiem z formatem komendy Minecraftowej oraz linkiem do artykułu o podanej komendzie na Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "bug <Minecraft bug>", "desc": "Odpowiem z linkiem do błędu na bug trackerze Mojangu.", "minecraft": true  },
-			{ "cmd": "strona <nazwa strony>", "desc": "Odpowiem linkiem do podanego artykułu na Wiki.", "hide": true },
-			{ "cmd": "page <nazwa strony>", "desc": "Odpowiem linkiem do podanego artykułu na Wiki.", "hide": true },
-			{ "cmd": "szukaj <wyszukiwana fraza>", "desc": "Odpowiem linkiem do strony wyszukiwania z podaną frazą na wiki.", "hide": true },
-			{ "cmd": "search <wyszukiwana fraza>", "desc": "Odpowiem linkiem do strony wyszukiwania z podaną frazą na wiki.", "hide": true },
-			{ "cmd": "dyskusja <wyszukiwana fraza>", "desc": "Odpowiem linkiem do odpowiadającego wątku dyskusji na Fandomowej wiki.", "fandom": true },
-			{ "cmd": "discussion <wyszukiwana fraza>", "desc": "Odpowiem linkiem do odpowiadającego wątku dyskusji na Fandomowej wiki.", "hide": true, "fandom": true },
-			{ "cmd": "dyskusja post <wyszukiwana fraza>", "desc": "Odpowiem linkiem do odpowiadającego postu na Fandomowej wiki.", "fandom": true },
-			{ "cmd": "discussion post <wyszukiwana fraza>", "desc": "Odpowiem linkiem do odpowiadającego postu na Fandomowej wiki.", "hide": true, "fandom": true },
-			{ "cmd": "info", "desc": "Przedstawie się." },
-			{ "cmd": "pomoc", "desc": "Wylistuję wszystkie komendy, które rozumiem." },
-			{ "cmd": "pomoc <komenda bota>", "desc": "Wytłumaczę działanie komendy!" },
-			{ "cmd": "pomoc admin", "desc": "Wylistuję wszystkie komendy administracyjne." },
-			{ "cmd": "pomoc admin", "desc": "Wylistuję wszystkie komendy administracyjne.", "unsearchable": true, "admin": true },
-			{ "cmd": "help", "desc": "Wylistuję wszystkie komendy, które rozumiem.", "hide": true },
-			{ "cmd": "help <komenda bota>", "desc": "Wytłumaczę działanie komendy!", "hide": true },
-			{ "cmd": "help admin", "desc": "Wylistuję wszystkie komendy administracyjne.", "hide": true },
-			{ "cmd": "settings", "desc": "Zmienię ustawienia dla tego serwera.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <język>", "desc": "Zmienię język tego serwera.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <prefiks>", "desc": "Zmienię prefiks komend używany na tym serwerze.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "Włączę/wyłącze linkowanie z użyciem składni wiki.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <wiki>", "desc": "Zmienię domyślną wiki tego serwera.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "Utworzę ustawienia specjalne dla danego kanału.", "hide": true, "admin": true },
-			{ "cmd": "verify <nazwa użytkownika na wiki>", "desc": "Użyj tej komendy do weryfikacji konta Discord kontem na wiki, oraz zdobycia ról odpowiednich dla Twojego konta na wiki.", "hide": true },
-			{ "cmd": "verification", "desc": "Zmienię weryfikację używaną przez komendę `@prefixverify`.", "admin": true, "pause": true },
-			{ "cmd": "pomoc verification", "desc": "Szczegółowo wyjaśnię działanie komendy verify.", "admin": true },
-			{ "cmd": "help verification", "desc": "Szczegółowo wyjaśnię działanie komendy verify.", "hide": true, "admin": true },
-			{ "cmd": "verification add <rola>", "desc": "Dodam nową weryfikację konta na wiki. Lista ról może być sparowana znakiem `|`.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <nowy kanał>", "desc": "Zmienię kanał dla weryfikacji. Lista kanałów może być sparowana znakiem `|`.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <nowa rola>", "desc": "Zmienię dodawane role dla weryfikacji. Lista ról może być sparowana znakiem `|`.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <nowa ilość edycji>", "desc": "Zmienię minimalną wymaganą ilość edycji dla weryfikacji.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <nowa grupa użytkowników>", "desc": "Zmienię grupy użytkowników wymagane dla weryfikacji. Lista grup może być separowana znakiem `|`.\n\t• Użyj `AND` jako pierwszy wpis w liście grup aby wszystkie podane grupy użytkowników były wymagane do weryfikacji.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <nowy wiek konta>", "desc": "Zmienię minimalny wiek konta (w dniach) dla weryfikacji wiki.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "Dopasuję nazwę użytkownika na Discordzie do nazwy użytkownika na wiki.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "Usunę weryfikację.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "Nadaję każdej osobie w kanale głosowym specjalną rolę.", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "Od teraz będę ignorował większość komend na tym serwerze z wyjątkiem paru, administracyjnych komend.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "Ponownie będę odpowiadał na wszystkie komendy na tym serwerze.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "Gdy jestem aktywny - odpowiem.", "pause": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<wyszukiwana fraza>",
+				"desc": "Odpowiem linkiem do pasującego artykułu na wiki."
+			},
+			"inline": {
+				"link": {
+					"cmd": "[[<nazwa strony>]]",
+					"desc": "Odpowiem bezpośrednim linkiem do artykułu na wiki."
+				},
+				"template": {
+					"cmd": "{{<nazwa strony>}}",
+					"desc": "Odpowiem linkiem do artykułu na wiki."
+				}
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <wyszukiwana fraza>",
+				"desc": "Odpowiem z pasującym linkiem do podanej wiki na Gamepedii: `https://<wiki>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <wyszukiwana fraza>",
+				"desc": "Odpowiem z pasującym linkiem do podanej wiki na Fandomie: `https://<wiki>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <wyszukiwana fraza>",
+				"desc": "Odpowiem z pasującym linkiem do podanej wiki na Wikia: `https://<wiki>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "Użytkownik:<nazwa użytkownika>",
+				"desc": "Pokażę informacje na temat użytkownika."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "Pokażę informacje oraz statystyki na temat wiki."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "Odpowiem linkiem do losowej strony na wiki."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "Odpowiem linkiem do podanej zmiany na wiki."
+				},
+				"name": {
+					"cmd": "diff <nazwa strony>",
+					"desc": "Odpowiem linkiem do ostatniej zmiany w podanym artykule na wiki."
+				}
+			},
+			"page": {
+				"cmd": "page <nazwa strony>",
+				"desc": "Odpowiem linkiem do podanego artykułu na Wiki."
+			},
+			"search": {
+				"cmd": "search <wyszukiwana fraza>",
+				"desc": "Odpowiem linkiem do strony wyszukiwania z podaną frazą na wiki."
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<komenda>",
+					"desc": "Odpowiem z formatem komendy Minecraftowej oraz linkiem do artykułu o podanej komendzie na Minecraft Wiki."
+				},
+				"command": {
+					"cmd": "command <komenda>",
+					"desc": "Odpowiem z formatem komendy Minecraftowej oraz linkiem do artykułu o podanej komendzie na Minecraft Wiki."
+				},
+				"bug": {
+					"cmd": "bug <Minecraft bug>",
+					"desc": "Odpowiem z linkiem do błędu na bug trackerze Mojangu."
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <wyszukiwana fraza>",
+					"desc": "Odpowiem linkiem do odpowiadającego wątku dyskusji na Fandomowej wiki."
+				},
+				"post": {
+					"cmd": "discussion post <wyszukiwana fraza>",
+					"desc": "Odpowiem linkiem do odpowiadającego postu na Fandomowej wiki."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "Przedstawie się."
+			},
+			"help": {
+				"default":{
+					"cmd": "help",
+					"desc": "Wylistuję wszystkie komendy, które rozumiem."
+				},
+				"command": {
+					"cmd": "help <komenda bota>",
+					"desc": "Wytłumaczę działanie komendy!"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "Wylistuję wszystkie komendy administracyjne."
+				},
+				"verification": {
+					"cmd": "help verification",
+					"desc": "Szczegółowo wyjaśnię działanie komendy verify."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "Zmienię ustawienia dla tego serwera."
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "Zmienię domyślną wiki tego serwera."
+				},
+				"lang": {
+					"cmd": "settings lang <język>",
+					"desc": "Zmienię język tego serwera."
+				},
+				"inline": {
+					"cmd": "settings inline toggle",
+					"desc": "Włączę/wyłącze linkowanie z użyciem składni wiki."
+				},
+				"prefix": {
+					"cmd": "settings prefix <prefiks>",
+					"desc": "Zmienię prefiks komend używany na tym serwerze."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "Utworzę ustawienia specjalne dla danego kanału."
+				}
+			},
+			"verify": {
+				"cmd": "verify <nazwa użytkownika na wiki>",
+				"desc": "Użyj tej komendy do weryfikacji konta Discord kontem na wiki, oraz zdobycia ról odpowiednich dla Twojego konta na wiki."
+			},
+			"verification": {
+				"default": {
+					"cmd": "verification",
+					"desc": "Zmienię weryfikację używaną przez komendę `$1verify`."
+				},
+				"add": {
+					"cmd": "verification add <rola>",
+					"desc": "Dodam nową weryfikację konta na wiki. Lista ról może być sparowana znakiem `|`."
+				},
+				"channel": {
+					"cmd": "verification <id> channel <nowy kanał>",
+					"desc": "Zmienię kanał dla weryfikacji. Lista kanałów może być sparowana znakiem `|`."
+				},
+				"role": {
+					"cmd": "verification <id> role <nowa rola>",
+					"desc": "Zmienię dodawane role dla weryfikacji. Lista ról może być sparowana znakiem `|`."
+				},
+				"editcount": {
+					"cmd": "verification <id> editcount <nowa ilość edycji>",
+					"desc": "Zmienię minimalną wymaganą ilość edycji dla weryfikacji."
+				},
+				"usergroup": {
+					"cmd": "verification <id> usergroup <nowa grupa użytkowników>",
+					"desc": "Zmienię grupy użytkowników wymagane dla weryfikacji. Lista grup może być separowana znakiem `|`.\n\t• Użyj `AND` jako pierwszy wpis w liście grup aby wszystkie podane grupy użytkowników były wymagane do weryfikacji."
+				},
+				"accountage": {
+					"cmd": "verification <id> accountage <nowy wiek konta>",
+					"desc": "Zmienię minimalny wiek konta (w dniach) dla weryfikacji wiki."
+				},
+				"rename": {
+					"cmd": "verification <id> rename",
+					"desc": "Dopasuję nazwę użytkownika na Discordzie do nazwy użytkownika na wiki."
+				},
+				"delete": {
+					"cmd": "verification <id> delete",
+					"desc": "Usunę weryfikację."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "Nadaję każdej osobie w kanale głosowym specjalną rolę."
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "Od teraz będę ignorował większość komend na tym serwerze z wyjątkiem paru, administracyjnych komend."
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "Ponownie będę odpowiadał na wszystkie komendy na tym serwerze."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "Gdy jestem aktywny - odpowiem."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft-pl.gamepedia.com/",
 		"cmdpage": "Komendy#",
-		"aliases": {
-			"cmd": "command",
-			"komenda": "command"
-		},
 		"private": "**Private Issue**",
 		"fixed": "Naprawione w wersji:",
 		"more": "Oraz $1 {{PLURAL:$1|inny|inne|innych}}.",

+ 183 - 73
i18n/pt.json

@@ -9,13 +9,13 @@
 	],
 	"dateformat": "pt-PT",
 	"aliases": {
-		"ajuda": "help",
-		"teste": "test",
-		"página": "page",
-		"pesquisar": "search",
-		"🎲": "random",
-		"discussions": "discussion",
-		"discussão": "discussion"
+		"help": ["ajuda"],
+		"test": ["teste"],
+		"page": ["página"],
+		"search": ["pesquisar"],
+		"discussion": ["discussão"],
+		"command": ["comando"],
+		"bug": ["erro"]
 	},
 	"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:",
@@ -249,8 +249,6 @@
 		}
 	},
 	"search": {
-		"page": "página",
-		"search": "pesquisar",
 		"infopage": "Não é o resultado correto? Use $1 para um link direto.",
 		"infosearch": "Não é o resultado correto? Use $1 para um link direto ou $2 para uma lista de todos os acessos.",
 		"category": {
@@ -290,74 +288,186 @@
 		"noadmin": "você precisa da permissão de `Gerenciar servidor` para esses comandos!",
 		"pause": "**Estou atualmente em pausa neste servidor!**\nSom estes comandos podem ser executados:",
 		"footer": "Se você recebeu uma resposta indesejada, pode reagir com 🗑️ para minha mensagem e eu a apagarei.",
-		"list": [
-			{ "cmd": "<termo de pesquisa>", "desc": "Vou responder com um link para um artigo correspondente no wiki.", "unsearchable": true },
-			{ "cmd": "[[<nome da página>]]", "desc": "I will answer with a direct link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<nome da página>}}", "desc": "I will answer with a link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<wiki> <termo de pesquisa>", "desc": "Vou responder com um link para um artigo correspondente na wiki da Gamepedia: `https://<wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<wiki> <termo de pesquisa>", "desc": "Vou responder com um link para um artigo correspondente na wiki da Fandom: `https://<wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<wiki> <termo de pesquisa>", "desc": "Vou responder com um link para um artigo correspondente na wiki da Wikia: `https://<wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "Usuário:<username>", "desc": "Vou mostrar algumas informações sobre o usuário.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "Vou responder com um link para o diff na wiki." },
-			{ "cmd": "diff <page name>", "desc": "Vou responder com um link para o último diff no artigo na wiki." },
-			{ "cmd": "random", "desc": "Vou responder com um link para uma página aleatória na wiki." },
-			{ "cmd": "🎲", "desc": "Vou responder com um link para uma página aleatória na wiki.", "hide": true },
-			{ "cmd": "overview", "desc": "Vou mostrar algumas informações e estatísticas sobre a wiki." },
-			{ "cmd": "/<comando do Minecraft>", "desc": "Vou responder com a sintaxe do comando do Minecraft e um link para o artigo do comando na Minecraft Wiki.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "comando <comando do Minecraft>", "desc": "Vou responder com a sintaxe do comando do Minecraft e um link para o artigo do comando na Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "command <comando do Minecraft>", "desc": "Vou responder com a sintaxe do comando do Minecraft e um link para o artigo do comando na Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <comando do Minecraft>", "desc": "Vou responder com a sintaxe do comando do Minecraft e um link para o artigo do comando na Minecraft Wiki.", "hide": true, "minecraft": true },
-			{ "cmd": "erro <erro do Minecraft>", "desc": "Vou responder com um link para o erro no rastreador de erros do Minecraft.", "minecraft": true },
-			{ "cmd": "bug <erro do Minecraft>", "desc": "Vou responder com um link para o erro no rastreador de erros do Minecraft.", "hide": true, "minecraft": true },
-			{ "cmd": "página <nome da página>", "desc": "Vou responder com um link direto para o artigo na wiki.", "hide": true },
-			{ "cmd": "page <nome da página>", "desc": "Vou responder com um link direto para o artigo na wiki.", "hide": true },
-			{ "cmd": "pesquisar <termo de pesquisa>", "desc": "Vou responder com um link direto para a página de busca de artigo na wiki.", "hide": true },
-			{ "cmd": "search <termo de pesquisa>", "desc": "Vou responder com um link direto para a página de busca de artigo na wiki.", "hide": true },
-			{ "cmd": "discussão <termo de pesquisa>", "desc": "Vou responder com um link para um tópico de discussão correspondente na wiki da Fandom.", "fandom": true },
-			{ "cmd": "discussion <search term>", "desc": "Vou responder com um link para um tópico de discussão correspondente na wiki da Fandom.", "hide": true, "fandom": true },
-			{ "cmd": "discussão post <termo de pesquisa>", "desc": "Vou responder com um link para um post de discussão correspondente na wiki da Fandom.", "fandom": true },
-			{ "cmd": "discussion post <search term>", "desc": "Vou responder com um link para um post de discussão correspondente na wiki da Fandom.", "hide": true, "fandom": true },
-			{ "cmd": "info", "desc": "Irei me apresentar." },
-			{ "cmd": "ajuda", "desc": "Vou listar todos os comandos que entendo." },
-			{ "cmd": "ajuda <comando do robô>", "desc": "Quer saber como funciona um comando? Deixe-me explicar isso para você!" },
-			{ "cmd": "ajuda admin", "desc": "Vou listar todos os comandos do administrador." },
-			{ "cmd": "ajuda admin", "desc": "Vou listar todos os comandos do administrador.", "unsearchable": true, "admin": true },
-			{ "cmd": "help", "desc": "Vou listar todos os comandos que entendo.", "hide": true },
-			{ "cmd": "help <comando do robô>", "desc": "Quer saber como funciona um comando? Deixe-me explicar isso para você!", "hide": true },
-			{ "cmd": "help admin", "desc": "Vou listar todos os comandos do administrador.", "hide": true },
-			{ "cmd": "settings", "desc": "Vou mudar as configurações deste servidor.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <idioma>", "desc": "Vou mudar o idioma deste servidor.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <prefixo>", "desc": "Eu vou mudar o prefixo deste servidor.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "I will toggle inline commands for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <wiki>", "desc": "Vou mudar a wiki padrão para esse servidor.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "Vou mudar as substituições para o canal atual.", "hide": true, "admin": true },
-			{ "cmd": "verify <wiki username>", "desc": "Use este comando para verificar sua conta do Discord com a sua conta wiki e obter funções correspondentes à sua conta na wiki.", "hide": true },
-			{ "cmd": "verification", "desc": "Vou mudar as verificações da wiki usadas pelo comando `@prefixverify`.", "admin": true, "pause": true },
-			{ "cmd": "ajuda verification", "desc": "Vou explicar mais detalhadamente como o comando de verificação funciona.", "admin": true },
-			{ "cmd": "help verification", "desc": "Vou explicar mais detalhadamente como o comando de verificação funciona.", "hide": true, "admin": true },
-			{ "cmd": "verification add <função>", "desc": "Vou adicionar uma nova verificação da wiki. Aceita uma `|` lista separada.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <novo canal>", "desc": "Vou mudar o canal para a verificação da wiki. Aceita uma `|` lista separada.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <nova função>", "desc": "Vou mudar o papel da verificação do wiki. Aceita uma `|` lista separada.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <nova contagem de edições>", "desc": "Vou alterar a contagem mínima de edições para a verificação da wiki.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <novo grupo de usuários>", "desc": "Vou mudar o grupo de usuários para a verificação da wiki. Aceita uma `|` lista separada.\n\t• Fornecer `AND` como a primeira entrada da lista para tornar todos os grupos de usuários fornecidos necessários.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <idade da nova conta>", "desc": "Vou alterar a idade mínima da conta (em dias) para a verificação da wiki.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "Eu mudarei se o apelido do Discord dos usuários for alterado para o nome de usuário do wiki para a verificação da wiki.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "Vou excluir a verificação da wiki.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "Eu tento dar a todos em um canal de voz um papel específico.", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "Eu vou ignorar todos os comandos neste servidor, exceto alguns comandos de administração.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "Eu responderei a todos os comandos neste servidor novamente.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "teste", "desc": "Se estou ativo, respondo! Caso contrário, não.", "pause": true },
-			{ "cmd": "test", "desc": "Se estou ativo, respondo! Caso contrário, não.", "hide": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<termo de pesquisa>",
+				"desc": "Vou responder com um link para um artigo correspondente no wiki."
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <termo de pesquisa>",
+				"desc": "Vou responder com um link para um artigo correspondente na wiki da Gamepedia: `https://<wiki>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <termo de pesquisa>",
+				"desc": "Vou responder com um link para um artigo correspondente na wiki da Fandom: `https://<wiki>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <termo de pesquisa>",
+				"desc": "Vou responder com um link para um artigo correspondente na wiki da Wikia: `https://<wiki>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "Usuário:<username>",
+				"desc": "Vou mostrar algumas informações sobre o usuário."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "Vou mostrar algumas informações e estatísticas sobre a wiki."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "Vou responder com um link para uma página aleatória na wiki."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "Vou responder com um link para o diff na wiki."
+				},
+				"name": {
+					"cmd": "diff <page name>",
+					"desc": "Vou responder com um link para o último diff no artigo na wiki."
+				}
+			},
+			"page": {
+				"cmd": "page <nome da página>",
+				"desc": "Vou responder com um link direto para o artigo na wiki."
+			},
+			"search": {
+				"cmd": "search <termo de pesquisa>",
+				"desc": "Vou responder com um link direto para a página de busca de artigo na wiki."
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<comando do Minecraft>",
+					"desc": "Vou responder com a sintaxe do comando do Minecraft e um link para o artigo do comando na Minecraft Wiki."
+				},
+				"command": {
+					"cmd": "command <comando do Minecraft>",
+					"desc": "Vou responder com a sintaxe do comando do Minecraft e um link para o artigo do comando na Minecraft Wiki."
+				},
+				"bug": {
+					"cmd": "bug <erro do Minecraft>",
+					"desc": "Vou responder com um link para o erro no rastreador de erros do Minecraft."
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <search term>",
+					"desc": "Vou responder com um link para um tópico de discussão correspondente na wiki da Fandom."
+				},
+				"post": {
+					"cmd": "discussion post <search term>",
+					"desc": "Vou responder com um link para um post de discussão correspondente na wiki da Fandom."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "Irei me apresentar."
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "Vou listar todos os comandos que entendo."
+				},
+				"command": {
+					"cmd": "help <comando do robô>",
+					"desc": "Quer saber como funciona um comando? Deixe-me explicar isso para você!"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "Vou listar todos os comandos do administrador."
+				},
+				"verification": {
+					"cmd": "help verification",
+					"desc": "Vou explicar mais detalhadamente como o comando de verificação funciona."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "Vou mudar as configurações deste servidor."
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "Vou mudar a wiki padrão para esse servidor."
+				},
+				"lang": {
+					"cmd": "settings lang <idioma>",
+					"desc": "Vou mudar o idioma deste servidor."
+				},
+				"prefix": {
+					"cmd": "settings prefix <prefixo>",
+					"desc": "Eu vou mudar o prefixo deste servidor."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "Vou mudar as substituições para o canal atual."
+				}
+			},
+			"verify": {
+				"cmd": "verify <wiki username>",
+				"desc": "Use este comando para verificar sua conta do Discord com a sua conta wiki e obter funções correspondentes à sua conta na wiki."
+			},
+			"verification": {
+				"default": {
+					"cmd": "verification",
+					"desc": "Vou mudar as verificações da wiki usadas pelo comando `$1verify`."
+				},
+				"add": {
+					"cmd": "verification add <função>",
+					"desc": "Vou adicionar uma nova verificação da wiki. Aceita uma `|` lista separada."
+				},
+				"channel": {
+					"cmd": "verification <id> channel <novo canal>",
+					"desc": "Vou mudar o canal para a verificação da wiki. Aceita uma `|` lista separada."
+				},
+				"role": {
+					"cmd": "verification <id> role <nova função>",
+					"desc": "Vou mudar o papel da verificação do wiki. Aceita uma `|` lista separada."
+				},
+				"editcount": {
+					"cmd": "verification <id> editcount <nova contagem de edições>",
+					"desc": "Vou alterar a contagem mínima de edições para a verificação da wiki."
+				},
+				"usergroup": {
+					"cmd": "verification <id> usergroup <novo grupo de usuários>",
+					"desc": "Vou mudar o grupo de usuários para a verificação da wiki. Aceita uma `|` lista separada.\n\t• Fornecer `AND` como a primeira entrada da lista para tornar todos os grupos de usuários fornecidos necessários."
+				},
+				"accountage": {
+					"cmd": "verification <id> accountage <idade da nova conta>",
+					"desc": "Vou alterar a idade mínima da conta (em dias) para a verificação da wiki."
+				},
+				"rename": {
+					"cmd": "verification <id> rename",
+					"desc": "Eu mudarei se o apelido do Discord dos usuários for alterado para o nome de usuário do wiki para a verificação da wiki."
+				},
+				"delete": {
+					"cmd": "verification <id> delete",
+					"desc": "Vou excluir a verificação da wiki."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "Eu tento dar a todos em um canal de voz um papel específico."
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "Eu vou ignorar todos os comandos neste servidor, exceto alguns comandos de administração."
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "Eu responderei a todos os comandos neste servidor novamente."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "Se estou ativo, respondo! Caso contrário, não."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft-pt.gamepedia.com/",
 		"cmdpage": "Comandos/",
-		"aliases": {
-			"cmd": "command",
-			"comando": "command",
-			"erro": "bug"
-		},
 		"private": "**Private Issue**",
 		"fixed": "Versão corrigida:",
 		"more": "E $1 {{PLURAL:$1|mais}}.",

+ 132 - 60
i18n/ru.json

@@ -8,10 +8,8 @@
 	],
 	"dateformat": "ru-RU",
 	"aliases": {
-		"страница": "page",
-		"поиск": "search",
-		"🎲": "random",
-		"discussions": "discussion"
+		"page": ["страница"],
+		"search": ["поиск"]
 	},
 	"prefix": "префикс для этого сервера `$1`. Вы можете изменить префикс, введя команду `$1settings prefix`. Чтобы получить список всех команд, введите `$1help`.",
 	"missingperm": "Я потерял какие-то разрешения для выполнения команды:",
@@ -244,8 +242,6 @@
 		}
 	},
 	"search": {
-		"page": "страница",
-		"search": "поиск",
 		"infopage": "Неверный результат? Используйте $1 для прямых ссылок.",
 		"infosearch": "Неверный результат? Используйте $1 для прямых ссылок или $2 для получения всех результатов.",
 		"category": {
@@ -285,64 +281,140 @@
 		"noadmin": "вам нужно разрешение `Управлять сервером` для этих команд!",
 		"pause": "**Я в сейчас приостановлен на этом сервере!**\nМогут быть выполнены только эти команды:",
 		"footer": "Если вы получили нежелательный ответ, вы можете реагировать с 🗑️ на мое сообщение и я его удалю.",
-		"list": [
-			{ "cmd": "<поисковый запрос>", "desc": "Я отвечу со ссылкой на соответствующую статью в вики.", "unsearchable": true },
-			{ "cmd": "[[<название страницы>]]", "desc": "I will answer with a direct link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<название страницы>}}", "desc": "I will answer with a link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<вики> <поисковый запрос>", "desc": "Я отвечу с ссылкой на соответствующую статью в выбранном Gamepedia вики: `https://<вики>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<вики> <поисковый запрос>", "desc": "Я отвечу с ссылкой на соответствующую статью в выбранном Fandom вики: `https://<вики>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<вики> <поисковый запрос>", "desc": "Я отвечу с ссылкой на соответствующую статью в выбранной Wikia вики: `https://<вики>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "Участник:<имя участника>", "desc": "Я покажу некоторую информацию о пользователе.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "Я отвечу с ссылкой на различие в вики." },
-			{ "cmd": "diff <название страницы>", "desc": "Я отвечу с ссылкой на последнее различие в вики." },
-			{ "cmd": "random", "desc": "Я отвечу с ссылкой на случайную страницу в вики." },
-			{ "cmd": "🎲", "desc": "Я отвечу с ссылкой на случайную страницу в вики.", "hide": true },
-			{ "cmd": "overview", "desc": "Я покажу немного информации и статистику о вики." },
-			{ "cmd": "/<команда Minecraft>", "desc": "Бот ответит синтаксисом команды из Minecraft и приведёт ссылку на статью Minecraft Wiki об этой команде.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "command <команда Minecraft>", "desc": "Бот ответит синтаксисом команды из Minecraft и приведёт ссылку на статью Minecraft Wiki об этой команде.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <команда Minecraft>", "desc": "Бот ответит синтаксисом команды из Minecraft и приведёт ссылку на статью Minecraft Wiki об этой команде.", "hide": true, "minecraft": true },
-			{ "cmd": "bug <ошибка Minecraft>", "desc": "Бот ответит ссылкой на отчёт об ошибке в баг-трекере Minecraft.", "minecraft": true },
-			{ "cmd": "страница <название страницы>", "desc": "Я отвечу с прямой ссылкой на статью в вики.", "hide": true },
-			{ "cmd": "page <название страницы>", "desc": "Я отвечу с прямой ссылкой на статью в вики.", "hide": true },
-			{ "cmd": "поиск <поисковый запрос>", "desc": "Я отвечу с прямой ссылкой на страницу поиска статьи в вики.", "hide": true },
-			{ "cmd": "search <поисковый запрос>", "desc": "Я отвечу с прямой ссылкой на страницу поиска статьи в вики.", "hide": true },
-			{ "cmd": "discussion <поисковый запрос>", "desc": "Я отвечу со ссылкой на соответствующую ветку обсуждения в Fandom вики.", "fandom": true },
-			{ "cmd": "discussion пост <поисковый запрос>", "desc": "Я отвечу со ссылкой на соответствующий пост обсуждения в Fandom вики.", "fandom": true },
-			{ "cmd": "discussion post <поисковый запрос>", "desc": "Я отвечу со ссылкой на соответствующий пост обсуждения в Fandom вики.", "hide": true, "fandom": true },
-			{ "cmd": "info", "desc": "Позвольте представиться." },
-			{ "cmd": "help", "desc": "Я перечислю все команды, которые я понимаю." },
-			{ "cmd": "help <команда для бота>", "desc": "Интересно, как работает команда? Позвольте мне объяснить это вам!" },
-			{ "cmd": "help admin", "desc": "Я перечислю все команды администратора." },
-			{ "cmd": "help admin", "desc": "Я перечислю все команды администратора.", "unsearchable": true, "admin": true },
-			{ "cmd": "settings", "desc": "Я изменю настройки для этого сервера.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <язык>", "desc": "Я поменяю язык для этого сервера.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <префикс>", "desc": "Бот изменит используемый в начале команд префикс для этого сервера.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "I will toggle inline commands for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <вики>", "desc": "Я изменю вики по умолчанию для этого сервера.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "Я изменю перезаписи для текущего канала.", "hide": true, "admin": true },
-			{ "cmd": "verify <wiki username>", "desc": "Use this command to verify your Discord account with your wiki account and get roles matching your wiki account.", "hide": true },
-			{ "cmd": "verification", "desc": "I will change the wiki verifications used by the `@prefixverify` command.", "admin": true, "pause": true },
-			{ "cmd": "help verification", "desc": "I will explain in more detail how the verification command works.", "admin": true },
-			{ "cmd": "verification add <role>", "desc": "I will add a new wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <new channel>", "desc": "I will update the channel for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <new role>", "desc": "I will update the role for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <new edit count>", "desc": "I will update the minimal edit count for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <new user group>", "desc": "I will update the user group for the wiki verification. Accepts a `|` separated list.\n\t• Provide `AND` as the first list entry to make all provided user groups required.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <new account age>", "desc": "I will update the minimal account age (in days) for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "I will change if the users Discord nickname should be changed to their wiki username for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "I will delete the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "Я попробую выдать всем в этом голосовом канале определенную роль.", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "Я буду игнорировать все команды на этом сервере, кроме нескольких команд администратора.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "Я снова буду отвечать на все команды на этом сервере.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "Если я активен, я отвечу! Иначе нет.", "pause": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<поисковый запрос>",
+				"desc": "Я отвечу со ссылкой на соответствующую статью в вики."
+			},
+			"gamepedia": {
+				"cmd": "!<вики> <поисковый запрос>",
+				"desc": "Я отвечу с ссылкой на соответствующую статью в выбранном Gamepedia вики: `https://<вики>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<вики> <поисковый запрос>",
+				"desc": "Я отвечу с ссылкой на соответствующую статью в выбранном Fandom вики: `https://<вики>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<вики> <поисковый запрос>",
+				"desc": "Я отвечу с ссылкой на соответствующую статью в выбранной Wikia вики: `https://<вики>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "Участник:<имя участника>",
+				"desc": "Я покажу некоторую информацию о пользователе."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "Я покажу немного информации и статистику о вики."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "Я отвечу с ссылкой на случайную страницу в вики."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "Я отвечу с ссылкой на различие в вики."
+				},
+				"name": {
+					"cmd": "diff <название страницы>",
+					"desc": "Я отвечу с ссылкой на последнее различие в вики."
+				}
+			},
+			"page": {
+				"cmd": "page <название страницы>",
+				"desc": "Я отвечу с прямой ссылкой на статью в вики."
+			},
+			"search": {
+				"cmd": "search <поисковый запрос>",
+				"desc": "Я отвечу с прямой ссылкой на страницу поиска статьи в вики."
+			},
+			"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 вики."
+				},
+				"post": {
+					"cmd": "discussion пост <поисковый запрос>",
+					"desc": "Я отвечу со ссылкой на соответствующий пост обсуждения в Fandom вики."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "Позвольте представиться."
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "Я перечислю все команды, которые я понимаю."
+				},
+				"command": {
+					"cmd": "help <команда для бота>",
+					"desc": "Интересно, как работает команда? Позвольте мне объяснить это вам!"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "Я перечислю все команды администратора."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "Я изменю настройки для этого сервера."
+				},
+				"wiki": {
+					"cmd": "settings wiki <вики>",
+					"desc": "Я изменю вики по умолчанию для этого сервера."
+				},
+				"lang": {
+					"cmd": "settings lang <язык>",
+					"desc": "Я поменяю язык для этого сервера."
+				},
+				"prefix": {
+					"cmd": "settings prefix <префикс>",
+					"desc": "Бот изменит используемый в начале команд префикс для этого сервера."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "Я изменю перезаписи для текущего канала."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "Я попробую выдать всем в этом голосовом канале определенную роль."
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "Я буду игнорировать все команды на этом сервере, кроме нескольких команд администратора."
+				},
+				"active": {
+					"cmd": "pause $1",
+					"desc": "Я снова буду отвечать на все команды на этом сервере."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "Если я активен, я отвечу! Иначе нет."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft-ru.gamepedia.com/",
 		"cmdpage": "Команды_консоли/",
-		"aliases": {
-			"cmd": "command"
-		},
 		"private": "**Конфиденциальный отчёт об ошибке**",
 		"fixed": "Исправлено в версии:",
 		"more": "и ещё $1 {{PLURAL:$1|ошибок}}."

+ 135 - 69
i18n/tr.json

@@ -7,13 +7,11 @@
 	],
 	"dateformat": "tr-TR",
 	"aliases": {
-		"bilgi": "info",
-		"yardım": "help",
-		"sayfa": "page",
-		"arama": "search",
-		"🎲": "random",
-		"discussions": "discussion",
-		"tartışma": "discussion"
+		"info": ["bilgi"],
+		"help": ["yardım"],
+		"page": ["sayfa"],
+		"search": ["arama"],
+		"discussion": ["tartışma"]
 	},
 	"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:",
@@ -172,8 +170,6 @@
 		}
 	},
 	"search": {
-		"page": "sayfa",
-		"search": "arama",
 		"infopage": "Doğru sonucu alamadın mı? Doğrudan bir bağlantı için $1 kullan.",
 		"infosearch": "Doğru sonucu alamadın mı? Doğrudan bir bağlantı için $1, tüm isabetlerin listesi için $2 kullan.",
 		"category": {
@@ -213,70 +209,140 @@
 		"noadmin": "Bu komutlar için `Sunucuyu Yönetme` iznine ihtiyacınız var!",
 		"pause": "**Şu an bu sunucuda duraklatılmış durumdayım!**\nSadece bu komutlar gerçekleştirilebilir:",
 		"footer": "Eğer istenmeyen bir cevap verdiysem mesajıma 🗑️ ile tepki verin, mesajı sileceğim.",
-		"list": [
-			{ "cmd": "<arama terimi>", "desc": "Wiki'deki eşleşen bir makale bağlantısıyla cevap vereceğim.", "unsearchable": true },
-			{ "cmd": "[[<sayfa adı>]]", "desc": "I will answer with a direct link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<sayfa adı>}}", "desc": "I will answer with a link to the article in the wiki.", "unsearchable": true, "inline": true },
-			{ "cmd": "!<wiki> <arama terimi>", "desc": "Belirtilen Gamepedia Wikideki eşleşen bir makale bağlantısıyla cevap vereceğim: `https://<wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<wiki> <arama terimi>", "desc": "Belirtilen Fandom Wikideki eşleşen bir makale bağlantısıyla cevap vereceğim: `https://<wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<wiki> <arama terimi>", "desc": "Belirtilen Wikia Wikideki eşleşen bir makale bağlantısıyla cevap vereceğim: `https://<wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "Kullanıcı:<kullanıcıadı>", "desc": "Kullanıcı hakkında bazı bilgileri göstereceğim.", "unsearchable": true },
-			{ "cmd": "diff <diff> [<oldid>]", "desc": "Wikideki farkların bağlantısıyla cevap vereceğim." },
-			{ "cmd": "diff <sayfa adı>", "desc": "Wikideki son farkın bağlantısıyla cevap vereceğim." },
-			{ "cmd": "random", "desc": "Wiki'deki rastgele bir sayfanın bağlantısı ile cevap vereceğim." },
-			{ "cmd": "🎲", "desc": "Wiki'deki rastgele bir sayfanın bağlantısı ile cevap vereceğim.", "hide": true },
-			{ "cmd": "overview", "desc": "Wiki ile ilgili bazı bilgileri ve istatistikleri göstereceğim." },
-			{ "cmd": "/<Minecraft komutu>", "desc": "Minecraft komutunun sözdizimini ve Minecraft Wiki'deki komutun makalesini içeren bir bağlantıyla cevap vereceğim.", "unsearchable": true, "minecraft": true },
-			{ "cmd": "command <Minecraft komutu>", "desc": "Minecraft komutunun sözdizimini ve Minecraft Wiki'deki komutun makalesini içeren bir bağlantıyla cevap vereceğim.", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <Minecraft komutu>", "desc": "Minecraft komutunun sözdizimini ve Minecraft Wiki'deki komutun makalesini içeren bir bağlantıyla cevap vereceğim.", "hide": true, "minecraft": true },
-			{ "cmd": "bug <Minecraft hata>", "desc": "Hatanın Minecraft hata bulucusu'ndaki bağlantısıyla cevap vereceğim.", "minecraft": true },
-			{ "cmd": "sayfa <sayfa adı>", "desc": "Makalenin wikideki bağlantısıyla cevap vereceğim.", "hide": true },
-			{ "cmd": "page <sayfa adı>", "desc": "Makalenin wikideki bağlantısıyla cevap vereceğim.", "hide": true },
-			{ "cmd": "arama <arama terimi>", "desc": "Wikideki makalenin arama sayfasına doğrudan bir bağlantı ile cevap vereceğim.", "hide": true },
-			{ "cmd": "search <arama terimi>", "desc": "Wikideki makalenin arama sayfasına doğrudan bir bağlantı ile cevap vereceğim.", "hide": true },
-			{ "cmd": "tartışma <arama terimi>", "desc": "Fandom Wikideki eşleşen tartışma konusunun bağlantısıyla cevap vereceğim.", "fandom": true },
-			{ "cmd": "discussion <arama terimi>", "desc": "Fandom Wikideki eşleşen tartışma konusunun bağlantısıyla cevap vereceğim.", "hide": true, "fandom": true },
-			{ "cmd": "tartışma gönderisi <arama terimi>", "desc": "Fandom Wikideki eşleşen tartışma gönderisinin bağlantısıyla cevap vereceğim.", "fandom": true },
-			{ "cmd": "discussion post <arama terimi>", "desc": "Fandom Wikideki eşleşen tartışma gönderisinin bağlantısıyla cevap vereceğim.", "hide": true, "fandom": true },
-			{ "cmd": "bilgi", "desc": "Kendimi tanıtacağım." },
-			{ "cmd": "info", "desc": "Kendimi tanıtacağım.", "hide": true },
-			{ "cmd": "yardım", "desc": "Anladığım tüm komutları listeleyeceğim." },
-			{ "cmd": "yardım <bot komutu>", "desc": "Bir komut nasıl çalışıyor biliyor musun? Sana açıklayayım!" },
-			{ "cmd": "yardım admin", "desc": "Tüm yönetici komutlarını listeleyeceğim." },
-			{ "cmd": "yardım admin", "desc": "Tüm yönetici komutlarını listeleyeceğim.", "unsearchable": true, "admin": true },
-			{ "cmd": "help", "desc": "Anladığım tüm komutları listeleyeceğim.", "hide": true },
-			{ "cmd": "help <bot komutu>", "desc": "Bir komut nasıl çalışıyor biliyor musun? Sana açıklayayım!", "hide": true },
-			{ "cmd": "help admin", "desc": "Tüm yönetici komutlarını listeleyeceğim.", "hide": true },
-			{ "cmd": "settings", "desc": "Bu sunucunun ayarlarını değiştireceğim.", "admin": true, "pause": true },
-			{ "cmd": "settings lang <dil>", "desc": "Bu sunucunun dilini değiştireceğim.", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <önek>", "desc": "Sunucudaki öneki değiştireceğim.", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "I will toggle inline commands for this server.", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <wiki>", "desc": "Bu sunucunun varsayılan wikisini değiştireceğim.", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "Mevcut kanalın kanala özel ayarlarını değiştireceğim.", "hide": true, "admin": true },
-			{ "cmd": "verify <wiki username>", "desc": "Use this command to verify your Discord account with your wiki account and get roles matching your wiki account.", "hide": true },
-			{ "cmd": "verification", "desc": "I will change the wiki verifications used by the `@prefixverify` command.", "admin": true, "pause": true },
-			{ "cmd": "yardım verification", "desc": "I will explain in more detail how the verification command works.", "admin": true },
-			{ "cmd": "help verification", "desc": "I will explain in more detail how the verification command works.", "hide": true, "admin": true },
-			{ "cmd": "verification add <role>", "desc": "I will add a new wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <new channel>", "desc": "I will update the channel for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <new role>", "desc": "I will update the role for the wiki verification. Accepts a `|` separated list.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <new edit count>", "desc": "I will update the minimal edit count for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <new user group>", "desc": "I will update the user group for the wiki verification. Accepts a `|` separated list.\n\t• Provide `AND` as the first list entry to make all provided user groups required.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <new account age>", "desc": "I will update the minimal account age (in days) for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "I will change if the users Discord nickname should be changed to their wiki username for the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "I will delete the wiki verification.", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "Sesli kanalda bulunan kişilere belirli bir rol vermeye çalışacağım.", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "Birkaç admin komutu haricinde, bu sunucudaki bütün komutları yok sayacağım.", "admin": true },
-			{ "cmd": "pause @mention", "desc": "Bu sunucudaki tüm komutlara tekrar cevap vereceğim.", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "Eğer aktifsem, cevap veririm! Aksi takdirde vermem.", "pause": true }
-		]
+		"list": {
+			"default": {
+				"cmd": "<arama terimi>",
+				"desc": "Wiki'deki eşleşen bir makale bağlantısıyla cevap vereceğim."
+			},
+			"gamepedia": {
+				"cmd": "!<wiki> <arama terimi>",
+				"desc": "Belirtilen Gamepedia Wikideki eşleşen bir makale bağlantısıyla cevap vereceğim: `https://<wiki>.gamepedia.com/`"
+			},
+			"fandom": {
+				"cmd": "?<wiki> <arama terimi>",
+				"desc": "Belirtilen Fandom Wikideki eşleşen bir makale bağlantısıyla cevap vereceğim: `https://<wiki>.fandom.com/`"
+			},
+			"wikia": {
+				"cmd": "??<wiki> <arama terimi>",
+				"desc": "Belirtilen Wikia Wikideki eşleşen bir makale bağlantısıyla cevap vereceğim: `https://<wiki>.wikia.org/`"
+			},
+			"user": {
+				"cmd": "Kullanıcı:<kullanıcıadı>",
+				"desc": "Kullanıcı hakkında bazı bilgileri göstereceğim."
+			},
+			"overview": {
+				"cmd": "overview",
+				"desc": "Wiki ile ilgili bazı bilgileri ve istatistikleri göstereceğim."
+			},
+			"random": {
+				"cmd": "random",
+				"desc": "Wiki'deki rastgele bir sayfanın bağlantısı ile cevap vereceğim."
+			},
+			"diff": {
+				"id": {
+					"cmd": "diff <diff> [<oldid>]",
+					"desc": "Wikideki farkların bağlantısıyla cevap vereceğim."
+				},
+				"name": {
+					"cmd": "diff <sayfa adı>",
+					"desc": "Wikideki son farkın bağlantısıyla cevap vereceğim."
+				}
+			},
+			"page": {
+				"cmd": "page <sayfa adı>",
+				"desc": "Makalenin wikideki bağlantısıyla cevap vereceğim."
+			},
+			"search": {
+				"cmd": "search <arama terimi>",
+				"desc": "Wikideki makalenin arama sayfasına doğrudan bir bağlantı ile cevap vereceğim."
+			},
+			"minecraft": {
+				"default": {
+					"cmd": "/<Minecraft komutu>",
+					"desc": "Minecraft komutunun sözdizimini ve Minecraft Wiki'deki komutun makalesini içeren bir bağlantıyla cevap vereceğim."
+				},
+				"command": {
+					"cmd": "command <Minecraft komutu>",
+					"desc": "Minecraft komutunun sözdizimini ve Minecraft Wiki'deki komutun makalesini içeren bir bağlantıyla cevap vereceğim."
+				},
+				"bug": {
+					"cmd": "bug <Minecraft hata>",
+					"desc": "Hatanın Minecraft hata bulucusu'ndaki bağlantısıyla cevap vereceğim."
+				}
+			},
+			"discussion": {
+				"thread": {
+					"cmd": "discussion <arama terimi>",
+					"desc": "Fandom Wikideki eşleşen tartışma konusunun bağlantısıyla cevap vereceğim."
+				},
+				"post": {
+					"cmd": "discussion gönderisi <arama terimi>",
+					"desc": "Fandom Wikideki eşleşen tartışma gönderisinin bağlantısıyla cevap vereceğim."
+				}
+			},
+			"info": {
+				"cmd": "info",
+				"desc": "Kendimi tanıtacağım."
+			},
+			"help": {
+				"default": {
+					"cmd": "help",
+					"desc": "Anladığım tüm komutları listeleyeceğim."
+				},
+				"command": {
+					"cmd": "help <bot komutu>",
+					"desc": "Bir komut nasıl çalışıyor biliyor musun? Sana açıklayayım!"
+				},
+				"admin": {
+					"cmd": "help admin",
+					"desc": "Tüm yönetici komutlarını listeleyeceğim."
+				}
+			},
+			"settings": {
+				"default": {
+					"cmd": "settings",
+					"desc": "Bu sunucunun ayarlarını değiştireceğim."
+				},
+				"wiki": {
+					"cmd": "settings wiki <wiki>",
+					"desc": "Bu sunucunun varsayılan wikisini değiştireceğim."
+				},
+				"lang": {
+					"cmd": "settings lang <dil>",
+					"desc": "Bu sunucunun dilini değiştireceğim."
+				},
+				"prefix": {
+					"cmd": "settings prefix <önek>",
+					"desc": "Sunucudaki öneki değiştireceğim."
+				},
+				"channel": {
+					"cmd": "settings channel",
+					"desc": "Mevcut kanalın kanala özel ayarlarını değiştireceğim."
+				}
+			},
+			"voice": {
+				"cmd": "voice",
+				"desc": "Sesli kanalda bulunan kişilere belirli bir rol vermeye çalışacağım."
+			},
+			"pause": {
+				"inactive": {
+					"cmd": "pause $1",
+					"desc": "Birkaç admin komutu haricinde, bu sunucudaki bütün komutları yok sayacağım."
+				},
+				"pause": {
+					"cmd": "pause $1",
+					"desc": "Bu sunucudaki tüm komutlara tekrar cevap vereceğim."
+				}
+			},
+			"test": {
+				"cmd": "test",
+				"desc": "Eğer aktifsem, cevap veririm! Aksi takdirde vermem."
+			}
+		}
 	},
 	"minecraft": {
 		"link": "https://minecraft-tr.gamepedia.com/",
 		"cmdpage": "en:Commands/",
-		"aliases": {
-			"cmd": "command"
-		},
 		"more": "Ve $1 {{PLURAL:$1|tane}} daha.",
 		"total": "$1 {{PLURAL:$1|hata}} düzeltildi"
 	}

+ 194 - 62
i18n/zh.json

@@ -8,11 +8,9 @@
 	],
 	"dateformat": "zh-CN",
 	"aliases": {
-		"🎲": "random",
-		"页面": "page",
-		"搜索": "search",
-		"验证": "verify",
-		"discussions": "discussion"
+		"page": ["页面"],
+		"search": ["搜索"],
+		"verify": ["验证"]
 	},
 	"prefix": "此伺服器的命令前缀是 `$1`。你可以使用 `$1settings prefix` 更改前缀。关于全部命令,请见 `$1help`。",
 	"missingperm": "为执行此命令我缺少一些权限:",
@@ -261,8 +259,6 @@
 		}
 	},
 	"search": {
-		"page": "页面",
-		"search": "搜索",
 		"infopage": "结果不正确?用$1来指定连接",
 		"infosearch": "结果不正确?用$1来指定链接或$2列出所有结果",
 		"category": {
@@ -299,63 +295,199 @@
 		"noadmin": "这个指令仅限拥有`管理员`权限的用户使用!",
 		"pause": "**我目前处于暂停状态!**\n仅能使用以下指令:",
 		"footer": "如果你觉得我的某个信息刷屏,在信息上添加一个🗑️图标我就会自己删掉这一条信息。",
-		"list": [
-			{ "cmd": "<关键字>", "desc": "我将返回一个wiki指定页面的链接", "unsearchable": true },
-			{ "cmd": "[[<页面名>]]", "desc": "我将返回一个wiki指定页面的直接链接。", "unsearchable": true, "inline": true },
-			{ "cmd": "{{<页面名>}}", "desc": "我将返回一个wiki指定页面的链接。", "unsearchable": true, "inline": true },
-			{ "cmd": "!<wiki> <关键字>", "desc": "我将返回特定Gamepedia wiki指定页面的链接:`https://<wiki>.gamepedia.com/`", "unsearchable": true },
-			{ "cmd": "?<wiki> <关键字>", "desc": "我将返回特定Fandom wiki的指定页面的链接:`https://<wiki>.fandom.com/`", "unsearchable": true },
-			{ "cmd": "??<wiki> <关键字>", "desc": "我将返回特定的org域名下的wiki的指定页面的链接:`https://<wiki>.wikia.org/`", "unsearchable": true },
-			{ "cmd": "User:<用户名>", "desc": "我将返回指定用户的信息", "unsearchable": true },
-			{ "cmd": "diff <版本id> [<旧版本id>]", "desc": "我将返回指定差异编号的比较页面链接" },
-			{ "cmd": "diff <页面名>", "desc": "我将返回指定页面最后一次更改的比较页面链接" },
-			{ "cmd": "random", "desc": "我将返回wiki上一个随机页面的链接" },
-			{ "cmd": "🎲", "desc": "我将返回wiki上一个随机页面的链接", "hide": true },
-			{ "cmd": "overview", "desc": "我将返回wiki的相关数据以及统计信息" },
-			{ "cmd": "/<Minecraft命令>", "desc": "我将返回此Minecraft命令的语法和此命令在Minecraft Wiki上的链接。", "unsearchable": true, "minecraft": true },
-			{ "cmd": "command <Minecraft命令>", "desc": "我将返回此Minecraft命令的语法和此命令在Minecraft Wiki上的链接。", "hide": true, "minecraft": true },
-			{ "cmd": "cmd <Minecraft命令>", "desc": "我将返回此Minecraft命令的语法和此命令在Minecraft Wiki上的链接。", "hide": true, "minecraft": true },
-			{ "cmd": "bug <Minecraft漏洞>", "desc": "我将返回此漏洞在Minecraft漏洞追踪器上的链接。", "minecraft": true },
-			{ "cmd": "页面 <页面名>", "desc": "我将返回指定wiki页面的链接", "hide": true },
-			{ "cmd": "page <页面名>", "desc": "我将返回指定wiki页面的链接", "hide": true },
-			{ "cmd": "搜索 <关键字>", "desc": "我将返回wiki搜索结果的链接", "hide": true },
-			{ "cmd": "search <关键字>", "desc": "我将返回wiki搜索结果的链接", "hide": true },
-			{ "cmd": "discussion <关键字>", "desc": "我将返回在相关Fandom wiki中的讨论。", "fandom": true },
-			{ "cmd": "discussion post <关键字>", "desc": "我将返回在相关Fandom wiki中的讨论帖。", "fandom": true },
-			{ "cmd": "info", "desc": "我将进行自我介绍" },
-			{ "cmd": "help", "desc": "我将提供使用帮助" },
-			{ "cmd": "help <指令>", "desc": "我将提供指该令的使用方法" },
-			{ "cmd": "help admin", "desc": "我将提供所有的管理指令" },
-			{ "cmd": "help admin", "desc": "我将提供所有的管理指令", "unsearchable": true, "admin": true },
-			{ "cmd": "settings", "desc": "我将更改设置参数", "admin": true, "pause": true },
-			{ "cmd": "settings lang <语言>", "desc": "我将更改本伺服器的语言。", "hide": true, "admin": true },
-			{ "cmd": "settings prefix <前缀>", "desc": "我将更改本伺服器的命令前缀。", "hide": true, "admin": true, "patreon": true },
-			{ "cmd": "settings inline toggle", "desc": "我将更改本伺服器的行内指令启用情况。", "hide": true, "admin": true },
-			{ "cmd": "settings wiki <wiki>", "desc": "我将更改本伺服器的默认wiki。", "hide": true, "admin": true },
-			{ "cmd": "settings channel", "desc": "我将更改本伺服器的当前频道的覆盖设置。", "hide": true, "admin": true },
-			{ "cmd": "验证 <wiki用户名>", "desc": "使用此命令以验证您的Discord账户和您的wiki账户,并获取您的wiki账户对应的身份组。", "hide": true },
-			{ "cmd": "verify <wiki用户名>", "desc": "使用此命令以验证您的Discord账户和您的wiki账户,并获取您的wiki账户对应的身份组。", "hide": true },
-			{ "cmd": "verification", "desc": "我将更改由 `@prefix验证` 触发的wiki验证方式命令。", "admin": true, "pause": true },
-			{ "cmd": "help verification", "desc": "我将详细解释验证命令如何工作。", "admin": true },
-			{ "cmd": "verification add <身份组>", "desc": "我将添加一个新的验证方式。可用 `|` 来分割多个身份组组。", "hide": true, "admin": true },
-			{ "cmd": "verification <id> channel <新频道>", "desc": "我将更改适用于本验证方式的频道。可用 `|` 来分割多个频道。", "hide": true, "admin": true },
-			{ "cmd": "verification <id> role <新身份组>", "desc": "我将更改此验证方式的身份组。可用 `|` 来分割多个身份组。", "hide": true, "admin": true },
-			{ "cmd": "verification <id> editcount <新编辑数>", "desc": "我将更改验证方式的最小编辑数。", "hide": true, "admin": true },
-			{ "cmd": "verification <id> usergroup <新wiki用户组>", "desc": "我将更改此验证方式的wiki用户组。可用 `|` 来分割多个用户组。\n\t• 以 `AND` 关键词作为开头可限制必须拥有下列全部用户组。", "hide": true, "admin": true },
-			{ "cmd": "verification <id> accountage <新账户注册时长>", "desc": "我将更改此验证方式的最小注册时长(以天为计数)。", "hide": true, "admin": true },
-			{ "cmd": "verification <id> rename", "desc": "在验证时,若需要,我将会将用户的Discord昵称改为wiki用户名。", "hide": true, "admin": true },
-			{ "cmd": "verification <id> delete", "desc": "我将删除此验证方式。", "hide": true, "admin": true },
-			{ "cmd": "voice", "desc": "我将尝试给予每个在这个语音频道的用户一个特定的身份组。", "admin": true, "pause": true },
-			{ "cmd": "pause @mention", "desc": "我将屏蔽少数管理指令外的全部指令", "admin": true },
-			{ "cmd": "pause @mention", "desc": "我将重新接受全部指令", "unsearchable": true, "hide": true, "pause": true },
-			{ "cmd": "test", "desc": "如果我被激活了,我就会回答你!否则不会。", "pause": true }
-		]
+		"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": "我将更改此验证方式的身份组。可用 `|` 来分割多个身份组。"
+				},
+				"editount": {
+					"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": "命令/",
-		"aliases": {
-			"cmd": "command"
-		}
+		"cmdpage": "命令/"
 	}
 }

+ 10 - 1
main.js

@@ -17,7 +17,7 @@ const manager = new ShardingManager( './bot.js', {
 
 var diedShards = 0;
 manager.on( 'shardCreate', shard => {
-	console.log( `\n- Shard[${shard.id}]: Launched` );
+	console.log( `- Shard[${shard.id}]: Launched` );
 	
 	shard.on( 'spawn', message => {
 		console.log( `- Shard[${shard.id}]: Spawned` );
@@ -61,6 +61,11 @@ manager.spawn().then( shards => {
 	manager.respawnAll();
 } );
 
+/**
+ * Post bot statistics to bot lists.
+ * @param {Object} botList - The list of bot lists to post to.
+ * @param {Number} shardCount - The total number of shards.
+ */
 function postStats(botList = JSON.parse(process.env.botlist), shardCount = manager.totalShards) {
 	manager.fetchClientValues('guilds.cache.size').then( results => {
 		var guildCount = results.reduce( (acc, val) => acc + val, 0 );
@@ -91,6 +96,10 @@ function postStats(botList = JSON.parse(process.env.botlist), shardCount = manag
 }
 
 
+/**
+ * End the process gracefully.
+ * @param {String} signal - The signal received.
+ */
 async function graceful(signal) {
 	console.log( '- ' + signal + ': Disabling respawn...' );
 	manager.respawn = false;

+ 8 - 0
util/allSites.js

@@ -1,5 +1,9 @@
 var allSites = getAllSites();
 
+/**
+ * Get all Gamepedia sites.
+ * @returns {Promise<Object[]>}
+ */
 function getAllSites() {
 	return got.get( 'https://help.gamepedia.com/api.php?action=allsites&formatversion=2&do=getSiteStats&filter=wikis|md5_key,wiki_domain,wiki_display_name,wiki_image,wiki_description,wiki_managers,official_wiki,wiki_crossover,created&format=json', {
 		responseType: 'json'
@@ -21,6 +25,10 @@ function getAllSites() {
 	} );
 }
 
+/**
+ * Update the list of all sites.
+ * @returns {Promise<Object[]>}
+ */
 function updateAllSites() {
 	return new Promise( function(resolve, reject) {
 		getAllSites.then( newSites => {

+ 8 - 0
util/database.js

@@ -9,6 +9,10 @@ var db = new sqlite3.Database( './wikibot.db', sqlite3.OPEN_READWRITE | sqlite3.
 	getSettings();
 } );
 
+/**
+ * Fill the patreon list.
+ * @param {Number} [trysettings] - The amount of tries.
+ */
 function getSettings(trysettings = 1) {
 	db.each( 'SELECT guild, prefix FROM discord WHERE patreon IS NOT NULL', [], (dberror, row) => {
 		if ( dberror ) {
@@ -112,6 +116,10 @@ function getSettings(trysettings = 1) {
 	} );
 }
 
+/**
+ * Fill the voice list.
+ * @param {Number} [trysettings] - The amount of tries.
+ */
 function getVoice(trysettings = 1) {
 	db.each( 'SELECT guild, lang FROM discord WHERE voice IS NOT NULL', [], (dberror, row) => {
 		if ( dberror ) {

+ 12 - 0
util/extract_desc.js

@@ -1,3 +1,9 @@
+/**
+ * Get the description for a page.
+ * @param {String} [text] - The full page extract.
+ * @param {String} [fragment] - The section title.
+ * @returns {String[]}
+ */
 function extract_desc(text = '', fragment = '') {
 	var sectionIndex = text.indexOf('\ufffd\ufffd');
 	var extract = ( sectionIndex !== -1 ? text.substring(0, sectionIndex) : text ).trim().escapeFormatting();
@@ -41,6 +47,12 @@ function extract_desc(text = '', fragment = '') {
 	return [extract, sectionHeader, sectionText];
 }
 
+/**
+ * Format section title.
+ * @param {String} title - The section title.
+ * @param {String} n - The header level.
+ * @returns {String}
+ */
 function section_formatting(title, n) {
 	switch ( n ) {
 		case '1':

+ 48 - 1
util/i18n.js

@@ -2,13 +2,47 @@ const {defaultSettings} = require('./default.json');
 var i18n = require('../i18n/allLangs.json');
 Object.keys(i18n.allLangs.names).forEach( lang => i18n[lang] = require('../i18n/' + lang + '.json') );
 
+const defaultAliases = ( i18n?.[defaultSettings.lang]?.aliases || {} );
+
+/**
+ * A langauge.
+ * @class
+ */
 class Lang {
+	/**
+	 * Creates a new language.
+	 * @param {String} [lang] - The language code.
+	 * @param {String} [namespace] - The namespace for the language.
+	 * @constructs Lang
+	 */
 	constructor(lang = defaultSettings.lang, namespace = '') {
 		this.lang = lang;
 		this.namespace = namespace;
-		this.fallback = ( i18n?.[lang]?.fallback || [] );
+		this.fallback = ( i18n?.[lang]?.fallback.slice() || [] );
+
+		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];
+			aliases[cmd].forEach( alias => {
+				if ( !( alias in this.aliases ) ) this.aliases[alias] = cmd;
+			} );
+		} );
+		Object.keys(defaultAliases).forEach( cmd => {
+			if ( !( cmd in this.localNames ) ) this.localNames[cmd] = defaultAliases[cmd][0];
+			defaultAliases[cmd].forEach( alias => {
+				if ( !( alias in this.aliases ) ) this.aliases[alias] = cmd;
+			} );
+		} );
 	}
 
+	/**
+	 * Get a localized message.
+	 * @param {String} message - Name of the message.
+	 * @param {String[]} args - Arguments for the message.
+	 * @returns {String}
+	 */
 	get(message = '', ...args) {
 		if ( this.namespace.length ) message = this.namespace + '.' + message;
 		let keys = ( message.length ? message.split('.') : [] );
@@ -45,6 +79,13 @@ class Lang {
 	}
 }
 
+/**
+ * Parse plural text.
+ * @param {String} lang - The language code.
+ * @param {Number} number - The amount.
+ * @param {String[]} args - The possible text.
+ * @returns {String}
+ */
 function plural(lang, number, args) {
 	var text = args[args.length - 1];
 	switch ( lang ) {
@@ -85,6 +126,12 @@ function plural(lang, number, args) {
 	return text;
 }
 
+/**
+ * Get text option.
+ * @param {String[]} args - The list of options.
+ * @param {Number} index - The preferred option.
+ * @returns {String}
+ */
 function getArg(args, index) {
 	return ( args.length > index ? args[index] : args[args.length - 1] );
 }

+ 13 - 3
util/newMessage.js

@@ -2,7 +2,8 @@ const {Util} = require('discord.js');
 const {limit: {command: commandLimit}, defaultSettings, wikiProjects} = require('./default.json');
 const check_wiki = {
 	fandom: require('../cmds/wiki/fandom.js'),
-	gamepedia: require('../cmds/wiki/gamepedia.js')
+	gamepedia: require('../cmds/wiki/gamepedia.js'),
+	test: require('../cmds/test.js').run
 };
 
 const fs = require('fs');
@@ -19,6 +20,15 @@ fs.readdir( './cmds', (error, files) => {
 	} );
 } );
 
+/**
+ * Processes new messages.
+ * @param {import('discord.js').Message} msg - The Discord message.
+ * @param {import('./i18n.js')} lang - The user language.
+ * @param {String} [wiki] - The default wiki.
+ * @param {String} [prefix] - The prefix for the message.
+ * @param {Boolean} [noInline] - Parse inline commands?
+ * @param {String} [content] - Overwrite for the message content.
+ */
 function newMessage(msg, lang, wiki = defaultSettings.wiki, prefix = process.env.prefix, noInline = null, content = '') {
 	msg.noInline = noInline;
 	var cont = ( content || msg.content );
@@ -27,7 +37,7 @@ function newMessage(msg, lang, wiki = defaultSettings.wiki, prefix = process.env
 	var channel = msg.channel;
 	if ( msg.isOwner() && cont.hasPrefix(prefix) ) {
 		let invoke = cont.substring(prefix.length).split(' ')[0].split('\n')[0].toLowerCase();
-		let aliasInvoke = ( lang.get('aliases')[invoke] || invoke );
+		let aliasInvoke = ( lang.aliases[invoke] || invoke );
 		if ( aliasInvoke in ownercmdmap ) {
 			cont = cont.substring(prefix.length);
 			let args = cont.split(' ').slice(1);
@@ -50,7 +60,7 @@ function newMessage(msg, lang, wiki = defaultSettings.wiki, prefix = process.env
 		line = line.substring(prefix.length);
 		var invoke = line.split(' ')[0].toLowerCase();
 		var args = line.split(' ').slice(1);
-		var aliasInvoke = ( lang.get('aliases')[invoke] || invoke );
+		var aliasInvoke = ( lang.aliases[invoke] || invoke );
 		var ownercmd = ( msg.isOwner() && aliasInvoke in ownercmdmap );
 		var pausecmd = ( msg.isAdmin() && pause[msg.guild.id] && aliasInvoke in pausecmdmap );
 		if ( channel.type === 'text' && pause[msg.guild.id] && !( pausecmd || ownercmd ) ) {