소스 검색

Add help for wiki verification

Markus-Rost 5 년 전
부모
커밋
8a9821ddac
13개의 변경된 파일214개의 추가작업 그리고 66개의 파일을 삭제
  1. 33 5
      README.md
  2. 33 23
      bot.js
  3. 15 4
      i18n/de.json
  4. 13 2
      i18n/en.json
  5. 13 2
      i18n/fr.json
  6. 15 4
      i18n/nl.json
  7. 15 4
      i18n/pl.json
  8. 15 4
      i18n/pt.json
  9. 14 3
      i18n/ru.json
  10. 15 4
      i18n/tr.json
  11. 17 6
      i18n/zh.json
  12. 15 4
      main.js
  13. 1 1
      package.json

+ 33 - 5
README.md

@@ -6,15 +6,21 @@
 
 **Wiki-Bot is not affiliated with Fandom and is an unofficial tool!**
 
-[Use this link to invite **Wiki-Bot** to your Discord server.](https://discord.com/oauth2/authorize?client_id=461189216198590464&permissions=268815424&scope=bot)
+[Use this link to invite **Wiki-Bot** to your Discord server.](https://discord.com/oauth2/authorize?client_id=461189216198590464&permissions=403033152&scope=bot)
 
 Support server: [https://discord.gg/v77RTk5](https://discord.gg/v77RTk5)
 
+#### Table of Contents
+* [Commands](#commands)
+  * [Admin](#admin)
+* [User Verification](#user-verification)
+* [Voice Channel](#voice-channel)
+
 ## Commands
 For a full list with all commands use `!wiki help`
 
 | Command | Description |
-| --- | --- |
+| ------- | ----------- |
 | `!wiki <search term>` | **Wiki-Bot** will answer with a link to a matching article in the wiki. |
 | `!wiki !<wiki> <search term>` | **Wiki-Bot** will answer with a link to a matching article in the named Gamepedia wiki: `https://<wiki>.gamepedia.com/` |
 | `!wiki ?<wiki> <search term>` | **Wiki-Bot** will answer with a link to a matching article in the named Fandom wiki: `https://<wiki>.fandom.com/` |
@@ -38,14 +44,36 @@ If you got an unwanted response, you can react with 🗑️ to his message and *
 For a full list with all administrator commands use `!wiki help admin`
 
 | Command | Description |
-| --- | --- |
+| ------- | ----------- |
 | `!wiki help admin` | **Wiki-Bot** will list all administrator commands. |
 | `!wiki settings` | **Wiki-Bot** will change the settings for the server. |
 | `!wiki settings lang <language>` | **Wiki-Bot** will change the language for the server. |
 | `!wiki settings wiki <wiki>` | **Wiki-Bot** will change the default wiki for the server. |
 | `!wiki settings channel` | **Wiki-Bot** will change the channel overwrites for the current channel. |
+| `!wiki verification` | **Wiki-Bot** will change the wiki verifications used by the `!wiki verify` command. |
+| `!wiki verification add <role>` | **Wiki-Bot** will add a new wiki verification. Accepts a `\|` separated list. |
+| `!wiki verification <id> channel <new channel>` | **Wiki-Bot** will change the channel for the wiki verification. Accepts a `\|` separated list. |
+| `!wiki verification <id> role <new role>` | **Wiki-Bot** will change the role for the wiki verification. Accepts a `\|` separated list. |
+| `!wiki verification <id> editcount <new edit count>` | **Wiki-Bot** will change the minimal edit count for the wiki verification. |
+| `!wiki verification <id> usergroup <new user group>` | **Wiki-Bot** will change the user group for the wiki verification. Accepts a `\|` separated list.<br>• Provide `AND` as the first list entry to make all provided user groups required. |
+| `!wiki verification <id> accountage <new account age>` | **Wiki-Bot** will change the minimal account age (in days) for the wiki verification. |
+| `!wiki verification <id> rename` | **Wiki-Bot** will change if the users Discord nickname should be changed to their wiki username for the wiki verification. |
 | `!wiki voice` | **Wiki-Bot** will try to give everyone in a voice channel a specific role. |
 | `!wiki pause @Wiki-Bot` | **Wiki-Bot** will ignore all commands on this server, except a few admin commands. |
 
-## Voice channel
-**Wiki-Bot** is able to give everyone in a voice channel a specific role. Use `!wiki voice` to get the format for the role name.
+## User Verification
+Using the `!wiki verify <wiki username>` command, users are able to verify themselves as a specific wiki user by using the Discord field on their wiki profile. If the user matches and user verifications are set up on the server, **Wiki-Bot** will give them the roles for all verification entries they matched.
+
+Using the `!wiki verification` command, admins can add up to 10 verification entries on a server. Every verification entry allows for multiple restrictions on when a user should match the verification.
+- Channel to use the `!wiki verify` command in.
+- Role to get when matching the verification entry.
+- Required edit count on the wiki to match the verification entry.
+- Required user group to be a member of on the wiki to match the verification entry.
+- Required account age in days to match the verification entry.
+- Whether the Discord users nickname should be set to their wiki username when they match the verification entry.
+
+See the [admin commands](#admin) or `!wiki help verification` on how to change the wiki verification entries on the server.
+
+## Voice Channel
+**Wiki-Bot** is able to give everyone in a voice channel a specific role. This allows for the creation of channels only visible or writable when in a specific voice channel.
+<br>Use `!wiki voice` to get the format for the role name.

+ 33 - 23
bot.js

@@ -226,6 +226,7 @@ function getAllSites() {
 }
 
 client.on( 'ready', () => {
+	client.ready = true;
 	console.log( '\n- ' + shardId + ': Successfully logged in as ' + client.user.username + '!\n' );
 	getSettings();
 	getAllSites();
@@ -260,6 +261,7 @@ client.on( 'ready', () => {
 		} );
 	}, 10800000 ).unref();
 } );
+client.on( 'shardDisconnect', () => client.ready = false );
 	
 	
 var cmdmap = {
@@ -682,7 +684,8 @@ function cmd_help(lang, msg, args, line, wiki) {
 	var cmds = lang.help.list;
 	var isMinecraft = ( wiki === minecraft[lang.lang].link );
 	var isPatreon = ( msg.channel.type === 'text' && msg.guild.id in patreons );
-	var cmdintro = '🔹 `' + ( msg.channel.type === 'text' && patreons[msg.guild.id] || process.env.prefix ) + ' ';
+	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 ) ) cmd_helpserver(lang, msg);
@@ -690,8 +693,8 @@ function cmd_help(lang, msg, args, line, wiki) {
 		else if ( args[0].toLowerCase() === 'admin' ) {
 			if ( msg.channel.type !== 'text' || msg.isAdmin() ) {
 				var cmdlist = lang.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 : client.user.username ) );
-				msg.sendChannel( cmdlist, {split:true} );
+				cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : client.user.username ) ).replaceSave( /@prefix/g, prefix );
+				msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}} );
 			}
 			else {
 				msg.replyMsg( lang.help.noadmin );
@@ -699,25 +702,25 @@ function cmd_help(lang, msg, args, line, wiki) {
 		}
 		else if ( args[0].toLowerCase() === 'minecraft' ) {
 			var cmdlist = '<' + minecraft[lang.lang].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 : client.user.username ) );
-			msg.sendChannel( cmdlist, {split:true} );
+			cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : client.user.username ) ).replaceSave( /@prefix/g, prefix );
+			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 : client.user.username ) );
+			cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : client.user.username ) ).replaceSave( /@prefix/g, prefix );
 			if ( cmdlist === '' ) msg.reactEmoji('❓');
