浏览代码

make verification translateable

Markus-Rost 5 年之前
父节点
当前提交
c562aa45f7
共有 10 个文件被更改,包括 726 次插入137 次删除
  1. 67 0
      i18n/de.json
  2. 67 0
      i18n/en.json
  3. 67 0
      i18n/fr.json
  4. 67 0
      i18n/nl.json
  5. 67 0
      i18n/pl.json
  6. 67 0
      i18n/pt.json
  7. 67 0
      i18n/ru.json
  8. 67 0
      i18n/tr.json
  9. 67 0
      i18n/zh.json
  10. 123 137
      main.js

+ 67 - 0
i18n/de.json

@@ -79,6 +79,73 @@
 		"join": "%1$s hat den Sprachkanal \"%2$s\" betreten.",
 		"join": "%1$s hat den Sprachkanal \"%2$s\" betreten.",
 		"left": "%1$s hat den Sprachkanal \"%2$s\" verlassen."
 		"left": "%1$s hat den Sprachkanal \"%2$s\" verlassen."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "Statistiken können ungenau sein",
 		"inaccurate": "Statistiken können ungenau sein",
 		"name": "Vollständiger Name:",
 		"name": "Vollständiger Name:",

+ 67 - 0
i18n/en.json

@@ -74,6 +74,73 @@
 		"join": "%1$s joined the voice channel \"%2$s\".",
 		"join": "%1$s joined the voice channel \"%2$s\".",
 		"left": "%1$s left the voice channel \"%2$s\"."
 		"left": "%1$s left the voice channel \"%2$s\"."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "Statistics may be inaccurate",
 		"inaccurate": "Statistics may be inaccurate",
 		"name": "Full name:",
 		"name": "Full name:",

+ 67 - 0
i18n/fr.json

@@ -76,6 +76,73 @@
 		"join": "%1$s a rejoint le salon vocal \"%2$s\".",
 		"join": "%1$s a rejoint le salon vocal \"%2$s\".",
 		"left": "%1$s a quitté le salon vocal \"%2$s\"."
 		"left": "%1$s a quitté le salon vocal \"%2$s\"."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "Les statistiques peuvent être inexactes",
 		"inaccurate": "Les statistiques peuvent être inexactes",
 		"name": "Nom complet :",
 		"name": "Nom complet :",

+ 67 - 0
i18n/nl.json

@@ -78,6 +78,73 @@
 		"join": "%1$s kwam het spraakkanaal \"%2$s\" binnen.",
 		"join": "%1$s kwam het spraakkanaal \"%2$s\" binnen.",
 		"left": "%1$s verlaatte het spraakkanaal \"%2$s\"."
 		"left": "%1$s verlaatte het spraakkanaal \"%2$s\"."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "Statistieken zijn mogelijk inaccuraat",
 		"inaccurate": "Statistieken zijn mogelijk inaccuraat",
 		"name": "Volledige naam:",
 		"name": "Volledige naam:",

+ 67 - 0
i18n/pl.json

@@ -77,6 +77,73 @@
 		"join": "%1$s dołączył do \"%2$s\".",
 		"join": "%1$s dołączył do \"%2$s\".",
 		"left": "%1$s wyszedł z \"%2$s\"."
 		"left": "%1$s wyszedł z \"%2$s\"."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "Statystuki mogą być niedokładne",
 		"inaccurate": "Statystuki mogą być niedokładne",
 		"name": "Pełna nazwa:",
 		"name": "Pełna nazwa:",

+ 67 - 0
i18n/pt.json

@@ -79,6 +79,73 @@
 		"join": "%1$s juntou-se ao canal de voz \"%2$s\".",
 		"join": "%1$s juntou-se ao canal de voz \"%2$s\".",
 		"left": "%1$s deixou o canal de voz \"%2$s\"."
 		"left": "%1$s deixou o canal de voz \"%2$s\"."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "Estatísticas podem ser imprecisas",
 		"inaccurate": "Estatísticas podem ser imprecisas",
 		"name": "Nome completo:",
 		"name": "Nome completo:",

+ 67 - 0
i18n/ru.json

@@ -76,6 +76,73 @@
 		"join": "%1$s подключился к голосовому каналу \"%2$s\".",
 		"join": "%1$s подключился к голосовому каналу \"%2$s\".",
 		"left": "%1$s покинул голосовой канал \"%2$s\"."
 		"left": "%1$s покинул голосовой канал \"%2$s\"."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "Статистика может быть неточной ",
 		"inaccurate": "Статистика может быть неточной ",
 		"name": "Полное название:",
 		"name": "Полное название:",

+ 67 - 0
i18n/tr.json

@@ -78,6 +78,73 @@
 		"join": "%1$s ses kanalına katıldı \"%2$s\".",
 		"join": "%1$s ses kanalına katıldı \"%2$s\".",
 		"left": "%1$s ses kanalından ayrıldı \"%2$s\"."
 		"left": "%1$s ses kanalından ayrıldı \"%2$s\"."
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "İstatistikler yanlış olabilir",
 		"inaccurate": "İstatistikler yanlış olabilir",
 		"name": "Tam isim:",
 		"name": "Tam isim:",

+ 67 - 0
i18n/zh.json

@@ -76,6 +76,73 @@
 		"join": "%1$s 加入了语音频道“%2$s”。",
 		"join": "%1$s 加入了语音频道“%2$s”。",
 		"left": "%1$s 离开了语音频道“%2$s”。"
 		"left": "%1$s 离开了语音频道“%2$s”。"
 	},
 	},
