소스 검색

Various minor bug fixes and improvements

Markus-Rost 4 년 전
부모
커밋
29e1c1cc80
11개의 변경된 파일73개의 추가작업 그리고 56개의 파일을 삭제
  1. 1 1
      RcGcDb
  2. 6 4
      cmds/get.js
  3. 11 12
      cmds/rcscript.js
  4. 2 2
      cmds/settings.js
  5. 1 1
      cmds/test.js
  6. 21 7
      cmds/verification.js
  7. 1 1
      cmds/verify.js
  8. 16 16
      i18n/allLangs.json
  9. 0 8
      util/default.json
  10. 12 3
      util/functions.js
  11. 2 1
      util/i18n.js

+ 1 - 1
RcGcDb

@@ -1 +1 @@
-Subproject commit 7a91cd2d888140af350e78792f8bc45b4f9a6a25
+Subproject commit 203ed8984789d1268a0f906a9e155910345be8d8

+ 6 - 4
cmds/get.js

@@ -17,9 +17,9 @@ async function cmd_get(lang, msg, args, line, wiki) {
 		var guild = await msg.client.shard.broadcastEval( `if ( this.guilds.cache.has('${id}') ) {
 			var guild = this.guilds.cache.get('${id}');
 			( {
-				name: guild.name, id: guild.id,
-				memberCount: guild.memberCount, ownerID: guild.ownerID,
-				owner: guild.owner?.user?.tag, icon: guild.iconURL({dynamic:true}),
+				name: guild.name, id: guild.id, memberCount: guild.memberCount,
+				ownerID: guild.ownerID, owner: guild.owner?.user?.tag,
+				channel: guild.publicUpdatesChannelID, icon: guild.iconURL({dynamic:true}),
 				permissions: guild.me.permissions.missing(${defaultPermissions}),
 				pause: guild.id in global.pause, voice: guild.id in global.voice,
 				shardId: global.shardId
@@ -31,6 +31,7 @@ async function cmd_get(lang, msg, args, line, wiki) {
 			var guildsize = ['Size:', guild.memberCount + ' members'];
 			var guildshard = ['Shard:', guild.shardId];
 			var guildpermissions = ['Missing permissions:', ( guild.permissions.length ? '`' + guild.permissions.join('`, `') + '`' : '*none*' )];
+			var guildchannel = ['Updates channel:', '`' + guild.channel + '`'];
 			var guildsettings = ['Settings:', '*unknown*'];
 			
 			return db.all( 'SELECT channel, prefix, lang, wiki, inline FROM discord WHERE guild = ? ORDER BY channel ASC', [guild.id], (dberror, rows) => {
@@ -47,6 +48,7 @@ async function cmd_get(lang, msg, args, line, wiki) {
 				
 				if ( msg.showEmbed() ) {
 					var embed = new MessageEmbed().setThumbnail( guild.icon ).addField( guildname[0], guildname[1] ).addField( guildowner[0], guildowner[1] ).addField( guildsize[0], guildsize[1], true ).addField( guildshard[0], guildshard[1], true ).addField( guildpermissions[0], guildpermissions[1] );
+					if ( guild.channel ) embed.addField( guildchannel[0], guildchannel[1] );
 					var split = Util.splitMessage( guildsettings[1], {char:',\n',maxLength:1000,prepend:'```json\n',append:',\n```'} );
 					if ( split.length > 5 ) {
 						msg.sendChannel( '', {embed}, true );
@@ -58,7 +60,7 @@ async function cmd_get(lang, msg, args, line, wiki) {
 					}
 				}
 				else {
-					var text = guildname.join(' ') + '\n' + guildowner.join(' ') + '\n' + guildsize.join(' ') + '\n' + guildshard.join(' ') + '\n' + guildpermissions.join(' ') + '\n' + guildsettings.join(' ');
+					var text = guildname.join(' ') + '\n' + guildowner.join(' ') + '\n' + guildsize.join(' ') + '\n' + guildshard.join(' ') + '\n' + guildpermissions.join(' ') + ( guild.channel ? '\n' + guildchannel.join(' ') : '' ) + '\n' + guildsettings.join(' ');
 					msg.sendChannel( text, {split:{char:',\n',prepend:'```json\n',append:',\n```'}}, true );
 				}
 			} );

+ 11 - 12
cmds/rcscript.js

@@ -81,8 +81,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 					return msg.replyMsg( wikiinvalid, {}, true );
 				}
 				wikinew.updateWiki(body.query.general);
-				if ( body.query.general.generator.replace( /^MediaWiki 1\.(\d\d).*$/, '$1' ) <= 30 ) {
-					console.log( '- This wiki is using ' + body.query.general.generator + '.' );
+				if ( body.query.general.generator.replace( /^MediaWiki 1\.(\d\d).*$/, '$1' ) < 30 ) {
 					if ( reaction ) reaction.removeEmoji();
 					return msg.replyMsg( lang.get('test.MediaWiki', 'MediaWiki 1.30', body.query.general.generator) + '\nhttps://www.mediawiki.org/wiki/MediaWiki_1.30', {}, true );
 				}
@@ -90,17 +89,17 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 					if ( reaction ) reaction.removeEmoji();
 					return msg.replyMsg( lang.get('rcscript.sysmessage', 'MediaWiki:Custom-RcGcDw', msg.guild.id) + '\n<' + wikinew.toLink('MediaWiki:Custom-RcGcDw', 'action=edit') + '>', {}, true );
 				}
-				return db.get( 'SELECT reason FROM blocklist WHERE wiki = ?', [wikinew.href], (blerror, row) => {
+				return db.get( 'SELECT reason FROM blocklist WHERE wiki = ?', [wikinew.href], (blerror, block) => {
 					if ( blerror ) {
 						console.log( '- Error while getting the blocklist: ' + blerror );
 						if ( reaction ) reaction.removeEmoji();
 						msg.reactEmoji('error', true);
 						return blerror;
 					}
-					if ( row ) {
-						console.log( '- This wiki is blocked: ' + row.reason );
+					if ( block ) {
+						console.log( '- This wiki is blocked: ' + block.reason );
 						if ( reaction ) reaction.removeEmoji();
-						return msg.replyMsg( ( row.reason ? lang.get('rcscript.blocked_reason', row.reason) : lang.get('rcscript.blocked') ), {}, true );
+						return msg.replyMsg( ( block.reason ? lang.get('rcscript.blocked_reason', block.reason) : lang.get('rcscript.blocked') ), {}, true );
 					}
 					var wikiid = body.query.variables?.find?.( variable => variable?.id === 'wgCityId' )?.['*'];
 					if ( wikinew.isFandom(false) && wikiid ) return got.get( 'https://services.fandom.com/discussion/' + wikiid + '/posts?limit=1&format=json&cache=' + Date.now(), {
@@ -127,7 +126,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 					function createWebhook(wikiid = null) {
 						msg.channel.createWebhook( ( body.query.allmessages[1]['*'] || 'Recent changes' ), {
 							avatar: msg.client.user.displayAvatarURL({format:'png',size:4096}),
-							reason: lang.get('rcscript.audit_reason', wikinew)
+							reason: lang.get('rcscript.audit_reason', wikinew.href)
 						} ).then( webhook => {
 							console.log( '- Webhook successfully created.' );
 							var webhook_lang = new Lang(( allLangs.map[lang.lang] || allLangs.map[body.query.general.lang] || defaultSettings.lang ), 'rcscript.webhook');
@@ -249,17 +248,17 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 						if ( reaction ) reaction.removeEmoji();
 						return msg.replyMsg( lang.get('rcscript.sysmessage', 'MediaWiki:Custom-RcGcDw', msg.guild.id) + '\n<' + wikinew.toLink('MediaWiki:Custom-RcGcDw', 'action=edit') + '>', {}, true );
 					}
-					return db.get( 'SELECT reason FROM blocklist WHERE wiki = ?', [wikinew.href], (blerror, row) => {
+					return db.get( 'SELECT reason FROM blocklist WHERE wiki = ?', [wikinew.href], (blerror, block) => {
 						if ( blerror ) {
 							console.log( '- Error while getting the blocklist: ' + blerror );
 							if ( reaction ) reaction.removeEmoji();
 							msg.reactEmoji('error', true);
 							return blerror;
 						}
-						if ( row ) {
-							console.log( '- This wiki is blocked: ' + row.reason );
+						if ( block ) {
+							console.log( '- This wiki is blocked: ' + block.reason );
 							if ( reaction ) reaction.removeEmoji();
-							return msg.replyMsg( ( row.reason ? lang.get('rcscript.blocked_reason', row.reason) : lang.get('rcscript.blocked') ), {}, true );
+							return msg.replyMsg( ( block.reason ? lang.get('rcscript.blocked_reason', block.reason) : lang.get('rcscript.blocked') ), {}, true );
 						}
 						var wikiid = body.query.variables?.find?.( variable => variable?.id === 'wgCityId' )?.['*'];
 						if ( wikinew.isFandom(false) && wikiid ) return got.get( 'https://services.fandom.com/discussion/' + wikiid + '/posts?limit=1&format=json&cache=' + Date.now(), {
@@ -474,7 +473,7 @@ function cmd_rcscript(lang, msg, args, line, wiki) {
 				text += '\n' + lang.get('rcscript.display') + ' `' + display_types[selected_row.display] + '`';
 				text += '\n`' + cmd + ' display (' + display.join('|') + ')`\n';
 				if ( selected_row.rcid === -1 ) {
-					text += '\n' + lang.get('rcscript.rc') + ' *`' + lang.get('rcscript.disabled' ) + '`*';
+					text += '\n' + lang.get('rcscript.rc') + ' *`' + lang.get('rcscript.disabled') + '`*';
 					text += '\n`' + cmd + ' feeds only` ' + lang.get('rcscript.toggle') + '\n';
 				}
 				if ( new Wiki(selected_row.wiki).isFandom(false) ) {

+ 2 - 2
cmds/settings.js

@@ -1,6 +1,6 @@
 const cheerio = require('cheerio');
 const {MessageEmbed} = require('discord.js');
-const {defaultSettings, wikiProjects} = require('../util/default.json');
+const {defaultSettings} = require('../util/default.json');
 const Lang = require('../util/i18n.js');
 const allLangs = Lang.allLangs();
 const Wiki = require('../util/wiki.js');
@@ -134,7 +134,7 @@ function cmd_settings(lang, msg, args, line, wiki) {
 					var embed;
 					if ( !wikinew.isFandom() ) {
 						var notice = [];
-						if ( body.query.general.generator.replace( /^MediaWiki 1\.(\d\d).*$/, '$1' ) <= 30 ) {
+						if ( body.query.general.generator.replace( /^MediaWiki 1\.(\d\d).*$/, '$1' ) < 30 ) {
 							console.log( '- This wiki is using ' + body.query.general.generator + '.' );
 							notice.push({
 								name: 'MediaWiki',

+ 1 - 1
cmds/test.js

@@ -54,7 +54,7 @@ function cmd_test(lang, msg, args, line, wiki) {
 					}
 				}
 				else if ( ( msg.isAdmin() || msg.isOwner() ) && !wiki.isFandom() ) {
-					if ( body.query.general.generator.replace( /^MediaWiki 1\.(\d\d).*$/, '$1' ) <= 30 ) {
+					if ( body.query.general.generator.replace( /^MediaWiki 1\.(\d\d).*$/, '$1' ) < 30 ) {
 						console.log( '- This wiki is using ' + body.query.general.generator + '.' );
 						notice.push(lang.get('test.MediaWiki', '[MediaWiki 1.30](https://www.mediawiki.org/wiki/MediaWiki_1.30)', body.query.general.generator));
 					}

+ 21 - 7
cmds/verification.js

@@ -108,7 +108,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 			if ( process.env.READONLY ) return msg.replyMsg( lang.get('general.readonly') + '\n' + process.env.invite, {}, true );
 			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 );
+				var channels = args[2].replace( /\s*>?\s*[,|]\s*<?\s*/g, '|' ).split('|').filter( channel => channel.length );
 				if ( channels.length > 10 ) return msg.replyMsg( lang.get('verification.channel_max'), {}, true );
 				channels = channels.map( channel => {
 					var new_channel = '';
@@ -131,7 +131,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 				} );
 			}
 			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( lang.get('verification.role_max'), {}, true );
 				roles = roles.map( role => {
 					var new_role = '';
@@ -169,7 +169,7 @@ function cmd_verification(lang, msg, args, line, wiki) {
 				} );
 			}
 			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 = '';
 				if ( /^\s*AND\s*\|/.test(args[2]) ) {
 					usergroups = usergroups.slice(1);
@@ -183,8 +183,14 @@ function cmd_verification(lang, msg, args, line, wiki) {
 					if ( response.statusCode !== 200 || !body || !body.query || !body.query.allmessages ) {
 						if ( wiki.noWiki(response.url, response.statusCode) ) console.log( '- This wiki doesn\'t exist!' );
 						else console.log( '- ' + response.statusCode + ': Error while getting the usergroups: ' + ( body && body.error && body.error.info ) );
+						return;
 					}
-					var groups = body.query.allmessages.filter( group => !['group-all','group-membership-link-with-expiry'].includes( group.name ) && !/\.(?:css|js)$/.test(group.name) ).map( group => {
+					var groups = body.query.allmessages.filter( group => {
+						if ( group.name === 'group-all' ) return false;
+						if ( group.name === 'group-membership-link-with-expiry' ) return false;
+						if ( group.name.endsWith( '.css' ) || group.name.endsWith( '.js' ) ) return false;
+						return true;
+					} ).map( group => {
 						return {
 							name: group.name.replace( /^group-/, '' ).replace( /-member$/, '' ),
 							content: group['*'].replace( / /g, '_' ).toLowerCase()
@@ -192,8 +198,11 @@ 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 ( groups.some( group => group.content === usergroup ) ) {
+							return groups.find( group => group.content === usergroup ).name;
+						}
 						if ( /^admins?$/.test(usergroup) ) return 'sysop';
+						if ( usergroup === '*' ) return 'user';
 						return usergroup;
 					} );
 				}, error => {
@@ -242,10 +251,15 @@ function cmd_verification(lang, msg, args, line, wiki) {
 			if ( !hideNotice && rename && !msg.guild.me.permissions.has('MANAGE_NICKNAMES') ) {
 				verification_text += '\n\n' + lang.get('verification.rename_no_permission', msg.guild.me.toString());
 			}
-			if ( !hideNotice && role.split('|').some( role => msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) ) {
+			if ( !hideNotice && role.split('|').some( role => {
+				return ( !msg.guild.roles.cache.has(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 ) {
+					if ( !msg.guild.roles.cache.has(role) ) {
+						verification_text += '\n' + lang.get('verification.role_deleted', '<@&' + role + '>');
+					}
+					else if ( msg.guild.me.roles.highest.comparePositionTo(role) <= 0 ) {
 						verification_text += '\n' + lang.get('verification.role_too_high', '<@&' + role + '>', msg.guild.me.toString());
 					}
 				} );

+ 1 - 1
cmds/verify.js

@@ -15,7 +15,7 @@ var db = require('../util/database.js');
 function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 	if ( !msg.channel.isGuild() ) return this.LINK(lang, msg, line, wiki);
 	if ( !msg.guild.me.permissions.has('MANAGE_ROLES') ) {
-		if ( msg.isAdmin() || msg.isOwner() ) {
+		if ( msg.isAdmin() ) {
 			console.log( msg.guild.id + ': Missing permissions - MANAGE_ROLES' );
 			msg.replyMsg( lang.get('general.missingperm') + ' `MANAGE_ROLES`' );
 		} else this.LINK(lang, msg, line, wiki);

+ 16 - 16
i18n/allLangs.json

@@ -1,18 +1,18 @@
 {
 	"allLangs": {
 		"names": {
-			"en": "English",
-			"bn": "বাংলা",
-			"de": "Deutsch",
-			"fr": "Français",
-			"hi": "हिन्दी",
-			"nl": "Nederlands",
-			"pl": "Polski",
-			"pt-br": "Português do Brasil",
-			"ru": "Русский",
-			"tr": "Türkçe",
-			"zh-hans": "简体中文",
-			"zh-hant": "繁體中文"
+			"en": "English (en)",
+			"bn": "বাংলা (bn)",
+			"de": "Deutsch (de)",
+			"fr": "Français (fr)",
+			"hi": "हिन्दी (hi)",
+			"nl": "Nederlands (nl)",
+			"pl": "Polski (pl)",
+			"pt-br": "Português do Brasil (pt-br)",
+			"ru": "Русский (ru)",
+			"tr": "Türkçe (tr)",
+			"zh-hans": "简体中文 (zh-hans)",
+			"zh-hant": "繁體中文 (zh-hant)"
 		},
 		"map": {
 			"en": "en",
@@ -65,10 +65,10 @@
 	},
 	"RcGcDw": {
 		"names": {
-			"en": "English",
-			"de": "Deutsch",
-			"pl": "Polski",
-			"pt-br": "Português do Brasil"
+			"en": "English (en)",
+			"de": "Deutsch (de)",
+			"pl": "Polski (pl)",
+			"pt-br": "Português do Brasil (pt-br)"
 		},
 		"map": {
 			"en": "en",

+ 0 - 8
util/default.json

@@ -38,10 +38,6 @@
 	},
 	"usergroups": {
 		"ignored": [
-			"hydra_admin",
-			"ads_manager",
-			"report_manager",
-			"promo_manager",
 			"fandom-editor",
 			"request-to-be-forgotten-admin",
 			"util",
@@ -73,10 +69,6 @@
 			"user"
 		],
 		"global": [
-			"global_bot",
-			"hydra_staff",
-			"wiki_manager",
-			"grasp",
 			"founder",
 			"global-bot",
 			"bot-global",

+ 12 - 3
util/functions.js

@@ -140,15 +140,24 @@ function htmlToPlain(html) {
 			if ( tagname === 'sup' && attribs.class === 'reference' ) reference = true;
 			if ( tagname === 'br' ) {
 				text += '\n';
-				if ( listlevel > -1 ) text += '\u200b '.repeat(4*listlevel+3);
+				if ( listlevel > -1 ) text += '\u200b '.repeat(4 * listlevel + 3);
 			}
+			if ( tagname === 'hr' ) {
+				if ( !text.endsWith( '\n' ) ) text += '\n';
+				text += '─'.repeat(10) + '\n';
+			}
+			if ( tagname === 'p' && !text.endsWith( '\n' ) ) text += '\n';
 			if ( tagname === 'ul' ) listlevel++;
-			if ( tagname === 'li' ) text += '\n' + '\u200b '.repeat(4*listlevel) + '• ';
+			if ( tagname === 'li' ) {
+				if ( !text.endsWith( '\n' ) ) text += '\n';
+				if ( listlevel > -1 ) text += '\u200b '.repeat(4 * listlevel);
+				text += '• ';
+			}
 		},
 		ontext: (htmltext) => {
 			if ( !reference ) {
 				if ( listlevel > -1 ) {
-					htmltext = htmltext.replace( /\n/g, '\n' + '\u200b '.repeat(4*listlevel+3) );
+					htmltext = htmltext.replace( /\n/g, '\n' + '\u200b '.repeat(4 * listlevel + 3) );
 				}
 				text += escapeFormatting(htmltext);
 			}

+ 2 - 1
util/i18n.js

@@ -16,6 +16,7 @@ class Lang {
 	 * @constructs Lang
 	 */
 	constructor(lang = defaultSettings.lang, namespace = '') {
+		if ( typeof lang !== 'string' ) lang = defaultSettings.lang;
 		this.lang = lang;
 		this.namespace = namespace;
 		this.fallback = ( i18n?.[lang]?.fallback.slice() || [defaultSettings.lang] ).filter( fb => fb.trim() );
@@ -120,7 +121,7 @@ class Lang {
 	/**
 	 * Get names for all languages.
 	 * @param {Boolean} isRcGcDw - Get the languages for RcGcDw?
-	 * @returns {Object}
+	 * @returns {{names: {en: 'English'}, map: {english: 'en'}}}
 	 * @static
 	 */
 	static allLangs(isRcGcDw = false) {