瀏覽代碼

small improvements

Markus-Rost 4 年之前
父節點
當前提交
2fc52b4798
共有 6 個文件被更改,包括 42 次插入20 次删除
  1. 5 5
      .env.example
  2. 0 1
      bot.js
  3. 18 6
      cmds/verify.js
  4. 1 1
      functions/discussion.js
  5. 17 6
      functions/parse_page.js
  6. 1 1
      i18n/en.json

+ 5 - 5
.env.example

@@ -4,11 +4,11 @@
 
 # Your bot token to login your bot
 token="<Discord bot token>"
-# Your bots user ID for the dashboard
+# Your bots user ID
 bot="461189216198590464"
 # Your bots client secret for the dashboard
 secret="<Discord client secret>"
-# Your bots return uri for the dashboard
+# Optional: Your bots return uri for the dashboard
 dashboard="https://settings.wikibot.de/oauth"
 # Your user ID for owner only commands
 owner="243478237710123009"
@@ -20,9 +20,9 @@ channel="464098946894004224"
 invite="https://discord.gg/v77RTk5"
 # Link to the patreon page for the bot
 patreon="https://www.patreon.com/WikiBot"
-# API token for phabricator.wikimedia.org
+# Optional: API token for phabricator.wikimedia.org
 phabricator-wikimedia=""
-# API token for phabricator.miraheze.org
+# Optional: API token for phabricator.miraheze.org
 phabricator-miraheze=""
-# Path to a log file for usage statistics
+# Optional: Path to a log file for usage statistics
 usagelog=""

+ 0 - 1
bot.js

@@ -236,7 +236,6 @@ client.on( 'raw', rawEvent => {
 	}
 	var channel = client.channels.cache.get(interaction.channel_id);
 	if ( !interaction.guild_id ) {
-		if ( global.shardId !== 0 ) return;
 		return slash[interaction.data.name](interaction, new Lang(), new Wiki(), channel);
 	}
 	db.get( 'SELECT wiki, lang, role FROM discord WHERE guild = ? AND (channel = ? OR channel = ? OR channel IS NULL) ORDER BY channel DESC', [interaction.guild_id, interaction.channel_id, '#' + channel?.parentID], (dberror, row) => {

+ 18 - 6
cmds/verify.js

@@ -35,7 +35,9 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 		if ( dberror || !rows ) {
 			console.log( '- Error while getting the verifications: ' + dberror );
 			embed.setColor('#000000').setDescription( lang.get('verify.error') );
-			msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => message.reactEmoji('error') );
+			msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => {
+				if ( message ) message.reactEmoji('error');
+			} );
 			return dberror;
 		}
 		if ( !rows.length ) {
@@ -64,7 +66,9 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 				else {
 					console.log( '- ' + response.statusCode + ': Error while getting the user: ' + ( body && body.error && body.error.info ) );
 					embed.setColor('#000000').setDescription( lang.get('verify.error') );
-					msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => message.reactEmoji('error') );
+					msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => {
+						if ( message ) message.reactEmoji('error');
+					} );
 				}
 				
 				if ( reaction ) reaction.removeEmoji();
@@ -243,7 +247,9 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 				}, error => {
 					if ( error ) console.log( '- Error while getting the Discord tag: ' + error );
 					embed.setColor('#000000').setDescription( lang.get('verify.error') );
-					msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => message.reactEmoji('error') );
+					msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => {
+						if ( message ) message.reactEmoji('error');
+					} );
 					
 					if ( reaction ) reaction.removeEmoji();
 				} );
@@ -260,7 +266,9 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 				if ( mwresponse.statusCode !== 200 || mwbody?.batchcomplete === undefined || !mwbody?.query?.pages ) {
 					console.log( '- ' + mwresponse.statusCode + ': Error while getting the Discord tag: ' + ( mwbody && mwbody.error && mwbody.error.info ) );
 					embed.setColor('#000000').setDescription( lang.get('verify.error') );
-					msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => message.reactEmoji('error') );
+					msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => {
+						if ( message ) message.reactEmoji('error');
+					} );
 					
 					if ( reaction ) reaction.removeEmoji();
 					return;
@@ -355,14 +363,18 @@ function cmd_verify(lang, msg, args, line, wiki, old_username = '') {
 			}, error => {
 				console.log( '- Error while getting the Discord tag: ' + error );
 				embed.setColor('#000000').setDescription( lang.get('verify.error') );
-				msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => message.reactEmoji('error') );
+				msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => {
+					if ( message ) message.reactEmoji('error');
+				} );
 				
 				if ( reaction ) reaction.removeEmoji();
 			} );
 		}, error => {
 			console.log( '- Error while getting the user: ' + error );
 			embed.setColor('#000000').setDescription( lang.get('verify.error') );
-			msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => message.reactEmoji('error') );
+			msg.replyMsg( lang.get('verify.error_reply'), {embed}, false, false ).then( message => {
+				if ( message ) message.reactEmoji('error');
+			} );
 			
 			if ( reaction ) reaction.removeEmoji();
 		} ) );

+ 1 - 1
functions/discussion.js