+	"verification": {
+		"save_failed": "sadly the verification couldn't be saved, please try again later.",
+		"added": "the verification has been added:",
+		"updated": "the verification has been updated:",
+		"deleted": "the verification has been deleted.",
+		"max_entries": "you already reached the maximal amount of verifications.",
+		"no_role": "please provide a role for the new verification.",
+		"current": "these are the current verifications for this server:",
+		"current_selected": "this is the verification `%s` for this server:",
+		"missing": "there are no verifications for this server yet.",
+		"add_more": "Add more verifications:",
+		"delete_current": "Delete this verification:",
+		"channel": "Channel:",
+		"role": "Role:",
+		"editcount": "Edit count:",
+		"usergroup": "User group:",
+		"or": "or",
+		"and": "and",
+		"accountage": "Account age:",
+		"indays": "(in days)",
+		"role_too_high": "**The role %1$s is too high for %2$s to assign!**",
+		"channel_max": "too many channels provided.",
+		"channel_missing": "the provided channel does not exist.",
+		"role_max": "too many roles provided.",
+		"role_missing": "the provided role does not exist.",
+		"role_managed": "the provided role can't be assigned.",
+		"value_too_high": "the provided value is too high.",
+		"usergroup_max": "too many user groups provided.",
+		"usergroup_too_long": "the provided user group is too long.",
+		"new_channel": "<new channel>",
+		"new_role": "<new role>",
+		"new_editcount": "<new edit count>",
+		"new_usergroup": "<new user group>",
+		"new_accountage": "<new account age>"
+	},
+	"verify": {
+		"error": "The verification failed due to an error.",
+		"error_reply": "the verification failed due to an error, please try again.",
+		"missing": "there are no verifications set up for this channel.",
+		"footer": "Wiki Account Verification",
+		"failed_gblock": "**Check for global block failed!**",
+		"failed_roles": "**Adding roles failed!**",
+		"audit_reason": "Verified as \"%s\"",
+		"user_missing": "The wiki user \"%s\" doesn't exist.",
+		"user_missing_reply": "your linked wiki user \"%s\" doesn't exist.",
+		"user_blocked": "**The wiki user %s is blocked!**",
+		"user_blocked_reply": "your linked wiki user **\"%s\" is blocked!**",
+		"user_gblocked": "**The wiki user %s is globally blocked!**",
+		"user_gblocked_reply": "your linked wiki user **\"%s\" is globally blocked!**",
+		"user_disabled": "**The wiki user %s is disabled!**",
+		"user_disabled_reply": "your linked wiki user **\"%s\" is disabled!**",
+		"user_failed": "Discord user %1$s doesn't match the wiki user %2$s.",
+		"user_failed_reply": "your Discord tag doesn't match the wiki user \"%s\".",
+		"user_matches": "Discord user %1$s matches the wiki user %2$s, but doesn't meet the requirements for any roles.",
+		"user_matches_reply": "your Discord tag matches the wiki user \"%s\", but you don't meet the requirements for any roles.",
+		"user_verified": "Discord user %1$s has been successfully verified as wiki user %2$s.",
+		"user_verified_reply": "you have been successfully verified as wiki user \"%s\".",
+		"discord": "Discord user:",
+		"wiki": "Wiki user:",
+		"empty": "*empty*",
+		"notice": "Notice:",
+		"qualified": "Qualified for:",
+		"qualified_error": "Qualified for, but could not add:",
+		"help_guide": "Follow [this guide](%s) to add your Discord tag to your wiki profile.",
+		"help_gamepedia": "https://help.gamepedia.com/Discord",
+		"help_fandom": "https://community.fandom.com/wiki/Special:VerifyUser"
+	},
 	"overview": {
 	"overview": {
 		"inaccurate": "统计信息可能出错",
 		"inaccurate": "统计信息可能出错",
 		"name": "全名:",
 		"name": "全名:",

+ 123 - 137
main.js

@@ -1922,9 +1922,9 @@ function fandom_search(lang, msg, searchterm, wiki, query, reaction, spoiler) {
 }
 }
 
 
 function cmd_verification(lang, msg, args, line, wiki) {
 function cmd_verification(lang, msg, args, line, wiki) {
-	if ( msg.channel.type !== 'text' ) return cmd_link(lang, msg, line.split(' ').slice(1).join(' '), wiki);
 	if ( !msg.isAdmin() ) {
 	if ( !msg.isAdmin() ) {
-		if ( !pause[msg.guild.id] ) cmd_verify(lang, msg, args, line, wiki);
+		if ( msg.channel.type === 'text' && !pause[msg.guild.id] ) cmd_verify(lang, msg, args, line, wiki);
+		else msg.reactEmoji('❌');
 		return;
 		return;
 	}
 	}
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
@@ -1942,17 +1942,18 @@ function cmd_verification(lang, msg, args, line, wiki) {
 		var prefix = ( patreons[msg.guild.id] || process.env.prefix );
 		var prefix = ( patreons[msg.guild.id] || process.env.prefix );
 		if ( args[0] === 'add' ) {
 		if ( args[0] === 'add' ) {
 			var limit = ( msg.guild.id in patreons ? 15 : 10 );
 			var limit = ( msg.guild.id in patreons ? 15 : 10 );
-			if ( rows.length >= limit ) return msg.replyMsg( 'you already reached the maximal amount of verifications.', {}, true );
+			if ( rows.length >= limit ) return msg.replyMsg( lang.verification.max_entries, {}, true );
 			var roles = args.slice(1).join(' ').split('|').map( role => role.replace( /^\s*<?\s*(.*?)\s*>?\s*$/, '$1' ) ).filter( role => role.length );
 			var roles = args.slice(1).join(' ').split('|').map( role => role.replace( /^\s*<?\s*(.*?)\s*>?\s*$/, '$1' ) ).filter( role => role.length );
-			if ( !roles.length ) return msg.replyMsg( 'please provide a role for the new verification.\n`' + prefix + ' verification add <new role>`', {}, true );
-			if ( roles.length > 10 ) return msg.replyMsg( 'too many roles provided.', {}, true );
+			if ( !roles.length ) return msg.replyMsg( lang.verification.no_role + '\n`' + prefix + ' verification add' + lang.verification.new_role + '`', {}, true );
+			if ( roles.length > 10 ) return msg.replyMsg( lang.verification.role_max, {}, true );
 			roles = roles.map( role => {
 			roles = roles.map( role => {
 				var new_role = '';
 				var new_role = '';
 				if ( /^\d+$/.test(role) ) new_role = msg.guild.roles.cache.get(role);
 				if ( /^\d+$/.test(role) ) new_role = msg.guild.roles.cache.get(role);
 				if ( !new_role ) new_role = msg.guild.roles.cache.find( gc => gc.name === role.replace( /^@/, '' ) );
 				if ( !new_role ) new_role = msg.guild.roles.cache.find( gc => gc.name === role.replace( /^@/, '' ) );
 				return new_role;
 				return new_role;
 			} );
 			} );
-			if ( roles.some( role => !role ) ) return msg.replyMsg( 'the provided role does not exist.', {}, true );
+			if ( roles.some( role => !role ) ) return msg.replyMsg( lang.verification.role_missing, {}, true );
+			if ( roles.some( role => role.managed ) ) return msg.replyMsg( lang.verification.role_managed, {}, true );
 			roles = roles.map( role => role.id ).join('|');
 			roles = roles.map( role => role.id ).join('|');
 			var new_configid = 1;
 			var new_configid = 1;
 			for ( let i of rows.map( row => row.configid ) ) {
 			for ( let i of rows.map( row => row.configid ) ) {
@@ -1961,19 +1962,12 @@ function cmd_verification(lang, msg, args, line, wiki) {
 			}
 			}
 			return db.run( 'INSERT INTO verification(guild, configid, channel, role) VALUES(?, ?, ?, ?)', [msg.guild.id, new_configid, '|' + msg.channel.id + '|', roles], function (dberror) {
 			return db.run( 'INSERT INTO verification(guild, configid, channel, role) VALUES(?, ?, ?, ?)', [msg.guild.id, new_configid, '|' + msg.channel.id + '|', roles], function (dberror) {
 				if ( dberror ) {
 				if ( dberror ) {
-					console.log( '- Error while updating the verification: ' + dberror );
-					msg.replyMsg( 'sadly the verification couldn\'t be updated, please try again later.', {}, true );
+					console.log( '- Error while adding the verification: ' + dberror );
+					msg.replyMsg( lang.verification.save_failed, {}, true );
 					return dberror;
 					return dberror;
 				}
 				}
-				console.log( '- Verification successfully updated.' );
-				var text = 'the verification has been updated:\n\n`' + prefix + ' verification ' + new_configid + '`\nChannel: <#' + msg.channel.id + '>\nRole: <@&' + roles.split('|').join('>, <@&') + '>\nEdit count: `0`\nUser group: `user`\nAccount age: `0` (in days)';
-				if ( roles.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
-					text += '\n';
-					roles.split('|').forEach( role => {
-						if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) text += '\n**The role <@&' + role + '> is too high for ' + msg.guild.me.toString() + ' to assign!**';
-					} );
-				}
-				msg.replyMsg( text, {}, true );
+				console.log( '- Verification successfully added.' );
+				msg.replyMsg( lang.verification.added + formatVerification(false, false, {configid: new_configid, role: roles}), {}, true );
 			} );
 			} );
 		}
 		}
 		if ( !rows.some( row => row.configid.toString() === args[0] ) ) {
 		if ( !rows.some( row => row.configid.toString() === args[0] ) ) {
@@ -1982,9 +1976,9 @@ function cmd_verification(lang, msg, args, line, wiki) {
 				return;
 				return;
 			}
 			}
 			var text = '';
 			var text = '';
-			if ( rows.length ) text += 'these are the current verifications for this server:\n\n' + rows.map( row => '`' + prefix + ' verification ' + row.configid + '`\nChannel: <#' + row.channel.split('|').filter( channel => channel.length ).join('>, <#') + '>\nRole: <@&' + row.role.split('|').join('>, <@&') + '>\nEdit count: `' + row.editcount + '`\nUser group: `' + ( row.usergroup.startsWith( 'AND|' ) ? row.usergroup.split('|').slice(1).join('` and `') : row.usergroup.split('|').join('` or `') ) + '`\nAccount age: `' + row.accountage + '` (in days)' ).join('\n\n');
-			else text += 'there are no verifications for this server yet.';
-			text += '\n\nAdd more verifications:\n`' + prefix + ' verification add <new role>`';
+			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.replyMsg( text, {split:true}, true );
 		}
 		}
 		var row = rows.find( row => row.configid.toString() === args[0] );
 		var row = rows.find( row => row.configid.toString() === args[0] );
@@ -1992,139 +1986,127 @@ function cmd_verification(lang, msg, args, line, wiki) {
 			return db.run( 'DELETE FROM verification WHERE guild = ? AND configid = ?', [msg.guild.id, row.configid], function (dberror) {
 			return db.run( 'DELETE FROM verification WHERE guild = ? AND configid = ?', [msg.guild.id, row.configid], function (dberror) {
 				if ( dberror ) {
 				if ( dberror ) {
 					console.log( '- Error while removing the verification: ' + dberror );
 					console.log( '- Error while removing the verification: ' + dberror );
-					msg.replyMsg( 'sadly the verification couldn\'t be deleted, please try again later.', {}, true );
+					msg.replyMsg( lang.verification.save_failed, {}, true );
 					return dberror;
 					return dberror;
 				}
 				}
 				console.log( '- Verification successfully removed.' );
 				console.log( '- Verification successfully removed.' );
-				msg.replyMsg( 'the verification has been deleted.', {}, true );
+				msg.replyMsg( lang.verification.deleted, {}, true );
 			} );
 			} );
 		}
 		}
 		if ( args[2] ) {
 		if ( args[2] ) {
 			args[2] = args.slice(2).join(' ').replace( /^\s*<?\s*(.*?)\s*>?\s*$/, '$1' );
 			args[2] = args.slice(2).join(' ').replace( /^\s*<?\s*(.*?)\s*>?\s*$/, '$1' );
+			if ( args[1] === 'channel' ) {
+				var channels = args[2].replace( /\s*>?\s*\|\s*<?\s*/g, '|' ).split('|').filter( channel => channel.length );
+				if ( channels.length > 10 ) return msg.replyMsg( lang.verification.channel_max, {}, true );
+				channels = channels.map( channel => {
+					var new_channel = '';
+					if ( /^\d+$/.test(channel) ) new_channel = msg.guild.channels.cache.filter( tc => tc.type === 'text' ).get(channel);
+					if ( !new_channel ) new_channel = msg.guild.channels.cache.filter( gc => gc.type === 'text' ).find( gc => gc.name === channel.replace( /^#/, '' ) );
+					return new_channel;
+				} );
+				if ( channels.some( channel => !channel ) ) return msg.replyMsg( lang.verification.channel_missing, {}, true );
+				channels = channels.map( channel => channel.id ).join('|');
+				if ( channels.length ) return db.run( 'UPDATE verification SET channel = ? WHERE guild = ? AND configid = ?', ['|' + channels + '|', msg.guild.id, row.configid], function (dberror) {
+					if ( dberror ) {
+						console.log( '- Error while updating the verification: ' + dberror );
+						msg.replyMsg( lang.verification.save_failed, {}, true );
+						return dberror;
+					}
+					console.log( '- Verification successfully updated.' );
+					row.channel = '|' + channels + '|';
+					msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
+				} );
+			}
 			if ( args[1] === 'role' ) {
 			if ( args[1] === 'role' ) {
 				var roles = args[2].replace( /\s*>?\s*\|\s*<?\s*/g, '|' ).split('|').filter( role => role.length );
 				var roles = args[2].replace( /\s*>?\s*\|\s*<?\s*/g, '|' ).split('|').filter( role => role.length );
-				if ( roles.length > 10 ) return msg.replyMsg( 'too many roles provided.', {}, true );
+				if ( roles.length > 10 ) return msg.replyMsg( lang.verification.role_max, {}, true );
 				roles = roles.map( role => {
 				roles = roles.map( role => {
 					var new_role = '';
 					var new_role = '';
 					if ( /^\d+$/.test(role) ) new_role = msg.guild.roles.cache.get(role);
 					if ( /^\d+$/.test(role) ) new_role = msg.guild.roles.cache.get(role);
 					if ( !new_role ) new_role = msg.guild.roles.cache.find( gc => gc.name === role.replace( /^@/, '' ) );
 					if ( !new_role ) new_role = msg.guild.roles.cache.find( gc => gc.name === role.replace( /^@/, '' ) );
 					return new_role;
 					return new_role;
 				} );
 				} );
-				if ( roles.some( role => !role ) ) return msg.replyMsg( 'the provided role does not exist.', {}, true );
+				if ( roles.some( role => !role ) ) return msg.replyMsg( lang.verification.role_missing, {}, true );
+				if ( roles.some( role => role.managed ) ) return msg.replyMsg( lang.verification.role_managed, {}, true );
 				roles = roles.map( role => role.id ).join('|');
 				roles = roles.map( role => role.id ).join('|');
 				if ( roles.length ) return db.run( 'UPDATE verification SET role = ? WHERE guild = ? AND configid = ?', [roles, msg.guild.id, row.configid], function (dberror) {
 				if ( roles.length ) return db.run( 'UPDATE verification SET role = ? WHERE guild = ? AND configid = ?', [roles, msg.guild.id, row.configid], function (dberror) {
 					if ( dberror ) {
 					if ( dberror ) {
 						console.log( '- Error while updating the verification: ' + dberror );
 						console.log( '- Error while updating the verification: ' + dberror );
-						msg.replyMsg( 'sadly the verification couldn\'t be updated, please try again later.', {}, true );
+						msg.replyMsg( lang.verification.save_failed, {}, true );
 						return dberror;
 						return dberror;
 					}
 					}
 					console.log( '- Verification successfully updated.' );
 					console.log( '- Verification successfully updated.' );
 					row.role = roles;
 					row.role = roles;
-					var text = 'the verification has been updated:\n\n`' + prefix + ' verification ' + row.configid + '`\nChannel: <#' + row.channel.split('|').filter( channel => channel.length ).join('>, <#') + '>\nRole: <@&' + row.role.split('|').join('>, <@&') + '>\nEdit count: `' + row.editcount + '`\nUser group: `' + ( row.usergroup.startsWith( 'AND|' ) ? row.usergroup.split('|').slice(1).join('` and `') : row.usergroup.split('|').join('` or `') ) + '`\nAccount age: `' + row.accountage + '` (in days)';
-					if ( row.role.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
-						text += '\n';
-						row.role.split('|').forEach( role => {
-							if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) text += '\n**The role <@&' + role + '> is too high for ' + msg.guild.me.toString() + ' to assign!**';
-						} );
-					}
-					msg.replyMsg( text, {split:true}, true );
+					msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
 				} );
 				} );
 			}
 			}
 			if ( ( args[1] === 'editcount' || args[1] === 'accountage' ) && /^\d+$/.test(args[2]) ) {
 			if ( ( args[1] === 'editcount' || args[1] === 'accountage' ) && /^\d+$/.test(args[2]) ) {
 				args[2] = parseInt(args[2], 10);
 				args[2] = parseInt(args[2], 10);
-				if ( args[2] > 1000000 ) return msg.replyMsg( 'the provided value is too high.', {}, true );
+				if ( args[2] > 1000000 ) return msg.replyMsg( lang.verification.value_too_high, {}, true );
 				return db.run( 'UPDATE verification SET ' + args[1] + ' = ? WHERE guild = ? AND configid = ?', [args[2], msg.guild.id, row.configid], function (dberror) {
 				return db.run( 'UPDATE verification SET ' + args[1] + ' = ? WHERE guild = ? AND configid = ?', [args[2], msg.guild.id, row.configid], function (dberror) {
 					if ( dberror ) {
 					if ( dberror ) {
 						console.log( '- Error while updating the verification: ' + dberror );
 						console.log( '- Error while updating the verification: ' + dberror );
-						msg.replyMsg( 'sadly the verification couldn\'t be updated, please try again later.', {}, true );
+						msg.replyMsg( lang.verification.save_failed, {}, true );
 						return dberror;
 						return dberror;
 					}
 					}
 					console.log( '- Verification successfully updated.' );
 					console.log( '- Verification successfully updated.' );
 					row[args[1]] = args[2];
 					row[args[1]] = args[2];
-					var text = 'the verification has been updated:\n\n`' + prefix + ' verification ' + row.configid + '`\nChannel: <#' + row.channel.split('|').filter( channel => channel.length ).join('>, <#') + '>\nRole: <@&' + row.role.split('|').join('>, <@&') + '>\nEdit count: `' + row.editcount + '`\nUser group: `' + ( row.usergroup.startsWith( 'AND|' ) ? row.usergroup.split('|').slice(1).join('` and `') : row.usergroup.split('|').join('` or `') ) + '`\nAccount age: `' + row.accountage + '` (in days)';
-					if ( row.role.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
-						text += '\n';
-						row.role.split('|').forEach( role => {
-							if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) text += '\n**The role <@&' + role + '> is too high for ' + msg.guild.me.toString() + ' to assign!**';
-						} );
-					}
-					msg.replyMsg( text, {split:true}, true );
+					msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
 				} );
 				} );
 			}
 			}
 			if ( args[1] === 'usergroup' ) {
 			if ( args[1] === 'usergroup' ) {
 				var usergroups = args[2].replace( /\s*>?\s*\|\s*<?\s*/g, '|' ).replace( / /g, '_' ).toLowerCase().split('|').filter( usergroup => usergroup.length );
 				var usergroups = args[2].replace( /\s*>?\s*\|\s*<?\s*/g, '|' ).replace( / /g, '_' ).toLowerCase().split('|').filter( usergroup => usergroup.length );
 				var and_or = '';
 				var and_or = '';
-				if ( usergroups[0] === 'and' ) {
+				if ( /^\s*AND\s*\|/.test(args[2]) ) {
 					usergroups = usergroups.slice(1);
 					usergroups = usergroups.slice(1);
 					and_or = 'AND|';
 					and_or = 'AND|';
 				}
 				}
-				if ( usergroups.length > 10 ) return msg.replyMsg( 'too many usergroups provided.', {}, true );
-				if ( usergroups.some( usergroup => usergroup.length > 100 ) ) return msg.replyMsg( 'the provided usergroup is too long.', {}, true );
+				if ( usergroups.length > 10 ) return msg.replyMsg( lang.verification.usergroup_max, {}, true );
+				if ( usergroups.some( usergroup => usergroup.length > 100 ) ) return msg.replyMsg( lang.verification.usergroup_too_long, {}, true );
 				usergroups = usergroups.join('|');
 				usergroups = usergroups.join('|');
 				if ( usergroups.length ) return db.run( 'UPDATE verification SET usergroup = ? WHERE guild = ? AND configid = ?', [and_or + usergroups, msg.guild.id, row.configid], function (dberror) {
 				if ( usergroups.length ) return db.run( 'UPDATE verification SET usergroup = ? WHERE guild = ? AND configid = ?', [and_or + usergroups, msg.guild.id, row.configid], function (dberror) {
 					if ( dberror ) {
 					if ( dberror ) {
 						console.log( '- Error while updating the verification: ' + dberror );
 						console.log( '- Error while updating the verification: ' + dberror );
-						msg.replyMsg( 'sadly the verification couldn\'t be updated, please try again later.', {}, true );
+						msg.replyMsg( lang.verification.save_failed, {}, true );
 						return dberror;
 						return dberror;
 					}
 					}
 					console.log( '- Verification successfully updated.' );
 					console.log( '- Verification successfully updated.' );
 					row.usergroup = and_or + usergroups;
 					row.usergroup = and_or + usergroups;
-					var text = 'the verification has been updated:\n\n`' + prefix + ' verification ' + row.configid + '`\nChannel: <#' + row.channel.split('|').filter( channel => channel.length ).join('>, <#') + '>\nRole: <@&' + row.role.split('|').join('>, <@&') + '>\nEdit count: `' + row.editcount + '`\nUser group: `' + ( row.usergroup.startsWith( 'AND|' ) ? row.usergroup.split('|').slice(1).join('` and `') : row.usergroup.split('|').join('` or `') ) + '`\nAccount age: `' + row.accountage + '` (in days)';
-					if ( row.role.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
-						text += '\n';
-						row.role.split('|').forEach( role => {
-							if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) text += '\n**The role <@&' + role + '> is too high for ' + msg.guild.me.toString() + ' to assign!**';
-						} );
-					}
-					msg.replyMsg( text, {split:true}, true );
+					msg.replyMsg( lang.verification.updated + formatVerification(), {split:true}, true );
 				} );
 				} );
 			}
 			}
-			if ( args[1] === 'channel' ) {
-				var channels = args[2].replace( /\s*>?\s*\|\s*<?\s*/g, '|' ).split('|').filter( channel => channel.length );
-				if ( channels.length > 10 ) return msg.replyMsg( 'too many channels provided.', {}, true );
-				channels = channels.map( channel => {
-					var new_channel = '';
-					if ( /^\d+$/.test(channel) ) new_channel = msg.guild.channels.cache.filter( tc => tc.type === 'text' ).get(channel);
-					if ( !new_channel ) new_channel = msg.guild.channels.cache.filter( gc => gc.type === 'text' ).find( gc => gc.name === channel.replace( /^#/, '' ) );
-					return new_channel;
-				} );
-				if ( channels.some( channel => !channel ) ) return msg.replyMsg( 'the provided channel does not exist.', {}, true );
-				channels = channels.map( channel => channel.id ).join('|');
-				if ( channels.length ) return db.run( 'UPDATE verification SET channel = ? WHERE guild = ? AND configid = ?', ['|' + channels + '|', msg.guild.id, row.configid], function (dberror) {
-					if ( dberror ) {
-						console.log( '- Error while updating the verification: ' + dberror );
-						msg.replyMsg( 'sadly the verification couldn\'t be updated, please try again later.', {}, true );
-						return dberror;
-					}
-					console.log( '- Verification successfully updated.' );
-					row.channel = '|' + channels + '|';
-					var text = 'the verification has been updated:\n\n`' + prefix + ' verification ' + row.configid + '`\nChannel: <#' + row.channel.split('|').filter( channel => channel.length ).join('>, <#') + '>\nRole: <@&' + row.role.split('|').join('>, <@&') + '>\nEdit count: `' + row.editcount + '`\nUser group: `' + ( row.usergroup.startsWith( 'AND|' ) ? row.usergroup.split('|').slice(1).join('` and `') : row.usergroup.split('|').join('` or `') ) + '`\nAccount age: `' + row.accountage + '` (in days)';
-					if ( row.role.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
-						text += '\n';
-						row.role.split('|').forEach( role => {
-							if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) text += '\n**The role <@&' + role + '> is too high for ' + msg.guild.me.toString() + ' to assign!**';
-						} );
+		}
+		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 );
+		
+		function formatVerification(showCommands, hideRoles, {configid, channel = '|' + msg.channel.id + '|', role, editcount = 0, usergroup = 'user', accountage = 0} = row) {
+			var verification_text = '\n\n`' + prefix + ' verification ' + configid + '`';
+			verification_text += '\n' + lang.verification.channel + ' <#' + channel.split('|').filter( channel => channel.length ).join('>, <#') + '>';
+			if ( showCommands ) verification_text += '\n`' + prefix + ' verification ' + row.configid + ' channel ' + lang.verification.new_channel + '`\n';
+			verification_text += '\n' + lang.verification.role + ' <@&' + role.split('|').join('>, <@&') + '>';
+			if ( showCommands ) verification_text += '\n`' + prefix + ' verification ' + row.configid + ' role ' + lang.verification.new_role + '`\n';
+			verification_text += '\n' + lang.verification.editcount + ' `' + editcount + '`';
+			if ( showCommands ) verification_text += '\n`' + prefix + ' verification ' + row.configid + ' editcount ' + lang.verification.new_editcount + '`\n';
+			verification_text += '\n' + lang.verification.usergroup + ' `' + ( usergroup.startsWith( 'AND|' ) ? usergroup.split('|').slice(1).join('` ' + lang.verification.and + ' `') : usergroup.split('|').join('` ' + lang.verification.or + ' `') ) + '`';
+			if ( showCommands ) verification_text += '\n`' + prefix + ' verification ' + row.configid + ' usergroup ' + lang.verification.new_usergroup + '`\n';
+			verification_text += '\n' + lang.verification.accountage + ' `' + accountage + '` ' + lang.verification.indays;
+			if ( showCommands ) verification_text += '\n`' + prefix + ' verification ' + row.configid + ' accountage ' + lang.verification.new_accountage + '`\n';
+			if ( !hideRoles && role.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
+				verification_text += '\n';
+				role.split('|').forEach( role => {
+					if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) {
+						verification_text += '\n' + lang.verification.role_too_high.replaceSave( '%1$s', '<@&' + role + '>' ).replaceSave( '%2$s', msg.guild.me.toString() );
 					}
 					}
-					msg.replyMsg( text, {split:true}, true );
 				} );
 				} );
 			}
 			}
+			return verification_text;
 		}
 		}