-			else msg.sendChannel( cmdlist, {split:true} );
+			else msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}} );
 		}
 	}
 	else if ( msg.isAdmin() && pause[msg.guild.id] ) {
 		var cmdlist = lang.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 : client.user.username ) );
-		msg.sendChannel( cmdlist, {split:true}, true );
+		cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : client.user.username ) ).replaceSave( /@prefix/g, prefix );
+		msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}}, true );
 	}
 	else {
-		var cmdlist = lang.help.all + '\n' + cmds.filter( cmd => !cmd.hide && !cmd.admin && ( !cmd.patreon || isPatreon ) && !( cmd.inline && msg.noInline ) && ( !cmd.minecraft || isMinecraft ) ).map( cmd => ( cmd.inline ? '🔹 `' : cmdintro ) + cmd.cmd + '`\n\t' + cmd.desc ).join('\n') + '\n\n🔸 ' + lang.help.footer;
-		cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : client.user.username ) );
-		msg.sendChannel( cmdlist, {split:true} );
+		var cmdlist = lang.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.help.footer;
+		cmdlist = cmdlist.replaceSave( /@mention/g, '@' + ( msg.channel.type === 'text' ? msg.guild.me.displayName : client.user.username ) ).replaceSave( /@prefix/g, prefix );
+		msg.sendChannel( cmdlist, {split:{char:'🔹',prepend:'🔹'}} );
 	}
 }
 