@@ -267,7 +267,7 @@ function discussion_send(lang, msg, wiki, discussion, embed, spoiler) {
 			embed.setImage( discussion._embedded.contentImages[0].url );
 			break;
 		case 'POLL':
-			discussion.poll.answers.forEach( answer => embed.addField( answer.text.escapeFormatting(), ( answer.image ? '[__' + lang.get('discussion.image').escapeFormatting() + '__](' + answer.image.url + ')\n' : '' ) + lang.get('discussion.votes', answer.votes.toLocaleString(lang.get('dateformat')), answer.votes), true ) );
+			discussion.poll.answers.forEach( answer => embed.addField( answer.text.escapeFormatting(), ( answer.image ? '[__' + lang.get('discussion.image').escapeFormatting() + '__](' + answer.image.url + ')\n' : '' ) + lang.get('discussion.votes', answer.votes.toLocaleString(lang.get('dateformat')), answer.votes, ( ( answer.votes / discussion.poll.totalVotes ) * 100 ).toFixed(1).toLocaleString(lang.get('dateformat'))), true ) );
 			break;
 		case 'QUIZ':
 			description = discussion._embedded.quizzes[0].title.escapeFormatting();

+ 17 - 6
functions/parse_page.js

@@ -35,6 +35,7 @@ const infoboxList = [
 
 const removeClasses = [
 	'table',
+	'figure',
 	'script',
 	'input',
 	'style',
@@ -44,6 +45,7 @@ const removeClasses = [
 	'.mw-editsection',
 	'sup.reference',
 	'ol.references',
+	'.thumb',
 	'.error',
 	'.nomobile',
 	'.noprint',
@@ -78,6 +80,7 @@ const removeClassesExceptions = [
  * @param {Object} querypage - The details of the page.
  * @param {String} querypage.title - The title of the page.
  * @param {String} querypage.contentmodel - The content model of the page.
+ * @param {String} [querypage.missing] - If the page doesn't exist.
  * @param {Object} [querypage.pageprops] - The properties of the page.
  * @param {String} [querypage.pageprops.infoboxes] - The JSON data for portable infoboxes on the page.
  * @param {String} [querypage.pageprops.disambiguation] - The disambiguation property of the page.
@@ -88,9 +91,17 @@ const removeClassesExceptions = [
  * @param {String} [pagelink] - The link to the page.
  * @returns {Promise<import('discord.js').Message>} The edited message.
  */
-function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmodel, pageprops: {infoboxes, disambiguation} = {}, uselang = lang.lang, noRedirect = false}, thumbnail = '', fragment = '', pagelink = '') {
+function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmodel, missing, pageprops: {infoboxes, disambiguation} = {}, uselang = lang.lang, noRedirect = false}, thumbnail = '', fragment = '', pagelink = '') {
 	if ( reaction ) reaction.removeEmoji();
-	if ( !msg?.showEmbed?.() || embed.description ) {
+	if ( !msg?.showEmbed?.() || missing !== undefined || embed.description ) {
+		if ( missing !== undefined ) {
+			if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
+				embed.spliceFields( 0, 0, embed.backupField );
+			}
+			if ( embed.backupDescription && embed.length < 5000 ) {
+				embed.setDescription( embed.backupDescription );
+			}
+		}
 		return msg.sendChannel( content, {embed} );
 	}
 	return msg.sendChannel( content, {
@@ -112,7 +123,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 				if ( embed.backupDescription && embed.length < 5000 ) {
 					embed.setDescription( embed.backupDescription );
 				}
-				return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
+				return;
 			}
 			if ( !embed.description && embed.length < 4000 ) {
 				var description = revision['*'];
@@ -138,7 +149,6 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 					embed.setDescription( embed.backupDescription );
 				}
 			}
-			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		}, error => {
 			console.log( '- Error while getting the page content: ' + error );
 			if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
@@ -147,6 +157,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 			if ( embed.backupDescription && embed.length < 5000 ) {
 				embed.setDescription( embed.backupDescription );
 			}
+		} ).then( () => {
 			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		} );
 		if ( !fragment && !embed.fields.length && infoboxes ) {
@@ -169,7 +180,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 				if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
 					embed.spliceFields( 0, 0, embed.backupField );
 				}
-				return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
+				return;
 			}
 			if ( !embed.forceTitle ) {
 				var displaytitle = htmlToDiscord( response.body.parse.displaytitle );
@@ -360,7 +371,6 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 					embed.setDescription( embed.backupDescription );
 				}
 			}
-			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		}, error => {
 			console.log( '- Error while parsing the page: ' + error );
 			if ( embed.backupDescription && embed.length < 5000 ) {
@@ -369,6 +379,7 @@ function parse_page(lang, msg, content, embed, wiki, reaction, {title, contentmo
 			if ( embed.backupField && embed.length < 4750 && embed.fields.length < 25 ) {
 				embed.spliceFields( 0, 0, embed.backupField );
 			}
+		} ).then( () => {
 			return message.edit( content, {embed,allowedMentions:{users:[msg.author.id]}} ).catch(log_error);
 		} );
 	} );

+ 1 - 1
i18n/en.json

@@ -134,7 +134,7 @@
         "main": "Discussions",
         "post": "post",
         "tags": "Tags:",
-        "votes": "$1 {{PLURAL:$2|vote|votes}}"
+        "votes": "$1 {{PLURAL:$2|vote|votes}} ($3%)"
     },
     "fallback": [
         " ",