-		var text = 'this is the verification `' + row.configid + '` for this server:\n\nChannel: <#' + row.channel.split('|').filter( channel => channel.length ).join('>, <#') + '>\n`' + prefix + ' verification ' + row.configid + ' channel <new channel>`\n\nRole: <@&' + row.role.split('|').join('>, <@&') + '>\n`' + prefix + ' verification ' + row.configid + ' role <new role>`\n\nEdit count: `' + row.editcount + '`\n`' + prefix + ' verification ' + row.configid + ' editcount <new edit count>`\n\nUser group: `' + ( row.usergroup.startsWith( 'AND|' ) ? row.usergroup.split('|').slice(1).join('` and `') : row.usergroup.split('|').join('` or `') ) + '`\n`' + prefix + ' verification ' + row.configid + ' usergroup <new user group>`\n\nAccount age: `' + row.accountage + '` (in days)\n`' + prefix + ' verification ' + row.configid + ' accountage <new account age>`';
-		if ( row.role.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
-			text += '\n';
-			row.role.split('|').forEach( role => {
-				if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) text += '\n**The role <@&' + role + '> is too high for ' + msg.guild.me.toString() + ' to assign!**';
-			} );
-		}
-		text += '\n\nDelete this verification:\n`' + prefix + ' verification ' + row.configid + ' delete`';
-		return msg.replyMsg( text, {split:true}, true );
 	} );
 	} );
 }
 }
 
 
 function cmd_verify(lang, msg, args, line, wiki) {
 function cmd_verify(lang, msg, args, line, wiki) {
 	if ( !( wiki.endsWith( '.gamepedia.com/' ) || wiki.isFandom() ) || msg.channel.type !== 'text' ) return cmd_link(lang, msg, line.split(' ').slice(1).join(' '), wiki);
 	if ( !( wiki.endsWith( '.gamepedia.com/' ) || wiki.isFandom() ) || msg.channel.type !== 'text' ) return cmd_link(lang, msg, line.split(' ').slice(1).join(' '), wiki);
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
-		if ( msg.isAdmin() ) {
+		if ( msg.isAdmin() || msg.isOwner() ) {
 			console.log( msg.guild.id + ': Missing permissions - MANAGE_ROLES' );
 			console.log( msg.guild.id + ': Missing permissions - MANAGE_ROLES' );
 			msg.replyMsg( lang.missingperm + ' `MANAGE_ROLES`' );
 			msg.replyMsg( lang.missingperm + ' `MANAGE_ROLES`' );
 		} else cmd_link(lang, msg, line.split(' ').slice(1).join(' '), wiki);
 		} else cmd_link(lang, msg, line.split(' ').slice(1).join(' '), wiki);
@@ -2141,11 +2123,11 @@ function cmd_verify(lang, msg, args, line, wiki) {
 	db.all( 'SELECT role, editcount, usergroup, accountage FROM verification WHERE guild = ? AND channel LIKE ? ORDER BY configid ASC', [msg.guild.id, '%|' + msg.channel.id + '|%'], (dberror, rows) => {
 	db.all( 'SELECT role, editcount, usergroup, accountage FROM verification WHERE guild = ? AND channel LIKE ? ORDER BY configid ASC', [msg.guild.id, '%|' + msg.channel.id + '|%'], (dberror, rows) => {
 		if ( dberror || !rows ) {
 		if ( dberror || !rows ) {
 			console.log( '- Error while getting the verifications: ' + dberror );
 			console.log( '- Error while getting the verifications: ' + dberror );
-			embed.setTitle( username.escapeFormatting() ).setColor('#000000').setDescription( 'The verification failed due to an error, please try again.' );
-			msg.replyMsg( 'the verification failed due to an error, please try again.', {embed}, false, false ).then( message => message.reactEmoji('error') );
+			embed.setTitle( username.escapeFormatting() ).setColor('#000000').setDescription( lang.verify.error );
+			msg.replyMsg( lang.verify.error_reply, {embed}, false, false ).then( message => message.reactEmoji('error') );
 			return dberror;
 			return dberror;
 		}
 		}
-		if ( !rows.length ) return cmd_link(lang, msg, line.split(' ').slice(1).join(' '), wiki);
+		if ( !rows.length ) return msg.replyMsg( lang.verify.missing );
 		
 		
 		if ( !username.trim() ) {
 		if ( !username.trim() ) {
 			/*
 			/*
@@ -2154,7 +2136,7 @@ function cmd_verify(lang, msg, args, line, wiki) {
 			*/
 			*/
 			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.' );
 			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( 'Wiki Account Verification' ).setTimestamp();
+		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', {
 		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', {
 			responseType: 'json'
 			responseType: 'json'
 		} ).then( response => {
 		} ).then( response => {
@@ -2162,8 +2144,8 @@ function cmd_verify(lang, msg, args, line, wiki) {
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( body && body.warnings ) log_warn(body.warnings);
 			if ( response.statusCode !== 200 || !body || !body.query || !body.query.users ) {
 			if ( response.statusCode !== 200 || !body || !body.query || !body.query.users ) {
 				console.log( '- ' + response.statusCode + ': Error while getting the user: ' + ( body && body.error && body.error.info ) );
 				console.log( '- ' + response.statusCode + ': Error while getting the user: ' + ( body && body.error && body.error.info ) );
-				embed.setTitle( username.escapeFormatting() ).setColor('#000000').setDescription( 'The verification failed due to an error, please try again.' );
-				msg.replyMsg( 'the verification failed due to an error, please try again.', {embed}, false, false ).then( message => message.reactEmoji('error') );
+				embed.setTitle( username.escapeFormatting() ).setColor('#000000').setDescription( lang.verify.error );
+				msg.replyMsg( lang.verify.error_reply, {embed}, false, false ).then( message => message.reactEmoji('error') );
 				
 				
 				if ( reaction ) reaction.removeEmoji();
 				if ( reaction ) reaction.removeEmoji();
 				return;
 				return;
@@ -2172,8 +2154,8 @@ function cmd_verify(lang, msg, args, line, wiki) {
 			embed.setAuthor( body.query.general.sitename );
 			embed.setAuthor( body.query.general.sitename );
 			if ( body.query.users.length !== 1 || queryuser.missing !== undefined || queryuser.invalid !== undefined ) {
 			if ( body.query.users.length !== 1 || queryuser.missing !== undefined || queryuser.invalid !== undefined ) {
 				username = ( body.query.users.length === 1 ? queryuser.name : username );
 				username = ( body.query.users.length === 1 ? queryuser.name : username );
-				embed.setTitle( username.escapeFormatting() ).setColor('#0000FF').setDescription( 'The wiki user "' + username.escapeFormatting() + '" doesn\'t exist.' );
-				msg.replyMsg( 'your linked wiki user "' + username.escapeFormatting() + '" doesn\'t exist.', {embed}, false, false );
+				embed.setTitle( username.escapeFormatting() ).setColor('#0000FF').setDescription( lang.verify.user_missing.replaceSave( '%s', username.escapeFormatting() ) );
+				msg.replyMsg( lang.verify.user_missing_reply.replaceSave( '%s', username.escapeFormatting() ), {embed}, false, false );
 				
 				
 				if ( reaction ) reaction.removeEmoji();
 				if ( reaction ) reaction.removeEmoji();
 				return;
 				return;
@@ -2182,8 +2164,8 @@ function cmd_verify(lang, msg, args, line, wiki) {
 			var pagelink = wiki.toLink('User:' + username, '', '', body.query.general, true);
 			var pagelink = wiki.toLink('User:' + username, '', '', body.query.general, true);
 			embed.setTitle( username.escapeFormatting() ).setURL( pagelink );
 			embed.setTitle( username.escapeFormatting() ).setURL( pagelink );
 			if ( queryuser.blockexpiry ) {
 			if ( queryuser.blockexpiry ) {
-				embed.setColor('#FF0000').setDescription( '**The wiki user [' + username.escapeFormatting() + '](' + pagelink + ') is blocked!**' );
-				msg.replyMsg( 'your linked wiki user **"' + username.escapeFormatting() + '" is blocked!**', {embed}, false, false );
+				embed.setColor('#FF0000').setDescription( lang.verify.user_blocked.replaceSave( '%s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ) );
+				msg.replyMsg( lang.verify.user_blocked_reply.replaceSave( '%s', username.escapeFormatting() ), {embed}, false, false );
 				
 				
 				if ( reaction ) reaction.removeEmoji();
 				if ( reaction ) reaction.removeEmoji();
 				return;
 				return;
@@ -2200,36 +2182,36 @@ function cmd_verify(lang, msg, args, line, wiki) {
 			got.get( url ).then( gbresponse => {
 			got.get( url ).then( gbresponse => {
 				if ( gbresponse.statusCode !== 200 || !gbresponse.body ) {
 				if ( gbresponse.statusCode !== 200 || !gbresponse.body ) {
 					console.log( '- ' + gbresponse.statusCode + ': Error while getting the global block.' );
 					console.log( '- ' + gbresponse.statusCode + ': Error while getting the global block.' );
-					comment.push('**Check for global block failed!**');
+					comment.push(lang.verify.failed_gblock);
 				}
 				}
 				else {
 				else {
 					let $ = cheerio.load(gbresponse.body);
 					let $ = cheerio.load(gbresponse.body);
 					if ( wiki.endsWith( '.gamepedia.com/' ) ) {
 					if ( wiki.endsWith( '.gamepedia.com/' ) ) {
 						if ( $('.mw-blocklist').length ) {
 						if ( $('.mw-blocklist').length ) {
-							return Promise.reject([
-							'your linked wiki user **"' + username.escapeFormatting() + '" is globally blocked!**',
-							'**The wiki user [' + username.escapeFormatting() + '](' + pagelink + ') is globally blocked!**'
-							]);
+							return Promise.reject({
+								desc: lang.verify.user_gblocked.replaceSave( '%s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ),
+								reply: lang.verify.user_gblocked_reply.replaceSave( '%s', username.escapeFormatting() )
+							});
 						}
 						}
 					}
 					}
 					else if ( wiki.isFandom() ) {
 					else if ( wiki.isFandom() ) {
 						if ( $('#mw-content-text .errorbox').length ) {
 						if ( $('#mw-content-text .errorbox').length ) {
-							return Promise.reject([
-							'your linked wiki user **"' + username.escapeFormatting() + '" is disabled!**',
-							'**The wiki user [' + username.escapeFormatting() + '](' + pagelink + ') is disabled!**'
-							]);
+							return Promise.reject({
+								desc: lang.verify.user_disabled.replaceSave( '%s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ),
+								reply: lang.verify.user_disabled_reply.replaceSave( '%s', username.escapeFormatting() )
+							});
 						}
 						}
 						else if ( $('.mw-warning-with-logexcerpt').length && !$(".mw-warning-with-logexcerpt .mw-logline-block").length ) {
 						else if ( $('.mw-warning-with-logexcerpt').length && !$(".mw-warning-with-logexcerpt .mw-logline-block").length ) {
-							return Promise.reject([
-							'your linked wiki user **"' + username.escapeFormatting() + '" is globally blocked!**',
-							'**The wiki user [' + username.escapeFormatting() + '](' + pagelink + ') is globally blocked!**'
-							]);
+							return Promise.reject({
+								desc: lang.verify.user_gblocked.replaceSave( '%s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ),
+								reply: lang.verify.user_gblocked_reply.replaceSave( '%s', username.escapeFormatting() )
+							});
 						}
 						}
 					}
 					}
 				}
 				}
 			}, error => {
 			}, error => {
 				console.log( '- Error while getting the global block: ' + error );
 				console.log( '- Error while getting the global block: ' + error );
-				comment.push('**Check for global block failed!**');
+				comment.push(lang.verify.failed_gblock);
 			} ).then( () => {
 			} ).then( () => {
 				var options = {responseType: 'json'};
 				var options = {responseType: 'json'};
 				if ( wiki.endsWith( '.gamepedia.com/' ) ) {
 				if ( wiki.endsWith( '.gamepedia.com/' ) ) {
@@ -2244,18 +2226,22 @@ function cmd_verify(lang, msg, args, line, wiki) {
 					if ( presponse.statusCode !== 200 || !pbody || pbody.error || pbody.errormsg || pbody.title || !( pbody.profile || pbody.value !== undefined ) ) {
 					if ( presponse.statusCode !== 200 || !pbody || pbody.error || pbody.errormsg || pbody.title || !( pbody.profile || pbody.value !== undefined ) ) {
 						if ( !( pbody && pbody.status === 404 ) ) {
 						if ( !( pbody && pbody.status === 404 ) ) {
 							console.log( '- ' + presponse.statusCode + ': Error while getting the Discord tag: ' + ( pbody && ( pbody.error && pbody.error.info || pbody.errormsg || pbody.title ) ) );
 							console.log( '- ' + presponse.statusCode + ': Error while getting the Discord tag: ' + ( pbody && ( pbody.error && pbody.error.info || pbody.errormsg || pbody.title ) ) );
-							embed.setColor('#000000').setDescription( 'The verification failed due to an error, please try again.' );
-							return msg.replyMsg( 'the verification failed due to an error, please try again.', {embed}, false, false ).then( message => message.reactEmoji('error') );
+							embed.setColor('#000000').setDescription( lang.verify.error );
+							return msg.replyMsg( lang.verify.error_reply, {embed}, false, false ).then( message => message.reactEmoji('error') );
 						}
 						}
 					}
 					}
 					
 					
 					var discordname = '';
 					var discordname = '';
 					if ( pbody.profile ) discordname = pbody.profile['link-discord'].escapeFormatting().replace( /^\s*([^@#:]{2,32}?)\s*#(\d{4,6})\s*$/, '$1#$2' );
 					if ( pbody.profile ) discordname = pbody.profile['link-discord'].escapeFormatting().replace( /^\s*([^@#:]{2,32}?)\s*#(\d{4,6})\s*$/, '$1#$2' );
 					else if ( pbody.value ) discordname = htmlToPlain( pbody.value ).replace( /^\s*([^@#:]{2,32}?)\s*#(\d{4,6})\s*$/, '$1#$2' );
 					else if ( pbody.value ) discordname = htmlToPlain( pbody.value ).replace( /^\s*([^@#:]{2,32}?)\s*#(\d{4,6})\s*$/, '$1#$2' );
-					embed.addField( 'Discord user:', msg.author.tag.escapeFormatting(), true ).addField( 'Wiki user:', ( discordname || '*none*' ), true );
+					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 ) {
 					if ( msg.author.tag.escapeFormatting() !== discordname ) {
-						embed.setColor('#FFFF00').setDescription( 'Discord user ' + msg.member.toString() + ' doesn\'t match the wiki user [' + username.escapeFormatting() + '](' + pagelink + ').' );
-						return msg.replyMsg( 'your Discord tag doesn\'t match the wiki user "' + username.escapeFormatting() + '".', {embed}, false, false );
+						embed.setColor('#FFFF00').setDescription( lang.verify.user_failed.replaceSave( '%1$s', msg.member.toString() ).replaceSave( '%2$s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ) );
+						var help_link = '';
+						if ( wiki.endsWith( '.gamepedia.com/' ) ) help_link = lang.verify.help_gamepedia;
+						else if ( wiki.isFandom() ) help_link = lang.verify.help_fandom + '/' + username.toTitle(true) + '?c=wb&ch=' + encodeURIComponent( msg.channel.name ) + '&user=' + encodeURIComponent( msg.author.username ) + '&tag=' + msg.author.discriminator;
+						if ( help_link.length ) embed.addField( lang.verify.notice, lang.verify.help_guide.replaceSave( '%s', help_link ) );
+						return msg.replyMsg( lang.verify.user_failed_reply.replaceSave( '%s', username.escapeFormatting() ), {embed}, false, false );
 					}
 					}
 					
 					
 					var roles = [];
 					var roles = [];
@@ -2285,46 +2271,46 @@ function cmd_verify(lang, msg, args, line, wiki) {
 						}
 						}
 					} );
 					} );
 					if ( verified ) {
 					if ( verified ) {
-						embed.setColor('#00FF00').setDescription( 'Discord user ' + msg.member.toString() + ' has been successfully verified as wiki user [' + username.escapeFormatting() + '](' + pagelink + ').' );
-						var text = 'you have been sucessfully verified as wiki user "' + username.escapeFormatting() + '".';
-						msg.member.roles.add( roles, 'Verified as "' + username + '"' ).catch( error => {
+						embed.setColor('#00FF00').setDescription( lang.verify.user_verified.replaceSave( '%1$s', msg.member.toString() ).replaceSave( '%2$s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ) );
+						var text = lang.verify.user_verified_reply.replaceSave( '%s', username.escapeFormatting() );
+						msg.member.roles.add( roles, lang.verify.audit_reason.replaceSave( '%s', username ) ).catch( error => {
 							embed.setColor('#008800');
 							embed.setColor('#008800');
-							comment.push('**Adding roles failed!**');
+							comment.push(lang.verify.failed_roles);
 						} ).finally( () => {
 						} ).finally( () => {
 							if ( msg.showEmbed() ) {
 							if ( msg.showEmbed() ) {
-								if ( roles.length ) embed.addField( 'Qualified for:', roles.map( role => '<@&' + role + '>' ).join('\n') );
-								if ( missing.length ) embed.setColor('#008800').addField( 'Qualified for, but could not add:', missing.map( role => '<@&' + role + '>' ).join('\n') );
-								if ( comment.length ) embed.setColor('#008800').addField( 'Notice:', comment.join('\n') );
+								if ( roles.length ) embed.addField( lang.verify.qualified, roles.map( role => '<@&' + role + '>' ).join('\n') );
+								if ( missing.length ) embed.setColor('#008800').addField( lang.verify.qualified_error, missing.map( role => '<@&' + role + '>' ).join('\n') );
+								if ( comment.length ) embed.setColor('#008800').addField( lang.verify.notice, comment.join('\n') );
 							}
 							}
 							else {
 							else {
-								if ( roles.length ) text += '\n\nQualified for: ' + roles.map( role => '<@&' + role + '>' ).join(', ');
-								if ( missing.length ) text += '\n\nQualified for, but could not add: ' + missing.map( role => '<@&' + role + '>' ).join(', ');
+								if ( roles.length ) text += '\n\n' + lang.verify.qualified + ' ' + roles.map( role => '<@&' + role + '>' ).join(', ');
+								if ( missing.length ) text += '\n\n' + lang.verify.qualified_error + ' ' + missing.map( role => '<@&' + role + '>' ).join(', ');
 								if ( comment.length ) text += '\n\n' + comment.join('\n');
 								if ( comment.length ) text += '\n\n' + comment.join('\n');
 							}
 							}
 							msg.replyMsg( text, {embed}, false, false );
 							msg.replyMsg( text, {embed}, false, false );
 						} );
 						} );
 					}
 					}
 					else {
 					else {
-						embed.setColor('#FFFF00').setDescription( 'Discord user ' + msg.member.toString() + ' matches the wiki user [' + username.escapeFormatting() + '](' + pagelink + '), but doesn\'t meet the requirements for any roles.' );
-						msg.replyMsg( 'your Discord tag matches the wiki user "' + username.escapeFormatting() + '", but you don\'t meet the requirements for any roles.', {embed}, false, false );
+						embed.setColor('#FFFF00').setDescription( lang.verify.user_matches.replaceSave( '%1$s', msg.member.toString() ).replaceSave( '%2$s', '[' + username.escapeFormatting() + '](' + pagelink + ')' ) );
+						msg.replyMsg( lang.verify.user_matches_reply.replaceSave( '%s', username.escapeFormatting() ), {embed}, false, false );
 					}
 					}
 				}, error => {
 				}, error => {
 					console.log( '- Error while getting the Discord tag: ' + error );
 					console.log( '- Error while getting the Discord tag: ' + error );
-					embed.setColor('#000000').setDescription( 'The verification failed due to an error, please try again.' );
-					msg.replyMsg( 'the verification failed due to an error, please try again.', {embed}, false, false ).then( message => message.reactEmoji('error') );
+					embed.setColor('#000000').setDescription( lang.verify.error );
+					msg.replyMsg( lang.verify.error_reply, {embed}, false, false ).then( message => message.reactEmoji('error') );
 				} ).finally( () => {
 				} ).finally( () => {
 					if ( reaction ) reaction.removeEmoji();
 					if ( reaction ) reaction.removeEmoji();
 				} );
 				} );
 			}, error => {
 			}, error => {
-				embed.setColor('#FF0000').setDescription( error[1] );
-				msg.replyMsg( error[0], {embed}, false, false );
+				embed.setColor('#FF0000').setDescription( error.desc );
+				msg.replyMsg( error.reply, {embed}, false, false );
 				
 				
 				if ( reaction ) reaction.removeEmoji();
 				if ( reaction ) reaction.removeEmoji();
 			} );
 			} );
 		}, error => {
 		}, error => {
 			console.log( '- Error while getting the user: ' + error );
 			console.log( '- Error while getting the user: ' + error );
-			embed.setColor('#000000').setDescription( 'The verification failed due to an error, please try again.' );
-			msg.replyMsg( 'the verification failed due to an error, please try again.', {embed}, false, false ).then( message => message.reactEmoji('error') );
+			embed.setColor('#000000').setDescription( lang.verify.error );
+			msg.replyMsg( lang.verify.error_reply, {embed}, false, false ).then( message => message.reactEmoji('error') );
 			
 			
 			if ( reaction ) reaction.removeEmoji();
 			if ( reaction ) reaction.removeEmoji();
 		} ) );
 		} ) );