@@ -789,6 +792,14 @@ function cmd_test(lang, msg, args, line, wiki) {
 				}
 				embed.addField( wiki, ping );
 			} ).finally( () => {
+				if ( msg.isOwner() ) return client.shard.fetchClientValues('ready').then( values => {
+					return '```java\n' + values.map( (ready, id) => id + ': ' + ready ).join('\n') + '\n```';
+				}, error => {
+					return '```js\n' + error.name + ': ' + error.message + '\n```';
+				} ).then( shards => {
+					embed.addField( 'Shards', shards );
+					message.edit( message.content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
+				} );
 				message.edit( message.content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 			} );
 		} );
@@ -1982,7 +1993,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 			if ( rows.length ) text += lang.verification.current + rows.map( row => formatVerification(false, true, row) ).join('');
 			else text += lang.verification.missing;
 			text += '\n\n' + lang.verification.add_more + '\n`' + prefix + ' verification add ' + lang.verification.new_role + '`';
-			return msg.replyMsg( text, {split:true}, true );
+			return msg.sendChannel( '<@' + msg.author.id + '>, ' + text, {split:true}, true );
 		}
 		var row = rows.find( row => row.configid.toString() === args[0] );
 		if ( args[1] === 'delete' && !args.slice(2).join('') ) {
@@ -2009,7 +2020,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 				}
 				console.log( '- Verification successfully updated.' );
 				row.rename = ( row.rename ? 0 : 1 );
-				msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
+				msg.sendChannel( '<@' + msg.author.id + '>, ' + lang.verification.updated + formatVerification(), {split:true}, true );
 			} );
 		}
 		if ( args[2] ) {
@@ -2033,7 +2044,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 					}
 					console.log( '- Verification successfully updated.' );
 					row.channel = '|' + channels + '|';
-					msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
+					msg.sendChannel( '<@' + msg.author.id + '>, ' + lang.verification.updated + formatVerification(), {split:true}, true );
 				} );
 			}
 			if ( args[1] === 'role' ) {
@@ -2056,7 +2067,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 					}
 					console.log( '- Verification successfully updated.' );
 					row.role = roles;
-					msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
+					msg.sendChannel( '<@' + msg.author.id + '>, ' + lang.verification.updated + formatVerification(), {split:true}, true );
 				} );
 			}
 			if ( ( args[1] === 'editcount' || args[1] === 'accountage' ) && /^\d+$/.test(args[2]) ) {
@@ -2070,7 +2081,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 					}
 					console.log( '- Verification successfully updated.' );
 					row[args[1]] = args[2];
-					msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
+					msg.sendChannel( '<@' + msg.author.id + '>, ' + lang.verification.updated + formatVerification(), {split:true}, true );
 				} );
 			}
 			if ( args[1] === 'usergroup' ) {
@@ -2100,6 +2111,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 					usergroups = usergroups.map( usergroup => {
 						if ( groups.some( group => group.name === usergroup ) ) return usergroup;
 						if ( groups.some( group => group.content === usergroup ) ) return groups.find( group => group.content === usergroup ).name;
+						if ( /^admins?$/.test(usergroup) ) return 'sysop'
 						return usergroup;
 					} );
 				}, error => {
@@ -2114,14 +2126,14 @@ function cmd_verification(lang, msg, args, line, wiki) {
 						}
 						console.log( '- Verification successfully updated.' );
 						row.usergroup = and_or + usergroups;
-						msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
+						msg.sendChannel( '<@' + msg.author.id + '>, ' + lang.verification.updated + formatVerification(), {split:true}, true );
 						
 						if ( reaction ) reaction.removeEmoji();
 					} );
 				} ) );
 			}
 		}
-		return msg.replyMsg( lang.verification.current_selected.replace( '%1', row.configid ) + formatVerification(true) +'\n\n' + lang.verification.delete_current + '\n`' + prefix + ' verification ' + row.configid + ' delete`', {split:true}, true );
+		return msg.sendChannel( '<@' + msg.author.id + '>, ' + lang.verification.current_selected.replace( '%1', row.configid ) + formatVerification(true) +'\n\n' + lang.verification.delete_current + '\n`' + prefix + ' verification ' + row.configid + ' delete`', {split:true}, true );
 		
 		function formatVerification(showCommands, hideNotice, {
 			configid,
@@ -2187,11 +2199,9 @@ function cmd_verify(lang, msg, args, line, wiki) {
 		if ( !rows.length ) return msg.replyMsg( lang.verify.missing );
 		
 		if ( !username.trim() ) {
-			/*
 			args[0] = line.split(' ')[1];
+			if ( args[0] === 'verification' ) args[0] = 'verify';
 			return cmd_help(lang, msg, args, line);
-			*/
-			return msg.sendChannel( '🔹 `' + ( patreons[msg.guild.id] || process.env.prefix ) + ' verify <wiki_username>`\n\tUse this command to verify your Discord account with your wiki account and get roles matching your wiki account.' );
 		}
 		var embed = new Discord.MessageEmbed().setFooter( lang.verify.footer + ' • ' + new Date().toLocaleString(lang.dateformat, timeoptions) ).setTimestamp();
 		msg.reactEmoji('⏳').then( reaction => got.get( wiki + 'api.php?action=query&meta=siteinfo&siprop=general&list=users&usprop=blockinfo|groups|groupmemberships|editcount|registration&ususers=' + encodeURIComponent( username ) + '&format=json', {
@@ -2425,7 +2435,7 @@ function cmd_verify(lang, msg, args, line, wiki) {
 				embed.addField( lang.verify.discord, msg.author.tag.escapeFormatting(), true ).addField( lang.verify.wiki, ( discordname || lang.verify.empty ), true );
 				if ( msg.author.tag.escapeFormatting() !== discordname ) {
 					embed.setColor('#FFFF00').setDescription( lang.verify.user_failed.replaceSave( '%1$s', msg.member.toString() ).replaceSave( '%2$s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ) );
-					embed.addField( lang.verify.notice, lang.verify.help_subpage.replaceSave( '%s', '***`' + msg.author.tag + '`***' ) + '\n' + wiki.toLink('Special:MyPage/Discord', 'action=edit', '', body.query.general) );
+					embed.addField( lang.verify.notice, lang.verify.help_subpage.replaceSave( '%s', '**`' + msg.author.tag + '`**' ) + '\n' + wiki.toLink('Special:MyPage/Discord', 'action=edit', '', body.query.general) );
 					msg.replyMsg( lang.verify.user_failed_reply.replaceSave( '%s', username.escapeFormatting() ), {embed}, false, false );
 					
 					if ( reaction ) reaction.removeEmoji();

+ 15 - 4
i18n/de.json

@@ -345,10 +345,10 @@
 			{ "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." },
-			{ "cmd": "discussion <Suchbegriff>", "desc": "Ich antworte mit einem Link auf ein passendes Diskussionsthema im Fandom-Wiki.", "hide": true },
-			{ "cmd": "diskussion post <Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Diskussionsbeitrag im Fandom-Wiki." },
-			{ "cmd": "discussion post <Suchbegriff>", "desc": "Ich antworte mit einem Link auf einen passenden Diskussionsbeitrag im Fandom-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." },
@@ -363,6 +363,17 @@
 			{ "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 `@prefix verify`-Befehl genutzt werden.", "admin": true, "pause": true },
+			{ "cmd": "help verification", "desc": "Ich erkläre genauer wie der Verifizierungs-Befehl funktioniert.", "unsearchable": 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 },

+ 13 - 2
i18n/en.json

@@ -333,8 +333,8 @@
 			{ "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." },
-			{ "cmd": "discussion post <search term>", "desc": "I will answer with a link to a matching discussion post in the Fandom wiki." },
+			{ "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!" },
@@ -346,6 +346,17 @@
 			{ "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 `@prefix verify` 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 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": "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 },

+ 13 - 2
i18n/fr.json

@@ -360,8 +360,8 @@
 			{ "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." },
-			{ "cmd": "discussion post <terme de recherche>", "desc": "Je répondrais avec un lien vers un message de discussion correspondant sur le wiki Fandom." },
+			{ "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 !" },
@@ -376,6 +376,17 @@
 			{ "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 `@prefix verify` 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 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 },

+ 15 - 4
i18n/nl.json

@@ -342,10 +342,10 @@
 			{ "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." },
-			{ "cmd": "discussion <zoek term>", "desc": "Ik zal antwoorden met een link naar een overeenkomende discussie sectie op de Fandom wiki.", "hide": true },
-			{ "cmd": "discussie bericht <zoek term>", "desc": "Ik zal antwoorden met een link naar een overeenkomend discussie bericht op de Fandom wiki." },
-			{ "cmd": "discussion post <zoek term>", "desc": "Ik zal antwoorden met een link naar een overeenkomend discussie bericht op de Fandom 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!" },
@@ -357,6 +357,17 @@
 			{ "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 `@prefix verify` 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 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 },

+ 15 - 4
i18n/pl.json

@@ -368,10 +368,10 @@
 			{ "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." },
-			{ "cmd": "discussion <wyszukiwana fraza>", "desc": "Odpowiem linkiem do odpowiadającego wątku dyskusji na Fandomowej wiki.", "hide": true },
-			{ "cmd": "dyskusja post <wyszukiwana fraza>", "desc": "Odpowiem linkiem do odpowiadającego postu na Fandomowej wiki." },
-			{ "cmd": "discussion post <wyszukiwana fraza>", "desc": "Odpowiem linkiem do odpowiadającego postu na Fandomowej 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!" },
@@ -386,6 +386,17 @@
 			{ "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 <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 `@prefix verify` 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 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": "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 },

+ 15 - 4
i18n/pt.json

@@ -342,10 +342,10 @@
 			{ "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." },
-			{ "cmd": "discussion <search term>", "desc": "Vou responder com um link para um tópico de discussão correspondente na wiki da Fandom.", "hide": 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." },
-			{ "cmd": "discussion post <search term>", "desc": "Vou responder com um link para um post de discussão correspondente na wiki da Fandom.", "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ê!" },
@@ -360,6 +360,17 @@
 			{ "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 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 `@prefix verify` 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 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": "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 },

+ 14 - 3
i18n/ru.json

@@ -337,9 +337,9 @@
 			{ "cmd": "page <название страницы>", "desc": "Я отвечу с прямой ссылкой на статью в вики.", "hide": true },
 			{ "cmd": "поиск <поисковый запрос>", "desc": "Я отвечу с прямой ссылкой на страницу поиска статьи в вики.", "hide": true },
 			{ "cmd": "search <поисковый запрос>", "desc": "Я отвечу с прямой ссылкой на страницу поиска статьи в вики.", "hide": true },
-			{ "cmd": "discussion <поисковый запрос>", "desc": "Я отвечу со ссылкой на соответствующую ветку обсуждения в Fandom вики." },
-			{ "cmd": "discussion пост <поисковый запрос>", "desc": "Я отвечу со ссылкой на соответствующий пост обсуждения в Fandom вики." },
-			{ "cmd": "discussion post <поисковый запрос>", "desc": "Я отвечу со ссылкой на соответствующий пост обсуждения в Fandom вики.", "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": "Интересно, как работает команда? Позвольте мне объяснить это вам!" },
@@ -351,6 +351,17 @@
 			{ "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 `@prefix verify` 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 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 },

+ 15 - 4
i18n/tr.json

@@ -336,10 +336,10 @@
 			{ "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." },
-			{ "cmd": "discussion <arama terimi>", "desc": "Fandom Wikideki eşleşen tartışma konusunun bağlantısıyla cevap vereceğim.", "hide": 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." },
-			{ "cmd": "discussion post <arama terimi>", "desc": "Fandom Wikideki eşleşen tartışma gönderisinin bağlantısıyla 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." },
@@ -355,6 +355,17 @@
 			{ "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 `@prefix verify` 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 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 },

+ 17 - 6
i18n/zh.json

@@ -96,11 +96,11 @@
 		"and": "和",
 		"accountage": "注册时长:",
 		"indays": "(以日计算)",
-		"rename": "改昵称:",
+		"rename": "改昵称:",
 		"enabled": "已启用",
 		"disabled": "已禁用",
 		"toggle": "(开关)",
-		"rename_no_permission": "**%s 缺少 `管理昵称` 权限来将昵称更改为wiki用户名!**",
+		"rename_no_permission": "**%s缺少 `管理昵称` 权限来强制更改为wiki用户名!**",
 		"role_too_high": "**%1$s 身份组的权重无法使 %2$s 添加!**",
 		"channel_max": "提供的频道过多。",
 		"channel_missing": "提供的频道不存在。",
@@ -139,7 +139,7 @@
 		"user_matches_reply": "您的Discord用户名和wiki用户“%s”对应,但您没有达到添加任何身份组的条件。",
 		"user_verified": "Discord用户 %1$s 已成功验证为wiki用户 %2$s。",
 		"user_verified_reply": "您已被成功验证为wiki用户“%s”",
-		"user_renamed": "他们的Discord昵称已被更改为他们的wiki用户名。",
+		"user_renamed": "用户的Discord昵称已被更改为其wiki用户名",
 		"discord": "Discord用户:",
 		"wiki": "Wiki用户:",
 		"empty": "*空白*",
@@ -149,7 +149,7 @@
 		"help_guide": "请根据[此指导](%s)来添加您的Discord用户名至您的wiki资料页。",
 		"help_gamepedia": "https://help.gamepedia.com/Discord",
 		"help_fandom": "https://community.fandom.com/zh/wiki/Special:VerifyUser",
-		"help_subpage": "Please add your Discord tag (%s) to your Discord subpage on the wiki:"
+		"help_subpage": "请将您的Discord用户名(%s)添加至您在wiki上的Discord子页面:"
 	},
 	"overview": {
 		"inaccurate": "统计信息可能出错",
@@ -333,8 +333,8 @@
 			{ "cmd": "page <页面名>", "desc": "我将返回指定wiki页面的链接", "hide": true },
 			{ "cmd": "搜索 <关键字>", "desc": "我将返回wiki搜索结果的链接", "hide": true },
 			{ "cmd": "search <关键字>", "desc": "我将返回wiki搜索结果的链接", "hide": true },
-			{ "cmd": "discussion <关键字>", "desc": "我将返回在相关Fandom wiki中的讨论。" },
-			{ "cmd": "discussion post <关键字>", "desc": "我将返回在相关Fandom wiki中的讨论帖。" },
+			{ "cmd": "discussion <关键字>", "desc": "我将返回在相关Fandom wiki中的讨论。", "fandom": true },
+			{ "cmd": "discussion post <关键字>", "desc": "我将返回在相关Fandom wiki中的讨论帖。", "fandom": true },
 			{ "cmd": "info", "desc": "我将进行自我介绍" },
 			{ "cmd": "help", "desc": "我将提供使用帮助" },
 			{ "cmd": "help <指令>", "desc": "我将提供指该令的使用方法" },
@@ -346,6 +346,17 @@
 			{ "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": "verify <wiki用户名>", "desc": "使用此命令以验证您的Discord账户和您的wiki账户,并获取您的wiki账户对应的身份组。", "hide": true },
+			{ "cmd": "verification", "desc": "我将更改由 `@prefix verify` 触发的wiki验证方式命令。", "admin": true, "pause": true },
+			{ "cmd": "help verification", "desc": "我将详细解释验证命令如何工作。", "unsearchable": true, "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": "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": "我将删除此验证方式。", "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 },

+ 15 - 4
main.js

@@ -6,6 +6,7 @@ const manager = new ShardingManager( './bot.js', {
 	token: process.env.token
 } );
 
+var diedShards = 0;
 manager.on( 'shardCreate', shard => {
 	console.log( `\n- Shard[${shard.id}]: Launched` );
 	
@@ -27,13 +28,19 @@ manager.on( 'shardCreate', shard => {
 	
 	shard.on( 'death', message => {
 		if ( message.exitCode === 1 ) {
-			console.log( `\n\n- Shard[${shard.id}]: Died due to fatal error, disable respawn!\n\n` );
-			manager.respawn = false;
+			if ( manager.respawn === true ) {
+				console.log( `\n\n- Shard[${shard.id}]: Died due to fatal error, disable respawn!\n\n` );
+				manager.respawn = false;
+			}
+			else diedShards++;
 		}
 	} );
 } );
 
-manager.spawn().catch( error => console.error( '- ' + error.name + ': ' + error.message ) );
+manager.spawn().catch( error => {
+	console.error( '- ' + error.name + ': ' + error.message );
+	manager.respawnAll();
+} );
 
 async function graceful(signal) {
 	console.log( '- ' + signal + ': Disabling respawn...' );
@@ -41,4 +48,8 @@ async function graceful(signal) {
 }
 
 process.once( 'SIGINT', graceful );
-process.once( 'SIGTERM', graceful );
+process.once( 'SIGTERM', graceful );
+
+process.on( 'exit', code => {
+	if ( diedShards >= manager.totalShards ) process.exit(1);
+} );

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "discord-wiki-bot",
-  "version": "2.0.0",
+  "version": "2.1.0",
   "description": "Wiki-Bot is a bot for Discord with the purpose to easily link to Gamepedia and Fandom wikis. He resolves redirects and follows interwiki links.",
   "main": "main.js",
   "scripts": {